1. 程式人生 > >shell程式設計之括號總結

shell程式設計之括號總結

 在Shell中的小括號,大括號結構和有括號的變數,命令的用法如下:

1.${var}
2.$(cmd)
3.()和{}
4.${var:-string},${var:+string},${var:=string},${var:?string}
5.$((exp))
6.$(var%pattern),$(var%%pattern),$(var#pattern),$(var##pattern)

     現在來一一詳細介紹:
 1)Shell中變數的原形
   
   這個最常見的變數形式就是$var,列印var用命令
      echo $var
      可是這裡有個問題:當你要顯示變數值加隨意的字元(如$varAA)時,就會出錯。系統會認為整個varAA是一個變數,這時就可以用一個大括號來限定變數名稱的範圍,如${var}AA,這樣就好了。

 2)命令替換$(cmd)
      命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處.以echo $(ls)來說明整個替換過程:shell掃描一遍命令列,發現了$(cmd)結構,便將$(cmd)中的cmd執行一次,得到其標準輸出,再將此輸出放 到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執行echo命令。如下:

1 $ ls
2 a b c
3 $ echo $(ls)
4 a b c
5 $ echo `ls`
6 a b c

     3)一串的命令執行()和{}


      ()和{}都是對一串的命令進行執行,但有所區別:

A,()只是對一串命令重新開一個子shell進行執行
B,{}對一串命令在當前shell執行
C,()和{}都是把一串的命令放在括號裡面,並且命令之間用;號隔開
D,()最後一個命令可以不用分號
E,{}最後一個命令要用分號
F,{}的第一個命令和左括號之間必須要有一個空格
G,()裡的各命令不必和括號有空格
H,()和{}中括號裡面的某個命令的重定向隻影響該命令,但括號外的重定向則影響到括號裡的所有命令

     4)幾種特殊的替換結構:${var:-string},${var:+string},${var:=string},${var:?string}

      A,${var:-string}和${var:=string}:若變數var為空,則用在命令列中用string來替 換${var:-string},否則變數var不為空時,則用變數var的值來替換${var:-string};對於${var:=string}的 替換規則和${var:-string}是一樣的,所不同之處是${var:=string}若var為空時,用string替 換${var:=string}的同時,把string賦給變數var: ${var:=string}很常用的一種用法是,判斷某個變數是否賦值,沒有的話則給它賦上一個預設值。
      B. ${var:+string}的替換規則和上面的相反,即只有當var不是空的時候才替換成string,若var為空時則不替換或者說是替換成變數 var的值,即空值。(因為變數var此時為空,所以這兩種說法是等價的)
      C,${var:?string}替換規則為:若變數var不為空,則用變數var的值來替換${var:?string};若變數var為空,則把string輸出到標準錯誤中,並從指令碼中退出。我們可利用此特性來檢查是否設定了變數的值。
      補充擴充套件:在上面這五種替換結構中string不一定是常值的,可用另外一個變數的值或是一種命令的輸出。

 5)POSIX標準的擴充套件計算:$((exp))
      這種計算是符合C語言的運算子,也就是說只要符合C的運算子都可用在$((exp)),甚至是三目運算子。注意:這種擴充套件計算是整數型的計算,不支援浮點型.若是邏輯判斷,表示式exp為真則為1,假則為0。

     6)四種模式匹配替換結構:${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
     第一種模式:${variable%pattern},這種模式時,shell在variable中查詢,看它是否一給的模式pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最短的匹配模式
     第二種模式: ${variable%%pattern},這種模式時,shell在variable中查詢,看它是否一給的模式pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最長的匹配模式
     第三種模式:${variable#pattern} 這種模式時,shell在variable中查詢,看它是否一給的模式pattern開始,如果是,就從命令列把variable中的內容去掉左邊最短的匹配模式
     第四種模式: ${variable##pattern} 這種模式時,shell在variable中查詢,看它是否一給的模式pattern結尾,如果是,就從命令列把variable中的內容去掉右邊最長的匹配模式
     這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。結構中的pattern支 持萬用字元,*表示零個或多個任意字元,?表示零個或一個任意字元,[...]表示匹配中括號裡面的字元,[!...]表示不匹配中括號裡面的字元

01 [[email protected] shell]# var=testcase
02 [[email protected] shell]# echo $var
03 testcase
04 [[email protected] shell]# echo ${var%s*e} 從最右邊刪除最短匹配
05 testca
06 [[email protected] shell]# echo $var
07 testcase
08 [[email protected] shell]# echo ${var%%s*e} 從最右邊刪除最長匹配
09 te
10 [[email protected] shell]# echo $var  變數沒有改變
11 testcase
12 [[email protected] shell]# echo ${var#?e} 從最左邊刪除最短匹配
13 stcase
14 [[email protected] shell]# echo $var
15 testcase
16 [[email protected] shell]# echo ${var#*e}  從最左邊刪除最短匹配
17 stcase
18 [[email protected] shell]# echo $var
19 testcase
20 [[email protected] shell]# echo ${var##*e} 從最左邊刪除最長匹配,即刪除所有
21 [[email protected] shell]# echo $var
22 testcase
23 [[email protected] shell]# echo ${var##*s} 從最左邊刪除最長匹配
24 e
25 [[email protected] shell]# echo $var
26 testcase
27 [[email protected] shell]# echo ${var#test} 刪除test
28 case
29 [[email protected] shell]# echo $var
30 testcase
31 [[email protected] shell]# echo ${var#tests} 沒有匹配
32 testcase

相關推薦

shell程式設計括號總結

 在Shell中的小括號,大括號結構和有括號的變數,命令的用法如下: 1.${var} 2.$(cmd) 3.()和{} 4.${var:-string},${var:+string},${var:=string},${var:?string} 5.$((exp)) 6

Shell程式設計if簡單判斷兩個數字大小

#指令碼編輯   #!/bin/bash #定義變數 num1=$1 num2=$2   #判斷是否輸入兩個引數,若是,將兩個引數傳遞給下一個指令動作,若非兩個引數,則列印輸出內容輸出並且退出exit指令碼不執行下一個指令 if [ $# -ne

linux中的shell程式設計變數

shell程式設計主要是為了簡化linux系統管理的。 shell中的變數是一種弱型別的變數,c,java等語言是一種強型別的語言。 linux中的所有的變數預設型別都是字元型別的 零、bash變數的分類 bash變數的型別 變數型別

shell程式設計步步為營(2)

我們今天接著學習shell程式設計! 首先接著介紹shell指令碼中的非常重要的一種變數:位置變數 位置變數 : 在指令碼中呼叫通過命令列引數傳遞給指令碼的引數。 $1 , $2 , … : 對應呼叫第1、第2…等引數 $0

shell程式設計處理使用者輸入

目錄 讀取引數 測試引數 抓取引數 ③移動變數 ④處理選項 基本的讀取 超時 前言 >>>目前為止,我們涉及到的知識包括如何編寫指令碼,處理資料、變數和檔案 >>>bash s

shell程式設計迴圈結構

與C語言類似,shell指令碼語言同樣有迴圈語句:1.for語句 2.while語句。下面講解一下這兩個迴圈結構的表達並舉例說明。 1.for語句 ①基本語法: for var in 單次表 do 命令列 done 同樣也有一種和C語言相類似的形式 for ((i = 0;

shell程式設計功能語句

1.以#開頭的語句是註釋。 最常見的是**#!/bin/sh**-------用於告訴os用哪種型別的shell來解釋執行該程式 2.read從標準輸入讀入一行,並賦值給後面的變數,其語法: (希望echo不換行 1.用echo -n 《內容》2.用#!/bin/sh echo “t

linux中的shell程式設計while迴圈和until迴圈

while迴圈語法: while [ 條件判斷式 ] do 程式語句 條件終止語句 done 例項:求1加到100的和 #!/bin/bash #!從1加到100 i=1 s=0 while [ $i -le 100 ] # 如果變數i

shell程式設計DRY&KISS

用BASH程式設計已有些時間了,參與過大型專案的開發。當初的摸石子過河,專案越來越大了,程式碼開始腐朽了。 也許,從新開始是件好事,如同老闆所說,背上太多的包袱,你如何前行! 下面,我從DRY(Dont’t Repeat Yourself)和KISS(Keep it Simple & Sma

shell程式設計基礎知識1

1、shell指令碼的基本格式   #!bin/bash   ->看到這個就是shell指令碼   #filename:test.sh ->指令碼名稱   #auto echo hello world ->此指令碼實現的功能,這裡指的是輸出hello world   #by

linux shell程式設計利用環境變數IFS自定義分隔符

預設情況下,bash shell將空格符、製表符、換行符看作是欄位分隔符,如果遇到這些字元,bash shell就會認為字元後是一個新的欄位,這就帶來一種困擾:如果我們想處理包含空格、製表符、換行符的字元就會有麻煩了。bash提供了一種自定義分隔符的機制:環境變數IFS定義

linux下shell 程式設計擴充套件正則表示式

1. ‘+’ 限定字元 +限定符表示前面字元至少出現一次或者多次。與*不同在於0次或者多次 2. '?' 限定符 ?限定前面的字元最多出現一次。即出現0次或者1次 3. 數線 |和圓括號() 例如

ShellShell程式設計for迴圈命令

bash shell提供了for命令,用於建立通過一系列值重複的迴圈,for命令的格式為: for var in list do commands done 在引數list中提供了一系列用於迭代

Linux Shell程式設計 for迴圈語句 if條件語句

    最近涉及Linux Shell程式設計,還不太熟悉,對於賦值語句,數值計算,迴圈語句,變數使用都不太熟悉。我不打算一個一個的說明知識點,我打算用最多3個例子說明所有的這些知識點。 Example 1 : <span style="font-size:14px;

Linux Shell程式設計--雙括號

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

Shell程式設計 VI編輯器

vi的基本概念vi編輯器是所有Unix及Linux系統下標準的編輯器,它的強大不遜色於任何最新的文字編輯器,這裡只是簡單地介紹一下它的用法和一小部分指令。由於對Unix及Linux系統的任何版本,vi編輯器是完全相同的,因此您可以在其他任何介紹vi的地方進一步瞭解它。Vi也

linux 下shell 程式設計變數及數學運算

1.shell中的變數是不分資料型別的,統一按照字串來儲存 2. bash shell只能支援數學整數運算(zsh可以支援浮點) 3.以下都是在bash shell 下進行的數學運算 方法一使用方括號進行基本的整數運算: #!/bin/bash var1=1 var2=2

shell程式設計變數以及awk命令和rename命令

常用的環境變數可以用env和set檢視,但是最全面的還是man bash來檢視。 在這裡舉例一些常用的環境變數echo $HOSTNAME                  檢視主機名 echo $HOSTTYPE                 檢視主機系統型別 echo

linux基本操作---shell程式設計 while迴圈

java中我們經常用到while迴圈,那麼shell中也有while迴圈: while簡單迴圈 直接看demo: demo1: 求1-10的和 [[email protected]02 software]# cat while1to10.sh

Shell程式設計IF條件語句各種案例演練

3. if條件語句學習 案例一,測試數字的大小 #!/bin/sh NUM=100 if(($NUM > 4)) ; thenecho "this num is $NUM greater 4 !"fi 必須以fi結尾 9.檔名為 if.sh #!/bin/sh #