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
相關文章
相關標籤/搜索