注意: 本文为转载内容,请支持原作者. 原文链接:https://blog.51cto.com/u_12304807/3415773
Shell脚本变量判断参数命令
Linux
600 ·
0 ·
2022-02-24 09:50:46
最新编辑时间: 2022-02-24 09:50:54
最新编辑原因:
今天基于if判断逻辑升级了upupor网站发布脚本,所以用到的相关知识在这里记录一下

1.系统变量

$n   传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
$?   上个命令的退出状态,或函数的返回值。成功返回0,失败返回1
$#   传递给脚本或函数的参数个数
$*   所有这些参数都被双引号引住。若一个脚本接收两个参数,$*等于$1$2
$0   正在被执行命令的名字。对于shell脚本而言,这是被激活命令的路径
$@   被双引号(” “)包含时,与 $* 稍有不同。若一个脚本接收到两个参数,$@等价于$1$2
$$   当前shell的进程号。对于shell脚本,这是其正在执行时的进程ID
$!   前一个后台命令的进程号

2.文件或目录判断

-b file 若文件存在且是一个块特殊文件,则为真
-c file 若文件存在且是一个字符特殊文件,则为真
-d file 若文件存在且是一个目录,则为真
-e file 若文件存在,则为真
-f file 若文件存在且是一个规则文件,则为真
-g file 若文件存在且设置了SGID位的值,则为真
-h file 若文件是软链接,则为真
-k file 若文件存在且设置了”sticky”位的值
-L file 若文件为符号链接,则为真
-p file 若文件存在且为一已命名管道,则为真
-r file 若文件可读,则为真
-s file 判断文件是否存在,且是否为非空,不为空,则为真
-S file判断文件是否存在,且是否为套接字文件
-t file 文件描述符(默认为1)指定的设备为终端时为真
-u file 若文件存在且设置了SUID,则为真
-w file 若文件可写,则为真
-x file 若文件可执行,则为真
[ file1 -nt file2 ] 若file1比file2新,或file1存在但file2不存在,则为真
[ file1 -ot file2 ] 若file1比file2老,或file2存在但file1不存在,则为真
[ file1 -ef file2 ] 若file1和file2指向相同的设备和节点号则返回,为真

3.整数判断

-eq  两数相等,则为真     例:if [ "$a" -eq "$b" ]
-ne  两数不相等,则为真   例:if [ "$a" -ne "$b" ]
-gt  a大于b,则为真       例:if [ "$a" -gt "$b" ]
-ge  大于或等于,则为真   例:if [ "$a" -ge "$b" ]
-lt  a小于b,则为真       例:if [ "$a" -lt "$b" ]
-le  a小于或等于b,则为真 例:if [ "$a" -le "$b" ]

<    小于(需双括号):(("$a" < "$b"))
<=   小于等于(需双括号):(("$a" <= "$b")) 
>    大于(需双括号):(("$a" > "$b"))
>=   大于等于(需双括号):(("$a" >= "$b"))

小数据比较可使用 AWK
4.逻辑运算判断符

!  [ ! false ]              返回true 逻辑否,条件为假,结果为真
-a [ $a -lt 2 -a $b -gt 5 ] 返回true 逻辑与,两个表达式都为真,则为真
-o [ $a -lt 2 -o $b -gt 5 ] 返回true 逻辑或,只要有一个表达式为true,则为真

[ ] || [ ]OR来合并两个条件
[ ] &amp;&amp; [ ]AND来合并两个条件

5.字符串判断

== 若两个字符串相同则为真,=等价 例:[ "str1" = "str2" ]
!= 若字符串不相同则为真           例:[ "str1" != "str2" ]
<  若str1字典排序在str2前则为真   例:[[ "str1" < "str2" ]] >  若str1字典排序在str2后则为真   例:[ "str1" \> "str2" ]
-n 若str长度非零则为真,即非空     例:[ -n "str1" ]
-z 若file长度为零,即空,则为真     例:[ -z "str1" ]

注意:在 [] 结构中” < “需要被转义,例如: [ "str1" /< "str2" ] ,在双中括号中则无需转义。
总结:
使用 -n 在[]结构中测试,必须要用 "" 把变量引起来,使用一个未被 "" 的字符串,请使用 ! -z ,如果使用未被双引号变量,虽然可以工作,但这并不安全,习惯于使用双引号括住变量测试字符串是一种良好的习惯。
另外, [[ ]] 结构比 [ ] 结构更加通用。


本文链接:https://www.upupor.com/u/22022401487592598528 复制

无内容

推荐阅读