测试表达式是否成立,若成立则返回0,否则返回其他数值。
格式1:test 条件表达式 格式2:[ 条件表达式 ]
[ 操作符 文件或目录 ]
-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/bzlmage -ot arch/i386/boot/bzlmage ] |
[root@localhost ~]# [ -e first.sh ] [root@localhost ~]# echo $? 0 [root@localhost ~]# [ -e first1.sh ] [root@localhost ~]# echo $? 1
[ 整数1 操作符 整数2 ]
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 ] |
[ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ]
-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" ] |
####测试当前语言环境 [root@localhost ~]# echo $LANG zh_CN.UTF-8 [root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US" Not en.US [root@localhost ~]#
[ 表达式1 ] 操作符 [ 表达式2 ] …
格式2:
命令1 操作符 命令2 …
if 条件测试操作 then 命令序列 fi
if 条件测试操作1 then 命令序列1 elif 条件测试操作2 then 命令序列2 else 命令序列3 fi
判断分数所在区间,反馈不同的结果
#!/bin/bash read -p "input score:" nums if [ $nums -ge 90 ];then echo "exellent" elif [ $nums -ge 80 ];then echo "well done" elif [ $nums -ge 70 ];then echo "not very well" elif [ $nums -ge 60 ];then echo "not good" else echo "bad" fi
case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; …… *) 默认命令序列 esac