Shell 其实并不常写,每次写的时候就总得查一下比较语句的语法该怎么写。本文章就做为笔记记录这些资料吧。
本文地址:http://www.javashuo.com/article/p-gkwogssc-ed.htmlhtml
Shell数值、字符串比较
shell判断和比较
《 Linux程序设计(第4版)》shell
if [ ${SOME_PARA} -eq ${ANOTHER_PARA} ]; then ... elif [ ${SOME_PARA} -eq "0" ]; then ... else ... fi
上面是一个典型的 if-else 语句语法结构。这里的条件是数值比较。保险状况下,注意各类空格:segmentfault
-eq
”之间要空格“then
”能够单独起一行,好比:app
if [ ... ] then ... fi
# ----------------------------------- while [ ... ]; do ... done # ----------------------------------- while [ ... ] do ... done # ----------------------------------- until [ ... ]; do ... done # ----------------------------------- until [ ... ] do ... done
While 的格式和 if-else 其实差很少,这里就不细说了。Until 的意思其实就是 while 的非。ui
$n
:命令的参数,好比$1
、$2
等等。其中$0
表示参数名,其实就是main()
的argv[0]
$#
:命令参数的数量$?
:上一个命令的返回值$$
:当前shell程序的pid$1
:上一个程序的pid$@
:完整的参数列表-eq
:等于-ne
:不等于-gt
:大于-ge
:大于等于-lt
:小于-le
:小于等于<
, <=
, >
, >=
:这四个顾名思义。不过使用的时候要注意双括号,好比(("$a" < "$b"))
。我建议仍是用上面那些算了。=
:等于!=
:不等于-z
:字符串长度为零-n
:字符串不为空注:如下条件返回真的必要条件是目标要存在.net
-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