整數比較使用-lt,-gt,ge等比較運算子,詳情參考:整數比較
檔案測試使用 -d, -f, -x等運算發,詳情參考:檔案測試
邏輯判斷使用 &&(且)、||(或)、!(取反)
字串比較實用
字串的比較使用以下三個比較運算子:= 或者(==)、!= 、> 、 < 、 -z表示後面的值是否為空,為空則返回true,否則返回false。
-n表示判斷後面的值是否為空,不為空則返回true,為空則返回false。
下面的乙個例子:
#!/bin/bash#檔名:test.sh
read -p 'please input name:' name
read -p 'please input password:' pwd
if [ -z $name ] || [ -z $pwd ]
then
echo "hacker"
else
if [ $name == 'root' ] && [ $pwd == 'admin' ]
then
echo "welcome"
else
echo "hacker"
fifi
執行測試:
ubuntu@ubuntu:~$ ./test.shplease input name:root
please input password:admin
welcome
ubuntu@ubuntu:~$ ./test.sh
please input name:root
please input password:
hacker
ubuntu@ubuntu:~$ ./test.sh
please input name:root
please input password:beyond
hacker
ubuntu@ubuntu:~$
注意:
比較運算子的兩邊都有空格分隔,同時要注意比較運算子兩邊的變數是否可能為空,比如下面這個例子:
#!/bin/bash#檔名:test.sh
if [ $1 == 'hello' ];then
echo "yes"
elif [ $1 == 'no' ];then
echo "no"
fi
執行:
ubuntu@ubuntu:~$ ./test.sh./test.sh: line 4: [: ==: unary operator expected
./test.sh: line 7: [: ==: unary operator expected
ubuntu@ubuntu:~$ ./test.sh hello
yesubuntu@ubuntu:~$ ./test.sh no
noubuntu@ubuntu:~$ ./test.sh test
ubuntu@ubuntu:~$
可以看到,在**中想要判斷shell命令的第二個引數是否為hello或者no,但是在測試的時候,如果沒有第二個引數,那麼就變成了 if [ == 'hello' ],這個命令肯定是錯誤的了,所以會報錯,比較好的做法是在判斷之前加乙個判斷變數是否為空 或者使用雙引號將其括起來,注意,必須使用雙引號,因為變數在雙引號中才會被解析。
#!/bin/bash#檔名:test.sh
if [ "$1" == 'yes' ]; then
echo "yes"
elif [ "$1" == 'no' ]; then
echo "no"
else
echo "nothing"
fi
執行:
ubuntu@ubuntu:~$ ./test.shnothing
ubuntu@ubuntu:~$ ./test.sh yes
yesubuntu@ubuntu:~$ ./test.sh no
noubuntu@ubuntu:~$ ./test.sh demo
nothing
這樣的話,就不會報錯了。
linux shell指令碼(邏輯判斷和字串比較)
常用比較和判斷 整數比較 lt 小於 le 小於等於 gt 大於 ge 大於等於 eq 等於 ne 不等於 例 if le 10 then echo 小於等於10 fi注意 if 裡兩邊要有空格檔案測試 f 存在且是普通檔案 d 存在且是目錄 s 存在且位元組數大於0 r 存在且可讀 w 存在且可寫...
Shell指令碼計算字串長度和判斷字串為空小技巧
一些需要注意的指令碼問題 計算字串長度可用的三種方法 複製 如下 echo str awk expr length str echo pwrylhkxph st c 但是第三種得出的值會多1,可能是把結束符也計算在內了 判斷字串為空的方法有三種 複製 如下 if str if x程式設計客棧 str...
shell指令碼檔案型別與字串判斷
運算子 描述 示例 檔案比較運算子 e filename 如果 filename存在,則為真 e var log syslog d filename 如果 filename為目錄,則為真 d tmp mydir f filename 如果 filename為常規檔案,則為真 f usr bin gr...