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


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

單對中括號,直接報錯:

---------------------

來源:CSDN
原文:https://blog.csdn.net/keep_lcm/article/details/80551435

 

文件表達式
-e filename 如果 filename存在,則為真
-d filename 如果 filename為目錄,則為真 
-f filename 如果 filename為常規文件,則為真
-L filename 如果 filename為符號鏈接,則為真
-r filename 如果 filename可讀,則為真 
-w filename 如果 filename可寫,則為真 
-x filename 如果 filename可執行,則為真
-s filename 如果文件長度不為0,則為真
-h filename 如果文件是軟鏈接,則為真
filename1 -nt filename2 如果 filename1比 filename2新,則為真。
filename1 -ot filename2 如果 filename1比 filename2舊,則為真。


整數變量表達式
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於


字符串變量表達式
If  [ $a = $b ]                 如果string1等於string2,則為真
                                字符串允許使用賦值號做等號
if  [ $string1 !=  $string2 ]   如果string1不等於string2,則為真       
if  [ -n $string  ]             如果string 非空(非0),返回0(true)  
if  [ -z $string  ]             如果string 為空,則為真
if  [ $sting ]                  如果string 非空,返回0 (和-n類似) 


    邏輯非 !                   條件表達式的相反
if [ ! 表達式 ]
if [ ! -d $num ]               如果不存在目錄$num


    邏輯與 –a                   條件表達式的並列
if [ 表達式1  –a  表達式2 ]


    邏輯或 -o                   條件表達式的或
if [ 表達式1  –o 表達式2 ]

 

實例:

#!/bin/bash
#if [ -d x.txt ]

if [ -d ]
then
cd toolchain; \
ls *.patch | sort \
#FILES=$$(ls *.patch | sort); \
echo "ok"
else
echo "nok"
fi

每日一言:善學者盡其理,善行者究其難  ---荀子

參考文檔: https://blog.csdn.net/superbfly/article/details/49274889 

  

作者: 虛生


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM