一、前言
结构化编程中,主要有三种结构:顺序、分支、循环。由此可见分支判断的重要性。
而且在shell编程中往往会遇到进行判断的情况,比如:判断文件是否存在、目录是否存在等等。
二、if语句的结构
if [ 条件 ];
then
...
elif [ 条件 ];
then
...
else
...
fi
三、shell中的分支判断
shell中的判断有以下几种:
1.字符串判断
str1 = str2 当两个串有相同内容时为真
str1 != str2 当两个串内容不同时为真
-n str1 当串的长度大于0时为真
-z str1 当串的长度为0是为真
str1 当串为非空时为真
2.数字判断
n1 -eq n2 两数相等为真
n1 -ne n2 两数不等为真
n1 -gt n2 n1大于n2为真
n1 -ge n2 n1大于等于n2为真
n1 -lt n2 n1小于n2为真
n1 -le n2 n1小于等于n2为真
3.文件判断
-r file 文件可读为真
-w file 文件可写为真
-x file 文件可执行为真
-f file 文件为普通文件为真
-d file 文件为目录文件为真
-c file 文件为字符特殊文件为真
-b file 文件为块特殊文件为真
-s file 文件为链接文件为真
-t file 当文件描述符指定的设备为终端时为真
4.组合
-a 与
-o 或
! 非
5.注意
今天写了个脚本,运行的时候一直出错:
if [[ $ = 'DEBUG' ]]; then
CMD="make clean;make COMFLAG='-D__LINUX__ ' DEBUGFLAG='-g'"
elif [[ $ = 'RELEASE' ]]; then
CMD="make clean;make COMFLAG='-D__LINUX__ '"
else
echo "Error parameter!"
exit
fi
当条件处使用的是: if [ $ = 'DEBUG' ] 时,不加参数直接运行总是报错:unary operator expected
原因是当没有参数时,该行变为: if [ = 'DEBUG' ] 那么按照语法来说,'['和'DEBUG'是肯定不相等的,这样前面就少了一个'[',所以报错了。