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