工作中经常需要写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” 开启则为真 |