shell测试判断

测试

测试结构

测试命令一般有2种方式:

  • test

    test expression
    
  • [ ]
    bash
    [ expression ]

    这种方式一般与if case while配合使用

整数比较运算符

运算符 描述 示例
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 ]

字符串运算符

运算符 描述 示例
-z string 如果 string 长度为零,则为真 [ -z “$myvar” ]
-n string 如果 string 长度非零,则为真 [ -n “$myvar” ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ “$myvar” = “one two three” ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ “$myvar” != “one two three” ]
string 判断字符串是否为空 [ $str ]

文件操作符

运算符 描述 示例
-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 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

逻辑运算符

运算符 描述 示例
! expression not
expr1 -a expr2 and
expr1 -o expr2 or

判断

简单if结构

#then不另起行
if [ "$aa" = "$bb" -o "$cc" = "$dd" ] ; then 
    echo "yes"    
fi  


#then 另起行
if [ "$aa" = "$bb" -o "$cc" = "$dd" ] 
then  
    echo "yes"    
fi  

exit命令

exit status

参数被保存在$?变量中

if/else结构

if [ "$aa" = "$bb" -o "$cc" = "$dd" ]; then  
    echo "yes"  
else  
    echo "no"  
fi  

if/else嵌套

if/elif/else嵌套

if [ "$aa" = "$bb" -o "$cc" = "$dd" ]
then  
    echo "yes"  
elif [ "$aa" = 3 ]  
    echo "no"  
fi  

case结构

    echo 'Input a number between 1 to 4'
    echo 'Your number is:\c'
    read aNum
    case $aNum in
        1)  echo 'You select 1'
        #-----注意;;
        ;;
        2)  echo 'You select 2'
        ;;
        3)  echo 'You select 3'
        ;;
        4)  echo 'You select 4'
        ;;
        *)  echo 'You do not select a number between 1 to 4'
        ;;
    esac

运算符

算数运算符

运算符 说明 举例
+ 加法 expr $a + $b 结果为 30。
- 减法 expr $a - $b 结果为 10。
* 乘法 expr $a \* $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
** 取幂 5**3
= 赋值 a=$b 将把变量 b 的值赋给 a。
== 相等。 用于比较两个数字,相同则返回 true。 [ a== b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ a!= b ] 返回 true。

算数符合运算符

运算符 说明 举例
+= 加法 expr $a + $b 结果为 30。
-= 减法 expr $a - $b 结果为 10。
*= 乘法 expr $a \* $b 结果为 200。
/= 除法 expr $b / $a 结果为 2。
%= 取余 expr $b % $a 结果为 0。
**= 取幂 5**3

位运算符

运算符 说明 举例
<< 左移 value=4>>2 4左移2位,value值为16
>> 右移 value=8<<2 8右移2位,value值为2
& 按位与 value=8&&4 8按位与4,value值为0
| 按位或 value=8
\~ 按位非 value=~8 按位非8,value值为-9
^ 按位异或 value=10^3 10按位异或3,value值为9

自增自减运算符

i++运算后加1,i–运算后减1
++i运算前加1,–i运算前减1

数字常量

Linux Shell默认将数字作为十进制进行处理,当使用0前缀表示八进制,0x前缀表示十六进制,同时可以使用num#形式

let "num=40"
let "num=027"
let "num=0x35"

let "num=2#11111000"
let "num=8#2735"
let "num=16#ffee"

猜你喜欢

转载自blog.csdn.net/demon7552003/article/details/72857182