小技巧:
if condition; then commands; fi
if condition; then commands;elif condition;then commands;else commands fi
嵌套过多会影响阅读,可以使用逻辑运算符变简单直接:
[ condition ] && commands;
[ condition ] || commands;
注:条件一般放在封闭的括号中,且在 “[” 和 “]"后和前必须有空格,不然会报错。
算术比较:
[ $var -eq 0 ] 等于0 返回真
[ $var -ne 0 ] 不等于0返回真
-gt 大于 -lt 小于 -ge大于等于 -le 小于等于
多条件组合:
[ $var1 -ne 0 -a $var2 lt $var1 ] -a表示逻辑与
[ $var1 -ne 0 -o $var2 lt $var1 ] -o表示逻辑或
字符串比较:
注:字符串比较最好采用双中括号,不然可能报错;
”=“ 前后各有一个空格,如果不加则变成了赋值关系!!!
[[ $str1 = $str2 ]] 两字符串相等时返回真,即二者文本相同
[[ $str1 == $str2 ]] 作用同上
!= 不同返回真 ’>'和'<'不赘述
[[ -z $str1 ]] 如果字符串是空串,返回真
[[ -n $str1 ]] 如果字符串不是空串,返回真
文件比较:
[ -f $file ] 文件路径或者文件名则返回真
[ -x $file ] 文件可执行则返回真
[ -d $file ] 目录为真返回真
[ -e $file ] 文件存在返回真
[ -c $file ]文件是字符设备文件的路径返回真
[ -b $file ]文件是块设备文件的路径返回真
[ -w $file ]文件可写返回真
[ -r $file ]文件可读返回真
[ -L $file ]文件是符号链接返回真
例:
#!/bin/bashfile="/etc/passwd"
if [ -e $file ];
then echo File Exists;
else
echo $file not exists
fi
初学的同胞们可以自己写一下, 会发现各种问题,比如赋值写成相等。。
最后一种: test
test 的使用可以减少中括号数量
直接上代码:
if [ $var -eq 0 ] ;
then echo true;
fi
可以被替换为:
if test $var -eq 0 ; 。。。
路途遥远,要有耐心