shell编程笔记

来源:互联网 发布:刷机软件下载 编辑:程序博客网 时间:2024/06/07 17:40

常用语句

  1、if - then - else语句
    if command1
     then
     command1
    else
     command2
    fi
  在此结构中,if条件满足时command1执行,否则执行command2

2、case语句
  case语句不但取代了多个elif和then语句,还可以用变量值对多个模式进行匹配,当某个模式与变量值匹配后,其后的一系列命令将 被执行,下面是case语句使用的语句。
  case value in
   pattem 1)    

command

    command;;
   pattem 2)
    command
    command;;
   ....
   pattem)
    command;
  esac
  case语句只执行其中的一组命令,当变量值与多个模式相匹配时,只有第一个匹配的模式对应的命令被执行。";;"表示该模式对应的命令部分程序。

  3、While,until,for循环
  在While循环语句中,当某一条件为真时,执行指定的命令。语句的结构如下:
while command
do
   command
   command
   … …
done

until语句正好同while相反,该语句使循环代码重复执行,直到遇到某一条件为真才停止。
Until语句的结构如下:
until command
   do
     command
     command
     … …
   done

for语句中的循环是否执行并不由某个条件的真和假来决定,决定for循环是否继续的条件是参数表中是否还有未处理的参数。
For语句的结构如下:
for variable in arg1 arg2 … argn
do
command
command
… …
done

在程序循环语句中,我们有时候希望遇到某中情况时候结束本次循环执行下次循环或结束这个循环,这就涉及到两条语句:continue和break。continue命令可使程序忽略其后循环体中的其他指令,直接进行下次循环,而break命令则立刻结束循环,执行循环体后面的的语句

4、read语句
  Shell程序不但可以通过命令行参数得到输入数据,还可以使用read命令提示用户输入数据,其语法格式为:
  read var1 var2... ...varn
当Bsh遇到一个read语句时,在标准输入文件中读取数据直到一个换行符。此时Shell在解释输入行时,不进行文件名或变量的替换,只是简单地删除多余的空格。然后Shell将输入行的第一个字的内容给变量1,第二个给变量2,直到所有变量都赋上值或是输入行为空。若输入行中字的个数超过变量个数,Shell将把输入行中剩余的所有字的内容都赋给最后一个变量。当变量个数多于输入行字的个数时候,多于的变量将赋一个空值。输入行的每一个字是由空格分隔的一个字母和数字组成的字符串。
  $read var1 var2 var3
    输入:Hello my friend
  
  $echo $var1 $var2 $var3

逃逸字符 echo命令可以使用一些特殊的逃逸字符进行格式化输出,下面是这些字符及其含义:
    /b  Backspace
    /c  显示后不换行
    /f  在终端上屏幕的开始处显示
    /n  换行
    /r  回车
    /t  制表符
    /v  垂直制表符
    /   反斜框
    /0nnn 用1,2或3位8进制整数表示一个ASCII码字符
 

test用法 test是用来测试是否为真的。

1、比较两个字符串相等或不等,也可以测试一个串是否赋了值。有关串的操作符如下:
    str1 = str2      当两个串有相同内容、长度时为真,注意“ = ”两边要有一个空格
    str1 != str2      当串str1和str2不等时为真
    -n str1        当串的长度大于0时为真(串非空)
    -z str1        当串的长度为0时为真(空串)
    str1         当串str1为非空时为真
  不但Shell程序可以使用test进行条件判断,test命令也可以独立执行,如:
    $str1=abcd
    $test $str1 = abcd
    $echo $?
    结果显示:0

    $str1="abcd "
    $test "$str1" = abcd
    $echo $?
    结果显示:1
  结果显示为0表示真,1表示假。

2、test命令对两个数字进行比较,使用的操作符如下:
    int1 -eq int2    两数相等为真
    int1 -ne int2    两数不等为真
    int1 -gt int2    int1大于int2为真
    int1 -ge int2    int1大于等于int2为真
    int1 -lt int2    int1小于int2为真
    int1 -le int2    int1小于等于int2为真
  下面的例子反映了字符串比较与数字比较的不同:
    $str1=1234
    $str2=01234
    $test $str1 = $str2
    $echo $?
    结果显示:1


    $test $str1 -eq $str2
    $echo $?
    结果显示:0

3、有关文件的测试
  使用test进行的第三类测试是测试文件的状态,用户可以测试文件是否存在,是否可写以及其他文件属性。下面是文件测试时使用的选项。注意只有文件存在时,才有可能为真。
  -r file     用户可读为真
  -w file     用户可写为真
  -x file     用户可执行为真
  -f file     文件为正规文件为真
  -d file     文件为目录为真
  -c file     文件为字符特殊文件为真
  -b file     文件为块特殊文件为真
  -s file     文件大小非0时为真
  -t file     当文件描述符(默认为1)指定的设备为终端时为真

4、条件测试(and 、or 、not)
  -a         与
  -o        或
  !        非
  就是组合条件了,任何高级语言中都有的(NOT 、AND 、OR),例如:
    $test -r em.null -a -s em.null
    $echo $?
    结果显示:1
    说明了em.null并不是可读并且非空的文件
bsh中还有另一种执行test命令的方法,就是把测试条件放到一对[ ]中,例如:
    $int1=4
    $[ $int1 -gt 2 ] 要注意在[ 的后面和 ]符号的前面要有一个空格
    $echo $?
    结果显示:0

放在"()"中的命令将在子Shell中运行,而放在"{}"中的命令将在当前Shell中运行。子Shell中运行的命令不影响当前Shell的变量。当前Shell中运行的命令影响当前Shell的变量。

原创粉丝点击