天天看點

shell腳本[] [[]] -n -z 的含義解析1、在中括号中,判斷變量的值, 加不加雙引号的問題?

在寫腳本的時候,總是搞不懂[] [[]]的差別,這次寫一個總結,把它掌握牢固

應用場景分析:

1、在中括号中,判斷變量的值, 加不加雙引号的問題?

-z 判斷 變量的值,是否為空; zero = 0

- 變量的值,為空,傳回0,為true - 變量的值,非空,傳回1,為false -n 判斷變量的值,是否為空 name = 名字 - 變量的值,為空,傳回1,為false - 變量的值,非空,傳回0,為true pid="123" [ -z "$pid" ] 單對中括号變量必須要加雙引号 [[ -z $pid ]] 雙對括号,變量不用加雙引号

[ -n "$pid" ] 單對中括号,變量必須要加雙引号 [[ -z $pid ]] 雙對中括号,變量不用加雙引号

2、多個條件判斷,[] 和 [[]] 的差別? 2.1:[[ ]] 雙對中括号,是不能使用 -a 或者 -o的參數進行比較的; && 并且 || 或 -a 并且 -o 或者 [[ ]] 條件判斷 && 并且 || 或

[[ 5 -lt 3 || 3 -gt 6 ]] 一個條件,滿足,就成立 或者的關系 [[ 5 -lt 3 || 3 -gt 6 ]] 一個條件滿足,就成立 或者的關系

[[ 5 -lt 3 ]] || [[3 -gt 6 ]] [[ 5 -lt 3 ]] || [[3 -gt 6 ]] 寫在外面也可以

&& 必須兩個條件同時滿足,和上述一樣,這裡想說明的問題的是:

[[ 5 -lt 3]] -o [[ 3 -gt 6 ]] [[ 5 -lt 3 -o 3 -gt 6 ]] [[ 5 -lt 3 -a 3 -gt 6 ]] [[ 5 -lt 3 -a 3 -gt 6 ]] -a 和 -o就不成立了,是因為,[[]] 雙對中括号,不能使用 -o和 -a的參數 直接報錯:

shell腳本[] [[]] -n -z 的含義解析1、在中括号中,判斷變量的值, 加不加雙引号的問題?

2.2 [ ] 可以使用 -a -o的參數,但是必須在 [ ] 中括号内,判斷條件,例如: [ 5 -lt 3 -o 3 -gt 2 ] 或者條件成立 [5 -lt 3 ] -o [ 3 -gt 2] 或者條件, 這個不成立,因為必須在中括号内判斷

如果想在中括号外判斷兩個條件,必須用&& 和 || 比較 [5 -lt 3 ] || [ 3 -gt 2] [5 -gt 3 ] && [ 3 -gt 2] 成立

相對的,|| 和 && 不能在中括号内使用,隻能在中括号外使用 3、當判斷某個變量的值是否滿足正規表達式的時候,必須使用[[ ]] 雙對中括号

shell腳本[] [[]] -n -z 的含義解析1、在中括号中,判斷變量的值, 加不加雙引号的問題?

單對中括号,直接報錯:

shell腳本[] [[]] -n -z 的含義解析1、在中括号中,判斷變量的值, 加不加雙引号的問題?