shell腳本中的函數、shell腳本中的數組

shell中的函數

  • 函數就是把一段代碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段代碼時直接調用這個小單元的名字便可。
  • 函數的格式以下:
    [ function ] funname [()]
    
    	{
    
    	    action;
    
    		[return int;]
    
    	}
    • 能夠帶function fun() 定義,也能夠直接fun() 定義,不帶任何參數。
    • 參數返回,能夠顯示加:return 返回,若是不加,將以最後一條命令運行結果,做爲返回值。 return後跟數值n(0-255)
  • 案例:
    • 函數要放在腳本中的前面
    #!/bin/bash
    	input() {
    	    echo $1 $2 $# $0
    	}
    
    	input 1 a b
    • 在這個實例中
      • $1表示第一個參數
      • $2表示第二個參數
      • $#表示參數的數量
      • $0表示腳本的名字
    • 輸出結果爲:
    [root@test01 jiaoben]# sh fun1.sh 
    	1 a 3 fun1.sh
  • 案例二:
#!/bin/bash

fun(){
    echo "這個函數會對輸入的兩個數字進行相加運算..."
    echo "輸入第一個數字: "
    read aNum
    echo "輸入第二個數字: "
    read anotherNum
    echo "兩個數字分別爲 $aNum 和 $anotherNum !"
    c=$(($aNum+$anotherNum))
}
fun
echo "輸入的兩個數字之和爲 $c !"
  • 輸出結果爲:
[root@test01 jiaoben]# sh -x fun3.sh 
+ fun
+ echo 這個函數會對輸入的兩個數字進行相加運算...
這個函數會對輸入的兩個數字進行相加運算...
+ echo '輸入第一個數字: '
輸入第一個數字: 
+ read aNum
999
+ echo '輸入第二個數字: '
輸入第二個數字: 
+ read anotherNum
999
+ echo '兩個數字分別爲 999 和 999 !'
兩個數字分別爲 999 和 999 !
+ c=1998
+ echo '輸入的兩個數字之和爲 1998 !'
輸入的兩個數字之和爲 1998 !

案例三:shell

  • 在shell中,調用函數時能夠向其傳遞參數。在函數體內部,經過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數... 帶參數的函數示例:
#!/bin/bash

fun(){
    echo "第一個參數爲 $1 !"
    echo "第二個參數爲 $2 !"
    echo "第十個參數爲 $10 !"           ##這裏是咱們正常使用數字表示第十個參數。
    echo "第十個參數爲 ${10} !"
    echo "第十一個參數爲 ${11} !"
    echo "參數總數有 $# 個!"
    echo "做爲一個字符串輸出全部參數 $* !"
}
fun 1 2 3 4 5 6 7 8 9 34 73
  • 輸出結果爲:
[root@test01 jiaoben]# sh fun4.sh 
第一個參數爲 1 !
第二個參數爲 2 !
第十個參數爲 10 !     ## 發現這種寫法是不可以得到第十個參數的值的。
第十個參數爲 34 !
第十一個參數爲 73 !
參數總數有 11 個!
做爲一個字符串輸出全部參數 1 2 3 4 5 6 7 8 9 34 73 !

注意,$10 不能獲取第十個參數,獲取第十個參數須要${10}。當n>=10時,須要使用${n}來獲取參數。 | 參數 | 說明 | | ------------ | ------------ | | $# | 傳遞到腳本的參數個數 | | $* | 以一個單字符串顯示全部向腳本傳遞的參數 | | $$ | 腳本運行的當前進程ID號 | | $! | 後臺運行的最後一個進程的ID號 | | $@ | 與$*相同,可是使用時加引號,並在引號中返回每一個參數。 | | $- | 顯示Shell使用的當前選項,與set命令功能相同。 | |$? | 顯示最後命令的退出狀態。0表示沒有錯誤,其餘任何值代表有錯誤。|數組

shell中的數組

定義數組 a=(1 2 3 4 5); echo ${a[@]}
echo ${#a[@]} 獲取數組的元素個數 
echo ${a[2]} 讀取第三個元素,數組從0開始
echo ${a[*]} 等同於 ${a[@]}  顯示整個數組
數組賦值
a[1]=100; echo ${a[@]}
a[5]=2; echo ${a[@]} 若是下標不存在則會自動添加一個元素
數組的刪除
unset a; unset a[1]
數組分片
a=(`seq 1 5`)
echo ${a[@]:0:3} 從第一個元素開始,截取3個
echo ${a[@]:1:4} 從第二個元素開始,截取4個
echo ${a[@]:0-3:2} 從倒數第3個元素開始,截取2個
數組替換
echo ${a[@]/3/100}
a=(${a[@]/3/100})
相關文章
相關標籤/搜索