shell(1)

运算符 描述 示例
文件比较运算符
-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ]
filename1-nt filename2 如果 filename1filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1-ot filename2 如果 filename1filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 如果 string长度为零,则为真 [ -z "$myvar" ]
-n string 如果 string长度非零,则为真 [ -n "$myvar" ]
string1= string2 如果 string1string2相同,则为真 [ "$myvar" = "one two three" ]
string1!= string2 如果 string1string2不同,则为真 [ "$myvar" != "one two three" ]
算术比较运算符
num1-eq num2 等于[ 3 -eq $mynum ]
num1-ne num2 不等于[ 3 -ne $mynum ]
num1-lt num2 小于[ 3 -lt $mynum ]
num1-le num2 小于或等于[ 3 -le $mynum ]
num1-gt num2 大于[ 3 -gt $mynum ]
num1-ge num2 大于或等于[ 3 -ge $mynum ]

 

循环结构:"for"

 #!/usr/bin/env bash

for myfile in /etc/r*
do
     if [ -d "$myfile" ]
then
       echo "$myfile (dir)"
else
       echo "$myfile"
fi
done
 

通常使用 "While" 语句来循环一定次数,比如,下例将循环 10 次 
myvar=0
 while [ $myvar -ne 10 ]
 do
     echo $myvar
     myvar=$(( $myvar + 1 ))
 done
"Until" 语句提供了与 "while" 语句相反的功能:只要特定条件为  ,它们就重复。下面是一个与前面的 "while" 循环具有同等功能的 "until" 循环:
 myvar=0
 until [ $myvar -eq 10 ]
 do
     echo $myvar
     myvar=$(( $myvar + 1 ))
 done

Case 语句

Case 语句是另一种便利的条件结构。这里有一个示例片段:

#!/usr/bin/env bash myvar="hello" myfunc() { local x local myvar="one two three" for x in $myvar do echo $x done } myfunc echo $myvar $x
 
 case "${x##*.}" in
      gz)
            gzunpack ${SROOT}/${x}
            ;;
      bz2)
            bz2unpack ${SROOT}/${x}
            ;;
      *)
            echo "Archive format not recognized."
            exit
            ;;
 esac    
在上例中,bash 首先扩展 "${x##*.}"。在代码中,"$x" 是文件的名称,"${x##.*}" 除去文件中最后句点后文本之外的所有文本。
然后,bash 将产生的字符串与 ")" 左边列出的值做比较。在本例中,"${x##.*}" 先与 "gz" 比较,然后是 "bz2",最后是 "*"。
如果 "${x##.*}" 与这些字符串或模式中的任何一个匹配,则执行紧接 ")" 之后的行,直到 ";;" 为止,然后 bash 继续执行结束符 "esac" 之后的行。
如果不匹配任何模式或字符串,则不执行任何代码行,在这个特殊的代码片段中,至少要执行一个代码块,因为任何不与 "gz" 或 "bz2" 匹配的字符串都将与 "*" 模式匹配。
Local 
#!/usr/bin/env bash
 
 myvar="hello"
 
 myfunc() {
     local x
     local myvar="one two three"
     for x in $myvar
     do
         echo $x
     done
 }
 
 myfunc
 
 echo $myvar $x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值