shell脚本之if语句

时间:2023-03-09 03:30:33
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 [[ $ = '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'是肯定不相等的,这样前面就少了一个'[',所以报错了。