shell指令碼 邏輯判斷與字串比較

2022-03-19 00:49:07 字數 2135 閱讀 1076

整數比較使用-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.sh

please 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.sh

nothing

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...