Shell 其实并不常写,每次写的时候就总得查一下比较语句的语法该怎么写。本文章就作为笔记记录这些资料吧。
本文地址:https://segmentfault.com/a/1190000006097822
Reference
Shell数值、字符串比较
shell判断和比较
《 Linux程序设计(第4版)》
if-else 语法
if [ ${SOME_PARA} -eq ${ANOTHER_PARA} ]; then
...
elif [ ${SOME_PARA} -eq "0" ]; then
...
else
...
fi
上面是一个典型的 if-else 语句语法结构。这里的条件是数值比较。保险情况下,注意各种空格:
- 中括号与变量之间要空格
- 两个参数和操作符 “
-eq
”之间要空格
“then
”可以单独起一行,比如:
if [ ... ]
then
...
fi
while 语法
# -----------------------------------
while [ ... ]; do
...
done
# -----------------------------------
while [ ... ]
do
...
done
# -----------------------------------
until [ ... ]; do
...
done
# -----------------------------------
until [ ... ]
do
...
done
While 的格式和 if-else 其实差不多,这里就不细说了。Until 的意思其实就是 while 的非。
Shell 常用变量
-
$n
:命令的参数,比如$1
、$2
等等。其中$0
表示参数名,其实就是main()
的argv[0]
-
$#
:命令参数的数量 -
$?
:上一个命令的返回值 -
$$
:当前shell程序的pid -
$1
:上一个程序的pid -
$@
:完整的参数列表
数值比较
-
-eq
:等于 -
-ne
:不等于 -
-gt
:大于 -
-ge
:大于等于 -
-lt
:小于 -
-le
:小于等于 -
<
,<=
,>
,>=
:这四个顾名思义。不过使用的时候要注意双括号,比如(("$a" < "$b"))
。我建议还是用上面那些算了。
字符串比较
-
=
:等于 -
!=
:不等于 -
-z
:字符串长度为零 -
-n
:字符串不为空
文件判断
注:以下条件返回真的必要条件是目标要存在
-
-b
:block,块设备 -
-c
:char,字符设备 -
-d
:directory,目录 -
-e
:exist,存在,目录或问ijan -
-f
:file,是否一个普通文件 -
-g
:目标是否设置了SGID位 -
-h
:目标是否符号文件。老的系统可能不支持这一项 -
-k
:目标是否设置了粘滞位 -
-p
:pipe,是否管道 -
-r
:readable,是否可读 -
-s
:大小不为零 -
-u
:目标是否设置了SUID -
-w
:writable,是否可写 -
-o
:owned,是否为当前用户所拥有 -
-x
:executable:是否可执行
如果要表示上述条件的“非”,则加上“!
”即可,如:
if [ ! -d ${SOME_DIR} ]; then
...
fi