| 1.test测试命令 
 test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其测试符和相应的功能分别如下:
 
 test命令(1)数值测试:
 
 -eq:等于则为真
 
 -ne:不等于则为真
 
 -gt:大于则为真
 
 -ge:大于等于则为真
 
 -lt:小于则为真
 
 -le:小于等于则为真
 
 test命令(2)字符串测试:
 
 =:等于则为真
 
 !=:不相等则为真
 
 -z 字符串:字符串长度伪则为真
 
 -n 字符串:字符串长度不伪则为真
 
 test命令(3)文件测试:
 
 -e 文件名:如果文件存在则为真
 
 -r 文件名:如果文件存在且可读则为真
 
 -w 文件名:如果文件存在且可写则为真
 
 -x 文件名:如果文件存在且可执行则为真
 
 -s 文件名:如果文件存在且至少有一个字符则为真
 
 -d 文件名:如果文件存在且为目录则为真
 
 -f 文件名:如果文件存在且为普通文件则为真
 
 -c 文件名:如果文件存在且为字符型特殊文件则为真
 
 -b 文件名:如果文件存在且为块特殊文件则为真
 
 另外,Linux还提供了与(“!”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来,其优先级为:“!”最高,“-a”次之,“-o”最低。同时,bash也能完成简单的算术运算,格式如下:
 
 $[expression]
 
 例如:var1=2
 
 var2=$[var1*10+1]
 
 则:var2的值为21。
 
 test命令2.if条件语句
 
 if [ -x /sbin/quotaon ]; then
 
 echo "Turning on Quota for root filesystem"
 
 /sbin/quotaon /
 
 elif [ -x /sbin/quotaon ]; then
 
 /usr/bin/bash
 
 else
 
 echo "ok"
 
 fi
 
 test命令3.for 循环
 
 #!/bin/sh
 
 WORD="a b c d e f g h i j l m n o p q r s t u v w x y z"
 
 for i in $WORD ; do
 
 echo $i
 
 done
 
 #!/bin/sh
 
 FILES=`ls /txt/*.txt`
 
 for txt in $FILES ; do
 
 doc=`echo $txt | sed "s/.txt/.doc/"`
 
 mv $txt $doc
 
 done
 
 test命令4.while和until 循环
 
 #!/bin/sh
 
 while [ -f /var/run/ppp0.pid ] ; do
 
 killall pppd
 
 done
 
 #!/bin/sh
 
 until [ -f /var/run/ppp0.pid ] ; do
 
 sleep 1
 
 done
 
 Shell还提供了true和false两条命令用于建立无限循环结构的需要,它们的返回状态分别是总为0或总为非0
 
 test命令5.case 条件选择
 
 #!/bin/sh
 
 case $1 in
 
 start | begin)
 
 echo "start something"
 
 ;;
 
 stop | end)
 
 echo "stop something"
 
 ;;
 
 *)
 
 echo "Ignorant"
 
 ;;
 
 esac
 
 case表达式中也可以使用shell的通配符(“*”、“?”、“[ ]”)。
 
 test命令6.无条件控制语句break和continue
 
 break 用于立即终止当前循环的执行,而contiune用于不执行循环中后面的语句而立即开始下一个循环的执行。这两个语句只有放在do和done之间才有效。
 
 test命令7.函数定义
 
 在shell中还可以定义函数。函数实际上也是由若干条shell命令组成的,因此它与shell程序形式上是相似的,不同的是它不是一个单独的进程,而是shell程序的一部分。函数定义的基本格式为:
 
 functionname
 
 {
 
 若干命令行
 
 }
 
 调用函数的格式为:
 
 functionname param1 param2 ……
 
 shell函数可以完成某些例行的工作,而且还可以有自己的退出状态,因此函数也可以作为if、while等控制结构的条件。在函数定义时不用带参数说明,但在调用函数时可以带有参数,此时shell将把这些参数分别赋予相应的位置参数$1、$2、...及$*。
 
 test命令8.命令分组
 
 在shell中有两种命令分组的方法:“()”和“{}”,前者当shell执行()中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰;{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们要真正使用圆括弧和花括弧时(如计算表达式的优先级),则需要在其前面加上转
 
 义符(\)以便让shell知道它们不是用于命令执行的控制所用。
 
 test命令9.信号
 
 trap命令用于在shell程序中捕捉到信号,之后可以有三种反应方式:
 
 test命令(1)执行一段程序来处理这一信号
 
 test命令(2)接受信号的默认操作
 
 test命令(3)忽视这一信号
 
 trap对上面三种方式提供了三种基本形式:
 
 第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,将执行双引号中的命令串。
 
 trap 'commands' signal-list
 
 trap "commands" signal-list
 
 为了恢复信号的默认操作,使用第二种形式的trap命令:trap signal-list
 
 第三种形式的trap命令允许忽视信号:trap " " signal-list
 
 注意:test命令(1)对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。
 
 test命令(2)在trap中可以定义对信号0的处理(实际上没有这个信号),shell程序在其终止(如执行exit语句)时发出该信号。
 
 test命令(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致shell程序无法终止。
 |