shell程式設計之括號總結
1.${var} |
現在來一一詳細介紹:
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進行執行 |
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. 數線 |和圓括號() 例如
【Shell】Shell程式設計之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 #