工作中经常需要写shell脚本来处理一些重复的东西,使用脚本自动编译,使用脚本多机器传输文件。
因为不是天天写shell,只是用到的时候写一个,再加上脚本中的if的判断条件有点多,容易忘记,所以做个备忘录,以备不时之需
先说一下 if 表达式的基本语法
if [ command ]; then
符合该条件执行的语句
fi
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
注意:
- if 条件 要以
if
结束
-
[]
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” 开启则为真 |
网友评论