欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2020年05月09日 10:35:26   作者:李常明  
這篇文章主要介紹了詳解shell腳本[] [[]] -n -z 的含義解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在寫腳本的時(shí)候,總是搞不懂[] [[]]的區(qū)別,這次寫一個(gè)總結(jié),把它掌握牢固

[]和test

兩者是一樣的,在命令行里test expr和[ expr ]的效果相同。

test的三個(gè)基本作用是判斷文件、判斷字符串、判斷整數(shù)。支持使用 ”與或非“ 將表達(dá)式連接起來。

test中可用的比較運(yùn)算符只有==和!=,兩者都是用于字符串比較的,不可用于整數(shù)比較,整數(shù)比較只能使用-eq, -gt這種形式。

無論是字符串比較還是整數(shù)比較都千萬不要使用大于號(hào)小于號(hào)。當(dāng)然,如果你實(shí)在想用也是可以的,對(duì)于字符串比較可以使用尖括號(hào)的轉(zhuǎn)義形式, 如果比較"ab"和"bc":[ ab \< bc ],結(jié)果為真,也就是返回狀態(tài)為0.

[[ ]]
這是內(nèi)置在shell中的一個(gè)命令,它就比剛才說的test強(qiáng)大的多了。支持字符串的模式匹配(使用=~操作符時(shí)甚至支持shell的正則表達(dá) 式)。邏輯組合可以不使用test的-a,-o而使用&& ||。
字符串比較時(shí)可以把右邊的作為一個(gè)模式(這是右邊的字符串不加雙引號(hào)的情況下。如果右邊的字符串加了雙引號(hào),則認(rèn)為是一個(gè)文本字符串。),而不僅僅是一個(gè)字符串,比如[[ hello == hell? ]],結(jié)果為真。

  注意:使用[]和[[]]的時(shí)候不要吝嗇空格,每一項(xiàng)兩邊都要有空格,[[ 1 == 2 ]]的結(jié)果為“假”,但[[ 1==2 ]]的結(jié)果為“真”!

1. 首先,盡管很相似,但是從概念上講,二者是不同層次的東西。
"[[",是關(guān)鍵字,許多shell(如ash bsh)并不支持這種方式。ksh, bash(據(jù)說從2.02起引入對(duì)[[的支持)等支持。
"["是一條命令, 與test等價(jià),大多數(shù)shell都支持。在現(xiàn)代的大多數(shù)sh實(shí)現(xiàn)中,"["與"test"是內(nèi)部(builtin)命令,換句話說執(zhí)行"test"/"["時(shí)不會(huì)調(diào)用/some/path/to/test這樣的外部命令(如果有這樣的命令的話)。

2.[[]]結(jié)構(gòu)比Bash版本的[]更通用。在[[和]]之間的所有的字符都不會(huì)被文件擴(kuò)展或是標(biāo)記分割,但是會(huì)有參數(shù)引用和命令替換。

用[[ ... ]]測(cè)試結(jié)構(gòu)比用[ ... ]更能防止腳本里的許多邏輯錯(cuò)誤。比如說,&&,||,<和>操作符能在一個(gè)[[]]測(cè)試?yán)锿ㄟ^,但在[]結(jié)構(gòu)會(huì)發(fā)生錯(cuò)誤。

3.(( ))結(jié)構(gòu)擴(kuò)展并計(jì)算一個(gè)算術(shù)表達(dá)式的值。如果表達(dá)式值為0,會(huì)返回1或假作為退出狀態(tài)碼。一個(gè)非零值的表達(dá)式返回一個(gè)0或真作為退出狀態(tài)碼。這個(gè)結(jié)構(gòu)和先前test命令及[]結(jié)構(gòu)的討論剛好相反。

4.[ ... ]為shell命令,所以在其中的表達(dá)式應(yīng)是它的命令行參數(shù),所以串比較操作符">" 與"<"必須轉(zhuǎn)義,否則就變成IO改向操作符了(請(qǐng)參看上面2中的例子)。在[[中"<"與">"不需轉(zhuǎn)義;
由于"[["是關(guān)鍵字,不會(huì)做命令行擴(kuò)展,因而相對(duì)的語法就稍嚴(yán)格些。例如
在[ ... ]中可以用引號(hào)括起操作符,因?yàn)樵谧雒钚袛U(kuò)展時(shí)會(huì)去掉這些引號(hào),而在[[ ... ]]則不允許這樣做。

5.[[ ... ]]進(jìn)行算術(shù)擴(kuò)展,而[ ... ]不做

6.[[ ... && ... && ... ]] 和 [ ... -a ... -a ...] 不一樣,[[ ]] 是邏輯短路操作,而 [ ] 不會(huì)進(jìn)行邏輯短路

應(yīng)用場(chǎng)景分析:

1、在中括號(hào)中,判斷變量的值, 加不加雙引號(hào)的問題?

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

  - 變量的值,為空,返回0,為true
  - 變量的值,非空,返回1,為false

-n 判斷變量的值,是否為空   name = 名字
  - 變量的值,為空,返回1,為false
  - 變量的值,非空,返回0,為true
pid="123"
    [ -z "$pid" ]  單對(duì)中括號(hào)變量必須要加雙引號(hào)
   [[ -z $pid ]]   雙對(duì)括號(hào),變量不用加雙引號(hào)

   [ -n "$pid" ]  單對(duì)中括號(hào),變量必須要加雙引號(hào)
   [[ -z  $pid ]]  雙對(duì)中括號(hào),變量不用加雙引號(hào)

2、多個(gè)條件判斷,[] 和 [[]] 的區(qū)別?

2.1:[[ ]] 雙對(duì)中括號(hào),是不能使用 -a 或者 -o的參數(shù)進(jìn)行比較的;

&& 并且 || 或 -a 并且 -o 或者

[[ ]] 條件判斷 && 并且 || 或

[[ 5 -lt 3 || 3 -gt 6 ]] 一個(gè)條件,滿足,就成立 或者的關(guān)系
[[ 5 -lt 3 || 3 -gt 6 ]] 一個(gè)條件滿足,就成立 或者的關(guān)系

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

&& 必須兩個(gè)條件同時(shí)滿足,和上述一樣,這里想說明的問題的是:

[[ 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就不成立了,是因?yàn)椋琜[]] 雙對(duì)中括號(hào),不能使用 -o和 -a的參數(shù)

直接報(bào)錯(cuò):


2.2 [ ] 可以使用 -a -o的參數(shù),但是必須在 [ ] 中括號(hào)內(nèi),判斷條件,例如:

[ 5 -lt 3 -o 3 -gt 2 ] 或者條件成立
[5 -lt 3 ] -o [ 3 -gt 2] 或者條件, 這個(gè)不成立,因?yàn)楸仨氃谥欣ㄌ?hào)內(nèi)判斷

如果想在中括號(hào)外判斷兩個(gè)條件,必須用&& 和 || 比較
[5 -lt 3 ] || [ 3 -gt 2]
[5 -gt 3 ] && [ 3 -gt 2] 成立

相對(duì)的,|| 和 && 不能在中括號(hào)內(nèi)使用,只能在中括號(hào)外使用

3、當(dāng)判斷某個(gè)變量的值是否滿足正則表達(dá)式的時(shí)候,必須使用[[ ]] 雙對(duì)中括號(hào)


單對(duì)中括號(hào),直接報(bào)錯(cuò):


到此這篇關(guān)于詳解shell腳本[] [[]] -n -z 的含義解析的文章就介紹到這了,更多相關(guān)shell [] [[]] -n -z 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Linux 中 CURL常用命令詳解

    Linux 中 CURL常用命令詳解

    這篇文章主要介紹了Linux 中 CURL常用命令詳解,需要的朋友可以參考下
    2015-10-10
  • 在Linux命令行中終止進(jìn)程的操作命令

    在Linux命令行中終止進(jìn)程的操作命令

    如果你想在linux上停止某個(gè)進(jìn)程,你會(huì)怎么操作,本文小編給大家詳細(xì)介紹了如何在?Linux?命令行中終止進(jìn)程,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 讓Linux下的cron以秒為單位執(zhí)行shell腳本的3種方法

    讓Linux下的cron以秒為單位執(zhí)行shell腳本的3種方法

    這篇文章主要介紹了讓Linux下的cron以秒為單位執(zhí)行shell腳本的3種方法,cron默認(rèn)只支持以分為單位執(zhí)行Shell腳本的,需要的朋友可以參考下
    2014-10-10
  • linux中 pmap 命令詳解

    linux中 pmap 命令詳解

    這篇文章主要介紹了linux中 pmap 命令詳解,需要的朋友可以參考下
    2017-09-09
  • Shell腳本實(shí)現(xiàn)關(guān)閉多余的tty終端

    Shell腳本實(shí)現(xiàn)關(guān)閉多余的tty終端

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)關(guān)閉多余的tty終端,本文腳本適用centos6系統(tǒng),請(qǐng)根據(jù)自己的服務(wù)器系統(tǒng)情況選擇使用,需要的朋友可以參考下
    2014-12-12
  • shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測(cè)

    shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測(cè)

    這篇文章主要介紹了shell腳本實(shí)現(xiàn)linux系統(tǒng)文件完整性檢測(cè),本文給出的腳本使用對(duì)比MD5的方法,檢測(cè)linux系統(tǒng)文件是否被替換等問題,需要的朋友可以參考下
    2014-12-12
  • 在shell或者perl中改變字體或背景的顏色

    在shell或者perl中改變字體或背景的顏色

    有時(shí)候在運(yùn)行別人寫的腳本的時(shí)候,在黑乎乎的終端下顯示了不同的顏色,好生的羨慕啊,今天就來分享一下,分別在shell和perl中怎么改變我們輸出的字體的顏色
    2014-04-04
  • Linux查找文件夾下包含某字符的所有文件

    Linux查找文件夾下包含某字符的所有文件

    這篇文章主要介紹了Linux查找文件夾下包含某字符的所有文件,文中給大家提到了linux查找目錄下的所有文件中是否含有某個(gè)字符串的相關(guān)知識(shí),需要的朋友可以參考下
    2019-09-09
  • Shell中整數(shù)計(jì)算的幾種方式

    Shell中整數(shù)計(jì)算的幾種方式

    今天小編就為大家分享一篇關(guān)于Shell中整數(shù)計(jì)算的幾種方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Linux下shell通用腳本啟動(dòng)jar(微服務(wù))

    Linux下shell通用腳本啟動(dòng)jar(微服務(wù))

    這篇文章主要介紹了Linux下shell通用腳本啟動(dòng)jar(微服務(wù))的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10

最新評(píng)論