shell脚本之if语句
一、前言
结构化编程中,主要有三种结构:顺序、分支、循环。由此可见分支判断的重要性。
而且在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 [[ $1 = 'DEBUG' ]]; then CMD="make clean;make COMFLAG='-D__LINUX__ ' DEBUGFLAG='-g'" elif [[ $1 = 'RELEASE' ]]; then CMD="make clean;make COMFLAG='-D__LINUX__ '" else echo "Error parameter!" exit fi
当条件处使用的是: if [ $1 = 'DEBUG' ] 时,不加参数直接运行总是报错:unary operator expected
原因是当没有参数时,该行变为: if [ = 'DEBUG' ] 那么按照语法来说,'['和'DEBUG'是肯定不相等的,这样前面就少了一个'[',所以报错了。