linux shell 脚本 常用的if判断条件

工作中经常需要写shell脚本来处理一些重复的东西,使用脚本自动编译,使用脚本多机器传输文件。

因为不是天天写shell,只是用到的时候写一个,再加上脚本中的if的判断条件有点多,容易忘记,所以做个备忘录,以备不时之需

先说一下 if 表达式的基本语法

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

注意:

  1. if 条件 要以 fi 结束
  2. [] if语句中 和 表达式要注意空格
  3. thenfi 是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开
  4. 使用 -z 或者 -n 来检查长度的时候,没有定义的变量也为0

下面是常用表达式

数字判断

表达式含义
int1 -eq int2两数相等为真
int1 -ne int2两数不等为真
int1 -gt int2int1大于int2为真
int1 -ge int2int1大于等于int2为真
int1 -lt int2int1小于int2为真
int1 -le int2int1小于等于int2为真

逻辑相关

表达式含义
-a
-o 
! 非

字符串相关

表达式含义
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” 开启则为真
发表了56篇文章 · 总计128.44k字
本博客已稳定运行
© QX
使用 Hugo 构建
主题 StackJimmy 设计