Shell 命令之判断

循环语句

1. 基本语法

1
2
3
4
5
6
7
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi

2. 命令和参数

条件表达式要放在方括号之间,并且两端要有空格

2.1. 字符串判断

  • [ -z STRING ], [ STRING1 ] : STRING 长度为零则为真
  • [ -n STRING ] : STRING 长度非零则为真
  • [ STRING1 = STRING2 ] : 两个字符串相同则为真
  • [ STRING1 != STRING2 ] : 字符串不相同则为真

2.2. 数值判断

  • [ INT1 -eq INT2 ] : =
  • [ INT1 -ne INT2 ] : <>
  • [ INT1 -gt INT2 ] : >
  • [ INT1 -ge INT2 ] : >=
  • [ INT1 -lt INT2 ] : <
  • [ INT1 -le INT2 ] : <=

2.3. 文件/文件夹(目录)判断

  • [ -b FILE ] : 如果 FILE 存在且是一个块特殊文件则为真
  • [ -c FILE ] : 如果 FILE 存在且是一个字特殊文件则为真
  • [ -d DIR ] : 如果 FILE 存在且是一个目录则为真
  • [ -e FILE ] : 如果 FILE 存在则为真
  • [ -f FILE ] : 如果 FILE 存在且是一个普通文件则为真
  • [ -g FILE ] : 如果 FILE 存在且已经设置了SGID则为真
  • [ -k FILE ] : 如果 FILE 存在且已经设置了粘制位则为真
  • [ -p FILE ] : 如果 FILE 存在且是一个名字管道(F如果O)则为真
  • [ -r FILE ] : 如果 FILE 存在且是可读的则为真
  • [ -s FILE ] : 如果 FILE 存在且大小不为0则为真
  • [ -t FD ] : 如果文件描述符 FD 打开且指向一个终端则为真
  • [ -u FILE ] : 如果 FILE 存在且设置了SUID (set user ID)则为真*
  • [ -w FILE ] : 如果 FILE存在且是可写的则为真
  • [ -x FILE ] : 如果 FILE 存在且是可执行的则为真
  • [ -O FILE ] : 如果 FILE 存在且属有效用户ID则为真
  • [ -G FILE ] : 如果 FILE 存在且属有效用户组则为真
  • [ -L FILE ] : 如果 FILE 存在且是一个符号连接则为真
  • [ -N FILE ] : 如果 FILE 存在 and has been mod如果ied since it was last read则为真
  • [ -S FILE ] : 如果 FILE 存在且是一个套接字则为真
  • [ FILE1 -nt FILE2 ] : 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not则为真
  • [ FILE1 -ot FILE2 ] : 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真
  • [ FILE1 -ef FILE2 ] : 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真

2.4. 布尔运算符

  • ! : 非运算
  • -o : 或运算,有一个表达式为 true 则返回 true, 比如 [ $a -lt 20 -o $b -gt 100 ] 返回 true
  • -a : 与运算,两个表达式都为 true 才返回 true, 比如 [ $a -lt 20 -a $b -gt 100 ] 返回 false