零散的shell使用小結

來源:互聯網
上載者:User

入職這段時間大量使用shell,有一些零散的點,記在這裡備忘。

一 shell種的if

shell中的if與c中的if用法有很大區別,一般是結合[ ]使用(目前我只這麼用過:>),例如if [ $a -eq 0 ]; then do ... done。中括弧實際上起真正的判斷作用,需要特別注意的是,[和]兩邊都需要有空格。

[]中,與數字比較時,有以下幾種關係操作符:

-eq 相等

-ne 不相等

-gt 大於

-ge 大於等於

-lt 小於

-le 小於等於

與字串比較時,有以下操作符:

= 等於

!= 不等於

注意:關係操作符兩邊都要加空格。

二 shell中的迴圈

for迴圈有以下幾種使用方法:

1

for file in $(ls); do

echo $file

done

$(ls)是把ls當做命令執行,輸出結果當做數組的值,數組的每個元素是按空白符分開的。

2 類似c語言的用法

for ((i=0; i<10; i++)); do

echo $i

done

(())中的變數可以不加$,在這裡與c語言一樣。

3

for i in 0 1 2 3; do

echo $i

done

4

for i in {1..3}; do

echo $i

done

while迴圈的用法: 

while 條件運算式; do

迴圈體

done

條件運算式可以有許多形式,如for迴圈種(())的類似c語言的方法,還可以是if中類似的條件陳述式。

三 awk

在日誌分析時,awk和sed是最常用的命令,這裡簡單介紹一下。

1 基本方法:awk -F”分隔字元” ‘BEGIN{}condition_1{}condition_2{}END{}’ input_file_1 input_file_2

2 BEGIN{}和END{}是可選的,其實BEGIN和END也相當於特殊的condition。BEGIN{}是awk啟動時先執行的操作,其中的語句會在輸入檔案被處理之前執行,裡面一般是一些初始化操作。END{}是所有輸入檔案處理完之後執行的部分,在統計類的應用中常用。

3 condition是在處理輸入的每行之前檢查的條件,如果符合條件,才執行後面花括弧中的語句。condition可以是==、>、<之類的條件陳述式,也可以使用Regex,如var~/abc/表示變數var匹配//中的Regex。

4 awk中有一些內建的變數,如$n表示正在處理的一行中的第n個欄位(欄位是以-F後面的分隔字元分的),欄位從1開始算起。$0表示整行。ARGIND表示第幾個輸入檔案(mac系統下貌似有問題),NF表示當前行的欄位個數,NR表示當前處理的行數。

5 condition之間(包括BEGIN和END)沒有先後順序,可以把END{}寫在BEGIN{}前面。

6 最後面是輸入檔案,可以有多個,awk會按檔案名稱的順序處理輸入檔案。

四 函數

最後說一下shell的函數,函數的聲明方式為:

function foo()

{

x=$1

...

}

調用方法:foo argv

函數可以接受參數,在函數中通過$1,$2來使用參數

注意:shell中,函數中的變數是全域變數!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.