1. 程式人生 > >shell中各種括號用法

shell中各種括號用法

一.小括號

  • 表示整體,裡面可以包含邏輯
grep -E "^(s|S)" /etc/init.d/functions #以s或S開頭的行
grep -E "^(root|laowang)\>" /etc/passwd|cut -d : -f7 #檢視使用者名稱是root或laowang的shell
grep -E "(root)+" /etc/passwd #至少包含一個root的行
  • 後項引用
echo  "/etc/sysconfig/-network-scripts/" |sed -r '[email protected]^(.*/)([^/]+/?)@\[email protected]'  取目錄
  • 在shell腳本里表示開子程序
[ $# -ne 0 ] && (echo "error";exit) #這樣不會退出,因為小括號開了子程序,不會退出當前程序
[ $# -ne 0 ] && { echo error;exit; } #這樣可以,注意大括號兩邊有空格
  • 雙層小括號

可以進行算數運算、比較,可以進行邏輯運算,但不支援 -a -o ! 等邏輯運算

if (($num <= 127 & $num > 0)); then
       echo OK
fi

二.中括號

2.1單中括號[]

等價於test,注所以[和]的前後需要加空格

2.2雙中括號[[ ]]

  ①[[是 bash 程式語言的關鍵字。並不是一個命令,[[ ]] 結構比[ ]結構更加通用。在[[和]]之間所有的字元都不會發生檔名擴充套件或者單詞分割,但是會發生引數擴充套件和命令替換。

  ②支援字串的模式匹配,使用=~操作符時甚至支援shell的正則表示式。字串比較時可以把右邊的作為一個模式,而不僅僅是一個字串,比如[[ hello == hell? ]],結果為真。[[ ]] 中匹配字串或萬用字元,不需要引號。

  ③使用[[ ... ]]條件判斷結構,而不是[ ... ],能夠防止指令碼中的許多邏輯錯誤。比如,&&、||、<和> 操作符能夠正常存在於[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不適用雙括號, 則為if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

三.大括號

3.1、常規用法

  ①大括號拓展。(通配(globbing))將對大括號中的檔名做擴充套件。在大括號中,不允許有空白,除非這個空白被引用或轉義。第一種:對大括號中的以逗號分割的檔案列表進行拓展。如 touch {a,b}.txt 結果為a.txt b.txt。第二種:對大括號中以點點(..)分割的順序檔案列表起拓展作用,如:touch {a..d}.txt 結果為a.txt b.txt c.txt d.txt

ls {ex1,ex2}.sh
ex1.sh ex2.sh
ls {ex{1..3},ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh
ls {ex[1-3],ex4}.sh
ex1.sh ex2.sh ex3.sh ex4.sh


3.2字串提取&替換  ②程式碼塊,又被稱為內部組,這個結構事實上建立了一個匿名函式 。與小括號中的命令不同,大括號內的命令不會新開一個子shell執行,即指令碼餘下部分仍可使用括號內變數。括號內的命令間用分號隔開,最後一個也必須有分號。{}的第一個命令和左括號之間必須要有一個空格。

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

第二種模式:${var:num1:num2},num1是位置,num2是長度。表示從$var字串的第$num1個位置開始提取長度為$num2的子串。不能為負數。

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

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

3.3正則表示式

  • 表示前面模式匹配的次數
ifconfig | grep -oE "([0-9]{1,3}\.){3}[0-9]{1,3}" #搜尋IP
  • 四、符號$後的括號

(1)${a} 變數a的值, 在不引起歧義的情況下可以省略大括號。

(2)$(cmd) 命令替換,和`cmd`效果相同,結果為shell命令cmd的輸,過某些Shell版本不支援$()形式的命令替換, 如tcsh。

(3)$((expression)) 和`expression`效果相同, 計算數學表示式exp的數值, 其中exp只要符合C語言的運算規則即可, 甚至三目運算子和邏輯表示式都可以計算。

相關推薦

shell各種括號用法

一.小括號 表示整體,裡面可以包含邏輯 grep -E "^(s|S)" /etc/init.d/functions #以s或S開頭的行 grep -E "^(root|laowang)\>" /etc/passwd|cut -d : -f7 #檢視使用者名稱是roo

[ SHELL編程 ] shell各種括號的使用方法

也會 保留字 val 返回值 之間 數值 dir 常用 過去 轉載自:http://www.jb51.net/article/60326.htm 在這裏我想說的是幾種shell裏的小括號,大括號結構和有括號的變量,命令的用法,如下:1.${var} 2.$(cmd) 3.(

shell各種括號的作用()、(())、[]、[[]]、{}

雙中括號 語言 八進制 引用數組 存在 作用 版本 amp res 一、小括號,圓括號()1、單小括號 () ①命令組。括號中的命令將會新開一個子shell順序執行,所以括號中的變量不能夠被腳本余下的部分使用。括號中多個命令之間用分號隔開,最後一個命令可以沒有分號,各命

shell各種括號()、(())、[]、[[]]、{}的作用

pre 子shell 長度 home 不同 str 標準 去掉 能夠 技巧小結: 字符串比較用雙中括號[[ ]];算數比較用單中括號[ ]——左右留空格 算數運算用雙小括號(( )) ;shell命令及輸出用小括號( )——左右不留空格 快速替換用花括號{ }——左右留空格

shell各種括號()、(())、[]、[[]]、{}的作用和區別

一、小括號,圓括號() 1、單小括號 ()   ①命令組。括號中的命令將會新開一個子shell順序執行,所以括號中的變數不能夠被指令碼餘下的部分使用。括號中多個命令之間用分號隔開,最後一個命令可以沒有分號,各命令和括號之間不必有空格。   ②命令替換。等同於`

shell各種括號用法

本文總結shell中各種括號的用法。參考《Linux命令列與shell指令碼程式設計大全》 一、圓括號() 1、建立程序列表       例如:$ (pwd ; ls ; cd /etc ; pwd ; cd ; pwd ; ls) //最後輸出的值表示子shell的

shell 裡面的if的各種括號用法

if裡面會出現下面四種括號形式 if  [ $a -lt 5 ] 當使用lt這種符號的時候就只需要一箇中括號 if [[ $a < 5 ]] 這裡就需要兩個中括號 if()   當一對小括號的時候一般放的是命令 if(($a<5)) 也可以這樣判斷大小 附加下面

linux bash shellfor的用法and示例

bash shell腳本中for的用法關於linux bash shell中的for語句 在linux中shell是必不可少的一部分,但是在bash shell中有while,for,until等循環命令,今天就介紹一下關於for的一些用法。文中任何錯誤希望大佬們一一指出,不勝感激。bash sh

shell seq的用法 echo -n用法

字符串 one 一個 echo ddd ech 換行 shel ron 用法:seq [選項]... 尾數 或:seq [選項]... 首數 尾數 或:seq [選項]... 首數 增量 尾數 從1循環到100的兩種方法(bash 其它的shell沒試過)for x i

bash shell的特殊用法

知識 padding OS family 路徑 base ont style one 1 ${BASH_SOURCE-$0} 表示當前正在執行的腳本的完整路徑。 2 cd -P 以物理路徑進入 /usr/localhadoop現在鏈到/home/houzhizhen/usr

【轉載】shellEOF的用法

shel mys only 輸入 sele eof mar 用法 passwd Shell中通常將EOF與 << 結合使用,表示後續的輸入作為子命令或子Shell的輸入,直到遇到EOF為止,再返回到主調Shell。可以把EOF替換成其他東西意思是把內容當作標準輸

Linux括號用法

結果 數值 條件 匹配模式 初始化 技術分享 最長 file 算術 一、Linux中的小括號(也叫圓括號)“( )”的用法 1.單小括號() 1)數組賦值或者初始化數組; 2)子Shell賦值:小括號中的內容會開啟一個子shell獨立運行;括號中以分號連接,最後一個命令不需

shellIF的用法介紹

一、語法結構 if [ condition ] then      statements  [elif condition      then statements. 

shelldate的用法

顯示年月日 date +%F 2018-12-15 指定日期往後推三天 a=date -d "20160508 3 days" "+%Y%m%d" echo $a 輸出結果為 20160511 以今天為基礎,向後推一天 (今天20181215) a=date +%Y%m%d --da

shell括號,3個小於號功能

針對不同的變數狀態賦值(沒設定、空值、非空值): file−my.file.txt:若{file-my.file.txt}: 若file−my.file.txt:若file沒有設定,則使用my.file.txt作返回值。(空值及非空值時不作處理) file:−my.file.txt:若{file:-my.fi

shell各種奇怪的符號整理

各種奇怪的符號整理 () 子shell中執行 (()) 數值比較,運算,支援正則 ((i=1;i<=3;i++)) ,((commond1 && commond2)

shell seq的用法總結

用法:seq [選項]... 尾數  或:seq [選項]... 首數 尾數  或:seq [選項]... 首數 增量 尾數 以指定增量從首數開始列印數字到尾數。   -f, --format=格式 使用printf 樣式的浮點格式   -s, --separator=字

shellEOF等用法總結

最近由於工作需要寫了一個處理資料的指令碼,有幾個用法在此記錄一下。下面是程式碼 #!/bin/bash if [[ -z $userDir ]] then     export userDir="/tmp/" fi if [[ -z $spotDir ]] then  

Linux Shell引號的用法

shell可以識別4種不同型別的引字元號: 單引號字元' 雙引號字元" 反斜槓字元\ 反引號字元` 1. 單引號 ( ' ' )[email protected][script]$ grep Susan phonebook Susan Goldberg 403-

linux下shell(())雙括號運算子的使用詳解

在剛開始學習inux shell指令碼程式設計時候,對於它的 四則運算以及邏輯運算。估計很多朋友都感覺比較難以接受。特變邏輯運算子”[]”使用時候,必須保證運算子與算數 之間有空格。 四則運算也只能藉助:let,expr等命令完成。 今天講的雙括號”(())”結構語句,