Linu shell 的条件 / 比较语法

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 语句语法结构。这里的条件是数值比较。保险情况下,注意各种空格:

  1. 中括号与变量之间要空格

  2. 两个参数和操作符 “-eq”之间要空格

“then”可以单独起一行,比如:

if [ ... ]then    ...fi

while 语法

# -----------------------------------while [ ... ]; do    ...done# -----------------------------------while [ ... ]do    ...done# -----------------------------------until [ ... ]; do    ...done# -----------------------------------until [ ... ]do    ...done

While 的格式和 if-else 其实差不多,这里就不细说了。Until 的意思其实就是 while 的非。

Shell 常用变量

  1. $n:命令的参数,比如$1、$2等等。其中$0表示参数名,其实就是main()的argv[0]

  2. $# :命令参数的数量

  3. $?:上一个命令的返回值

  4. $$:当前shell程序的pid

  5. $1:上一个程序的pid

  6. $@:完整的参数列表

数值比较

  1. -eq:等于

  2. -ne:不等于

  3. -gt:大于

  4. -ge:大于等于

  5. -lt:小于

  6. -le:小于等于

  7. , , >, >=:这四个顾名思义。不过使用的时候要注意双括号,比如(("$a" 。我建议还是用上面那些算了。

字符串比较

  1. =:等于

  2. !=:不等于

  3. -z:字符串长度为零

  4. -n:字符串不为空

文件判断

注:以下条件返回真的必要条件是目标要存在

  1. -b:block,块设备

  2. -c:char,字符设备

  3. -d:directory,目录

  4. -e:exist,存在,目录或问ijan

  5. -f:file,是否一个普通文件

  6. -g:目标是否设置了SGID位

  7. -h:目标是否符号文件。老的系统可能不支持这一项

  8. -k:目标是否设置了粘滞位

  9. -p:pipe,是否管道

  10. -r:readable,是否可读

  11. -s:大小不为零

  12. -u:目标是否设置了SUID

  13. -w:writable,是否可写

  14. -o:owned,是否为当前用户所拥有

  15. -x:executable:是否可执行

如果要表示上述条件的“”,则加上“!”即可,如:

if [ ! -d ${SOME_DIR} ]; then    ...fi

关键字:linux, shell


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部