shell 条件表达式
1、条件测试的常用语法如下
1、test 测试表达式
2、[ 测试表达式 ] #两边需要有空格
3、[[ 测试表达式 ]]
4、(( 测试表达式 ))
说明:
第一种和第二种是等价的,第三种是扩展的test命令,语法4常用于计算
在[[]] 双中括号中可以使用通配符等进行模式匹配,&& || > < 等操作符可以直接应用于双中括号中,但不能用于单中括号中
2、test简单实例如下,可以查看man test 获得详细的帮助
[root@backup ~]# test -f /etc/passwd && echo 1 || echo 0
1
[root@backup ~]# test -f /etc/passwd11 && echo 1 || echo 0
0
3、[] 但中括号实例
[root@backup ~]# [ -f /etc/passwd ]&& echo 1 || echo 0
1
[root@backup ~]# [ -f /etc/passwd11 ]&& echo 1 || echo 0
0
4、[[]]双中括号实例
[root@backup ~]# [[ 3 > 2 ]]&& echo 1 || echo 0
1
[root@backup ~]# [[ 3 > 4 ]]&& echo 1 || echo 0
0
5、文件测试表达式
[root@backup ~]# [ -d /etc/ ]&& echo 1 || echo 0
1
[root@backup ~]#
[root@backup ~]# [ -d /etc/11 ]&& echo 1 || echo 0
0
6、字符串测试表达式
[root@backup ~]# [ -n "abc" ]&& echo 1 || echo 0
1
[root@backup ~]# [ -z " " ]&& echo 1 || echo 0
0
[root@backup ~]# [ "ab" = "ab" ]&& echo 1 || echo 0
1
[root@backup ~]# [ "ab" != "ab" ]&& echo 1 || echo 0
0
观察系统脚本的写法
7、整数比较
[root@backup ~]# [ 2 -lt 3 ]&&echo 1||echo 0
1
[root@backup ~]# [ 2 -gt 3 ]&&echo 1||echo 0
0
比较两个整数的大小 [root@backup ~]# cat 1.sh #!/bin/bash #no.1 a=$1 b=$2 [ $# -ne 2 ]&&{ echo "USAGE:"$0 "num1 num2" exit 1 } #no.2 expr $a + 10 &>/dev/dull RETVAL1=$? expr $b + 10 &>/dev/dull RETVAL2=$? [ $RETVAL1 -eq 0 -a $RETVAL2 -eq 0 ]||{ echo "pls input two int nums: " exit 2 } #no.3 [ $a -gt $b ] && echo "$a>$b"||{ [ $a -eq $b ] && echo "$a=$b"||echo "$a<$b" } [root@backup ~]# sh 1.sh 1 2 1<2 [root@backup ~]# sh 1.sh 3 2 3>2 [root@backup ~]# sh 1.sh 2 2 2=2
改用read方式
[root@backup ~]# cat 1.sh
#!/bin/bash
#no.1
read -p "Pls input two num: " a b
[ -z "$a" ]||[ -z "$b" ]&&{
echo "pls input two num again"
exit 1
}
#no.2
expr $a + 10 &>/dev/dull
RETVAL1=$?
expr $b + 10 &>/dev/dull
RETVAL2=$?
test $RETVAL1 -eq 0 -a $RETVAL2 -eq 0 ||{
echo "pls input two int nums: "
exit 2
}
#no.3
[ $a -gt $b ] && echo "$a>$b"
[ $a -lt $b ] && echo "$a<$b"
[ $a -eq $b ] && echo "$a=$b"
[root@backup ~]# sh 1.sh
Pls input two num: 1 1
1=1
[root@backup ~]# sh 1.sh
Pls input two num: 1 2
1<2
[root@backup ~]# sh 1.sh
Pls input two num: 2 1
2>1