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 语句语法结构。这里的条件是数值比较。保险情况下,注意各种空格:
中括号与变量之间要空格
两个参数和操作符 “-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" 。我建议还是用上面那些算了。
字符串比较
=:等于
!=:不等于
-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
关键字:linux, shell
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!