shell腳本[] [[]] -n -z 的含義解析

原文鏈接:https://blog.csdn.net/keep_lcm/article/details/80551435

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

應用場景分析:

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的參數
直接報錯:

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、當判斷某個變量的值是否滿足正則表達式的時候,必須使用[[  ]]  雙對中括號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章