日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux中的括号用法

發(fā)布時(shí)間:2023/12/9 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux中的括号用法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、Linux中的小括號(hào)(也叫圓括號(hào))“( )”的用法

1.單小括號(hào)()

1)數(shù)組賦值或者初始化數(shù)組;

2)子Shell賦值:小括號(hào)中的內(nèi)容會(huì)開啟一個(gè)子shell獨(dú)立運(yùn)行;括號(hào)中以分號(hào)連接,最后一個(gè)命令不需要;各命令和括號(hào)無需空格;

3)實(shí)現(xiàn)多條命令集合:新開多條命令來執(zhí)行,各個(gè)命令之間用分號(hào)隔開,最后一個(gè)命令必須要分號(hào)來隔開;

4)與”$“結(jié)合實(shí)現(xiàn)命令替換:等同于cmd 掃描一遍命令行,發(fā)現(xiàn)了$(cmd)結(jié)構(gòu),便將$(cmd)中的cmd執(zhí)行一次,得到其標(biāo)準(zhǔn)輸出,再將此輸出放到原來命令。此形式要注意使用的Shell類型。

2.雙小括號(hào)(())

1)省略”$“進(jìn)行算術(shù)運(yùn)算,同時(shí)支持在括號(hào)內(nèi)用“,”對(duì)多個(gè)表達(dá)式進(jìn)行分割:

2)$((exp)) 和expr exp效果相同,計(jì)算數(shù)學(xué)表達(dá)式exp的數(shù)值;計(jì)算邏輯運(yùn)算(常用于算術(shù)運(yùn)算比較,雙括號(hào)中的變量可以不使用$,支持多個(gè)表達(dá)式用 ”,“ 來隔開);

3)支持跨進(jìn)制運(yùn)算:

二、Linux中的中括號(hào)(也叫方括號(hào))“[ ]”的用法

1.單中括號(hào) []

1)bash 的內(nèi)部命令,[和test是等同的。if/test結(jié)構(gòu)中的左中括號(hào)是調(diào)用test的命令標(biāo)識(shí),右中括號(hào)是關(guān)閉條件判斷的。這個(gè)命令把它的參數(shù)作為比較表達(dá)式或者作為文件測(cè)試,并且根據(jù)比較的結(jié)果來返回一個(gè)退出狀態(tài)碼。
2)在進(jìn)行比較運(yùn)算時(shí)使用。test和[]中可用的比較運(yùn)算符只有==和!=,兩者都是用于字符串比較的,不可用于整數(shù)比較;整數(shù)比較只能使用-eq,-gt這種形式。無論是字符串比較還是整數(shù)比較都不支持大于號(hào)小于號(hào)。如果實(shí)在想用,對(duì)于字符串比較可以使用轉(zhuǎn)義形式,如果比較”ab”和”bc”:[ ab \< bc ],結(jié)果為真,也就是返回狀態(tài)為0。[ ]中的邏輯與和邏輯或使用-a 和-o 表示。


3)字符范圍。用作正則表達(dá)式的一部分,描述一個(gè)匹配的字符范圍。作為test用途的中括號(hào)內(nèi)不能使用正則。比如:[0-9]、[a-z]等。
4)在一個(gè)array 結(jié)構(gòu)的上下文中,中括號(hào)用來引用數(shù)組中每個(gè)元素的編號(hào)。

2.雙中括號(hào)[[ ]]

1)[[是 bash 程序語言的關(guān)鍵字。并不是一個(gè)命令,[[ ]] 結(jié)構(gòu)比[ ]結(jié)構(gòu)更加通用。在[[和]]之間所有的字符都不會(huì)發(fā)生文件名擴(kuò)展或者單詞分割,但是會(huì)發(fā)生參數(shù)擴(kuò)展和命令替換。
2)支持字符串的模式匹配,使用=~操作符時(shí)甚至支持shell的正則表達(dá)式。字符串比較時(shí)可以把右邊的作為一個(gè)模式,而不僅僅是一個(gè)字符串,比如[[ hello == hell? ]],結(jié)果為真。[[ ]] 中匹配字符串或通配符,不需要引號(hào)。
3)使用[[ … ]]條件判斷結(jié)構(gòu),而不是[ … ],能夠防止腳本中的許多邏輯錯(cuò)誤。比如,&&、||、<和> 操作符能夠正常存在于[[ ]]條件判斷結(jié)構(gòu)中,但是如果出現(xiàn)在[ ]結(jié)構(gòu)中的話,會(huì)報(bào)錯(cuò)。
4) bash把雙中括號(hào)中的表達(dá)式看作一個(gè)單獨(dú)的元素,并返回一個(gè)退出狀態(tài)碼。

三、Linux中的大括號(hào)(也叫花括號(hào))“{ }”的用法

1.表達(dá)變量的值。在不發(fā)生歧義的情況下大括號(hào)可有可無,但建議添加上。

2.用大括號(hào)進(jìn)行拓展:此時(shí)可以使用大括號(hào)對(duì)文件進(jìn)行批量操作

1)第一種:對(duì)大括號(hào)中的以逗號(hào)分割的文件列表進(jìn)行拓展。如:touch {file1,file2,file3}.sh。

2)第二種:對(duì)大括號(hào)中以點(diǎn)點(diǎn)(..)分割的順序文件列表起拓展作用。如:touch {1..10}.sh

3.特殊替換——${var:-string},${var:+string},${var:=string},${var:?string}

1)${var:-string}:當(dāng)變量var值為空時(shí),${var:-string}會(huì)把string作為值,當(dāng)變量var值不為空時(shí),${var:-string}會(huì)把var的值作為變量。

2)${var:+string}:${var:+string}的替換規(guī)則和上面的相反,即當(dāng)變量var的值不為空的時(shí)將值換成string,當(dāng)變量var為空時(shí)則不替換或者說是替換成變量var的值,即空值。

3)${var:=string}:當(dāng)變量var值為空時(shí),${var:=string}會(huì)將其賦值為string,且變量var也被賦值是string了,若變量var不為空時(shí),${var:=string}的值都是變量var的值。此規(guī)則和${var:-string}類似,但不同之處在于若變量為空時(shí),此規(guī)則會(huì)將“=”后面的值賦給變量。(很常用的一種用法是,判斷某個(gè)變量是否賦值,沒有的話則給它賦上一個(gè)默認(rèn)值。)

4)${var:?string}:若變量var不為空,則使用變量var的值來替換${var:?string};若變量var為空,則把string輸出到標(biāo)準(zhǔn)錯(cuò)誤中,并從腳本中退出。可利用此特性來檢查是否設(shè)置了變量的值。

注意:在上面這四種替換結(jié)構(gòu)中string的位置不一定必須是一個(gè)常量的,也可以是一個(gè)變量或是一條指令。

4.模式匹配替換——${var%pattern},${var%%pattern},${var#pattern},${var##pattern}

是去掉左邊(在鍵盤上#在$之左邊);% 是去掉右邊(在鍵盤上%在$之右邊);和%中的單一符號(hào)是最小匹配,兩個(gè)相同符號(hào)是最大匹配。

1)第一種模式:${variable%pattern},這種模式時(shí),shell在variable中查找,看它是否以給的模式pattern結(jié)尾,如果是,就把variable中的內(nèi)容去掉右邊最短的匹配模式。

2)第二種模式:${variable%%pattern},這種模式時(shí),shell在variable中查找,看它是否以給的模式pattern結(jié)尾,如果是,就把variable中的內(nèi)容去掉右邊最長(zhǎng)的匹配模式。

3)第三種模式:${variable#pattern} 這種模式時(shí),shell在variable中查找,看它是否以給的模式pattern開始,如果是,就把variable中的內(nèi)容去掉左邊最短的匹配模式。

4)第四種模式:${variable##pattern} 這種模式時(shí),shell在variable中查找,看它是否以給的模式pattern結(jié)尾,如果是,就把variable中的內(nèi)容去掉右邊最長(zhǎng)的匹配模式。

這四種模式中都不會(huì)改變variable的值,其中,只有在pattern中使用了“”匹配符號(hào)時(shí),%和%%,#和##才有區(qū)別。結(jié)構(gòu)中的pattern支持通配符,“”表示零個(gè)或多個(gè)任意字符,“?”表示僅與一個(gè)任意字符匹配,[…]表示匹配中括號(hào)里面的字符,[!…]表示不匹配中括號(hào)里面的字符。

5.字符串提取和替換——${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}

1)第一種模式:${var:num},shell在var中提取第num個(gè)字符到末尾的所有字符。若num為正數(shù),從左邊0處開始;若num為負(fù)數(shù),從右邊開始提取字串,但必須使用在冒號(hào)后面加空格或一個(gè)數(shù)字或整個(gè)num加上括號(hào),如${var: -2}、${var:1-3}或${var:(-2)}。


2)第二種模式:${var:num1:num2},num1表示位置,num2表示長(zhǎng)度。意思就是從$var字符串的第$num1個(gè)位置開始提取長(zhǎng)度為$num2的子串。num1和num2均不能為負(fù)數(shù)。有負(fù)數(shù)出現(xiàn)時(shí),將會(huì)自動(dòng)忽略第二個(gè)“:”及其后面的內(nèi)容,相當(dāng)于是在執(zhí)行${var:num}。

3)第三種模式:${var/pattern/pattern}表示將var字符串的第一個(gè)匹配的pattern替換為另一個(gè)pattern。

4)第四種模式:${var//pattern/pattern}表示將var字符串中的所有能匹配的pattern替換為另一個(gè)pattern。

6.多命令集合:

{ cmd1;cmd2;cmd3;} 在當(dāng)前shell順序執(zhí)行命令cmd1,cmd2,cmd3, 各命令之間用分號(hào)隔開, 最后一個(gè)命令后必須有分號(hào), 第一條命令和左括號(hào)之間必須用空格隔開。

對(duì){}和()而言, 括號(hào)中的重定向符只影響該條命令, 而括號(hào)外的重定向符影響到括號(hào)中的所有命令。

轉(zhuǎn)載于:https://blog.51cto.com/12630492/2154936

總結(jié)

以上是生活随笔為你收集整理的Linux中的括号用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。