Linux shell 的条件 / 比较语法

Shell 其实并不常写,每次写的时候就总得查一下比较语句的语法该怎么写。本文章就做为笔记记录这些资料吧。
本文地址:http://www.javashuo.com/article/p-gkwogssc-ed.htmlhtml

Reference

Shell数值、字符串比较
shell判断和比较
《 Linux程序设计(第4版)》shell

if-else 语法

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 语法

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

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

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

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

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

Shell 经常使用变量

  • $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
相关文章
相关标签/搜索