工作中经常需要写shell脚本来处理一些重复的东西,使用脚本自动编译,使用脚本多机器传输文件。
因为不是天天写shell,只是用到的时候写一个,再加上脚本中的if的判断条件有点多,容易忘记,所以做个备忘录,以备不时之需
先说一下 if 表达式的基本语法
1if [ command ]; then
2 符合该条件执行的语句
3fi
1if [ command ];then
2 符合该条件执行的语句
3elif [ command ];then
4 符合该条件执行的语句
5else
6 符合该条件执行的语句
7fi
注意:
- if 条件 要以
fi 结束 [] if语句中 和 表达式要注意空格then 和 fi 是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开- 使用
-z 或者 -n 来检查长度的时候,没有定义的变量也为0
下面是常用表达式
数字判断
| 表达式 | 含义 |
|---|
| int1 -eq int2 | 两数相等为真 |
| int1 -ne int2 | 两数不等为真 |
| int1 -gt int2 | int1大于int2为真 |
| int1 -ge int2 | int1大于等于int2为真 |
| int1 -lt int2 | int1小于int2为真 |
| int1 -le int2 | int1小于等于int2为真 |
逻辑相关
字符串相关
| 表达式 | 含义 |
|---|
| STRING | 当串str1为非空时为真 |
| -z STRING | “STRING” 的长度为零则为真 |
| -n STRING | “STRING” 的长度为非零 non-zero则为真 |
| STRING1 == STRING2 | 如果2个字符串相同则为真 |
| STRING1 != STRING2 | 如果字符串不相等则为 |
文件相关
| 表达式 | 含义 |
|---|
| -a FILE | 如果 FILE 存在则为真 |
| -b FILE | 如果 FILE 存在且是一个块特殊文件则为真 |
| -c FILE | 如果 FILE 存在且是一个字特殊文件则为真 |
| -d FILE | 如果 FILE 存在且是一个目录则为真 |
| -e FILE | 如果 FILE 存在则为真 |
| -f FILE | 如果 FILE 存在且是一个普通文件则为真 |
| -g FILE | 如果 FILE 存在且已经设置了SGID则为真 |
| -h FILE | 如果 FILE 存在且是一个符号连接则为真 |
| -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 如果 FILE 存在且是可写的则为真 |
| -x FILE | 如果 FILE 存在且是可执行的则为真 |
| -O FILE | 如果 FILE 存在且属有效用户ID则为真 |
| -G FILE | 如果 FILE 存在且属有效用户组则为真 |
| -L FILE | 如果 FILE 存在且是一个符号连接则为真 |
| -S FILE | 如果 FILE 存在且是一个套接字则为真 |
| FILE1 -ot FILE2 | 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在则为真 |
| FILE1 -ef FILE2 | 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真 |
| -o OPTIONNAME | 如果 shell选项 “OPTIONNAME” 开启则为真 |