鳥書shell學習(三)shell指令碼程式設計要點總結

來源:互聯網
上載者:User

標籤:bash   shell   指令碼   

一 注意事項

1.指令碼的開頭一行為 :

#!/bin/bash
聲明這個指令碼需要的shell的名稱
2.程式中出了"#!"之外的其他以#開頭的都是注釋內容
3.為了方面的使用系統命令,可以在程式的開始部分設定主要環境變數例如PATH
4.指令碼程式的運行方法:
  • sh example.sh 或者類似 bash example.sh
  • chmod +x example.sh ; ./example.sh    ################################ 這兩種執行方式都是在建立的子進程中完成的
  • source example.sh 或者 . example.sh 則是在父進程中直接執行命令的
二 簡單指令碼2.1 互動式指令碼,處理簡單的輸入輸出
首先是讀取使用者輸入的read命令,輸出的命令就是echo ,例如: 
read -p ‘please input your first name: ‘ firstname
echo ‘your first name is : $firstname‘ 
shell中變數是沒有申明比較隨意不需要指定類型,在引用的時候, $變數名 或者是 ${變數名}
除了這種方式之外就是通過執行指令碼時的參數的傳遞,在shell中參數名是內建的$0,$1,$2,$4...
這裡$0表示檔案名稱,$1開始表示第一個參數,其他依次類推. 初次之外還有其他特殊的參數名,如下:
  • $# : 表示參數個數
  • [email protected]:代表"$1","$2" ... 之意
  • $*:代表"$1 $2 $3 ..." 之意
    eg:
#!/bin/bashecho 'filename:'$0echo 'args size: '$#echo 'first arg:'$1
2.2 數值運算shell只能夠支援整數的基本運算:+ - * / %
1).declare - i var 可以將變數聲明為整數,然後對變數進行運算,變數運算是這樣的:$((計算式)) eg:
declare -i v1declare -i v2v3=$(($v1 + $v2))#也可以這樣計算:declare -i v3=$v1*$v2 #運算式之間不能有空格
2).var=$((運算內容)) //運算內容中間是允許有空格的 eg:
echo $ (( 19 + 78))
2.3 shell中的判斷式

shell中可以用test命令進行判斷,eg:

test -e ./example.sh #測試檔案是否存在
常見測試類型和參數如下:來自鳥哥的Linux私房菜

除了可以用test命令進行條件判斷之外i,還可以用[] (中括弧的文法進行判斷,判斷測試參數和test一樣).
[]文法要求[]內的所有量之間均有空格,eg:

[b"$name"b==b"xiaoyi"b] #b都表示空格



三 複雜指令碼3.1 條件陳述式if else 的標準格式:
if [ 條件判斷1 ] ; then   command1elif [ 條件判斷2 ] ; then   command2else    command3fi
其中,條件可以用&&或者||進行串連
case...esac的標準格式如下:
case $variableName in "第一個變數內容")    程式段    ;;   #每個類型的結尾類似break"第二個變數內容")    程式段    ;;   *)# 類似default 用* 代替    其他不合格程式段    ;;esac 
3.2 迴圈語句迴圈的幾種格式如下:
  • while do done
    while [ condition ]do    程式段done
  • until do done
    until [ condition ]do   程式段done
  • for...do...done
    for var in cond1 cond2 cond3 ...do   程式段donefor ((初始值;限制值;執行步長))do   程式段done
3.3 函數
function fname(){    程式段}
examples:
#!/bin/bash# if --- else -- exmapledeclare -i v1=10declare -i v2=15if [ $v1 -ge $v2 ] ; thenecho ''$v1' is bigger than '$v2''else echo ''$v1' is smaller than '$v2''fi# case ... esac exampleread -p 'Please input your name : ' namecase $name in"xiaoyi")echo 'hello xiaoyi';;"xiaoyi1")echo 'hello xiaoyi1';;*)echo 'no case matched!';;esac# loop exampledeclare lv=1 while [ $lv -le 10 ]doecho $lvlv=$((${lv}+1))doneuntil [ $lv -le 1 ]doecho $lvlv=$((${lv}-1))donefor c in 'c1' 'c2' 'c3'doecho $cdonefor ((i=0;i<10;i=i+1))doecho $idone function printHello(){echo 'hello'}printHello 









鳥書shell學習(三)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.