shell編程基礎知識小結_linux shell

來源:互聯網
上載者:User

1、檔案類型介紹
linux系統中主要包括以下七種檔案類型: d 目錄 - 普通檔案 l 符號連結 s 通訊端檔案 b 塊裝置檔案 c 字元裝置檔案 p 具名管道檔案

2、Regex
Regex在shell編程中非常重要。

從一個檔案或命令輸出中抽取或過濾文本時。可使用Regex(RE),Regex是一些特殊或不很特殊的字串模式的集合。

基本的元字元集:
^ 只匹配行首。
$ 只匹配行尾。
* 一個單字元後緊跟*,匹配0個或多個此單字元。
[] 匹配[]內字元,可以是一個單字元,也可以是字元序列。可以使用-來表示[]內範圍,如[1-5]等價於[1,2,3,4,5]。
屏蔽一個元字元的特殊含義,如$表示字元$,而不表示匹配行尾。
. 匹配任意單字元。
pattern{n}   匹配pattern出現的次數n
pattern{n,}m匹配pattern出現的次數,但表示次數最少為n
pattern{n,m} 匹配pattern出現的次數在n與m之間(n,m為0-255)

常見例子:
顯示可執行檔檔案:ls –l | grep …x...x..x
只顯示檔案夾:ls –l | grep  ^d
匹配所有的空行:^$
匹配所有的單詞:[A-Z a-z]*
匹配任一非字母型字元:[^A-Z a-z]
包含八個字元的行:^……..$(8個.)

更多內容,請查閱Regex的詳細資料加深學習。

3、字元類描述
常用的可用字元類列表:
[:alnum:] 字母數字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或製表鍵
[:cntrl:] 任何控制字元
[:digit:] 數字 [0-9]
[:graph:] 任何可視字元(無空格)
[:lower:] 小寫 [a-z]
[:print:] 非控制字元
[:punct:] 標點字元
[:space:] 空格
[:upper:] 大寫 [A-Z]
[:xdigit:] 十六進位數字 [0-9 a-f A-F]

使用字元類可以更好地適應非英語 locale(包括某些必需的重音字元等)。

4、引號類型
shell中共有四種參考型別:
“ ”雙引號
‘ '單引號
` `  反引號
    反斜線

說明:
“ ”可引用除$、` 、 、外的任一字元或字串,“ ”中的變數能夠正常顯示變數值。
‘ '與“ ”類似,不同在於shell會忽略任何的引用值。
例如: GIRL=‘girl'
       echo “The ‘$GIRL' did well”
       則列印:The ‘girl' did well

說明:
 ` `用於設定系統命令的輸出到變數,shell會將` `中的內容作為一個系統命令並執行質。
    例如:echo `date` 則列印當前的系統時間。

說明:
    用來屏蔽特殊含義的字元:&  *  +  ^  $  `  “  |  ?
    例如:expr 12 * 12 將輸出144

5、變數設定的幾種模式
變數設定時的不同模式:
valiable_name=value   設定實際值到 variable_name中
valiable_name+value   如果設定了variable_name,則重設其值
valiable_name:?value  如果未設定variable_name,則先顯示未定義使用者錯誤資訊
valiable_name?value   如果未設定variable_name,則顯示系統錯誤資訊
valiable_name:=value  如果未設定variable_name,則設定其值
valiable_name-value   同上,但取值並不設定到variable_name

註:以上幾種模式的靈活應用,將在很大程度上提升編程技巧。

6、條件測試
test命令用於測試字串、檔案狀態和數字,expr測試和執行數值輸出。
Test格式:test condition 或 [ condition ](需要特別注意的是condition的兩邊都要有一個空格,否則會報錯),test命令返回0表示成功。
下面將分別描述test的三種測試:
檔案狀態測試(常用的)
-d           測試是否檔案夾
-f            測試是否一般檔案
-L          測試是否連結檔案
-r           測試檔案是否可讀
-w         測試檔案是否可寫
-x           測試檔案是否可執行
-s           測試檔案是否非空

1、字串測試
五種格式: test  “string”
           test  string_operator  “string”
           test  “string”  string_operator  “string”
           [ string_operator  “string” ]
           [ “string”  string_operator  “string” ]
其中string_operator可以為:
    = 兩字串相等
    !=    兩字串不等
    -z   空串
    -n   非空串

2、數值測試
兩種格式: “number”  number_operator  “number”
          [ “number”  number_operator  “number” ]
其中:number_operator 可以為:-eq  、-ne、-gt、-lt、-ge

例如:  NUMBER=130
       [ “990”  –le  “995”  –a  “NUMBER”  -gt  “133” ]
       (其中-a表示前後結果相“與”)

expr命令一般用於整數值,但也可以用於字串。
格式:  expr srgument operator operator argument
例如:  expr 10 + 10
        expr 10 ^ 2 (10的平方)
        expr $value + 10

增量計數--expr在迴圈中最基本的用法
例如:  LOOP=0
        LOOP=`expr $LOOP + 1`

3、模式比對:通過指定的冒號選項計算字串中的字元數
例如:  value=account.doc
        expr $value : `(.*).doc`
        輸出 account

7、命令執行順序

&& 成功執行一個命令後再執行下一個
|| 一個命令執行失敗後再執行另一個命令
( ) 在當前shell中執行一組命令(格式:(命令1;命令2; ……))
{ } 同( )
例如:  comet mouth_end || ( echo “hello” | mail dave ;exit )
 如果沒有( ),則shell將直接執行最後一個命令(exit)

在shell編程中,命令執行順序,有時決定了一個程式的執行結果,而&&與||應用最為廣泛。

8、指令碼調試
指令碼調試
最有用的調試指令碼的工具是echo命令,可以隨時列印有關變數或操作的資訊,以協助定位錯誤。
也可使用列印最後狀態($?) 命令來判斷命令是否成功,這時要注意的是要在執行完要測試的命令後立即

輸出$?,否則$?將會改變。

Set命令也可以用來輔助指令碼測試:
Set –n           讀命令但是不執行
Set –v           顯示讀取的所有的行
Set –x           顯示所有的命令及其參數
要關閉set選項,只要把-換成+就可以了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.