天天看點

shell腳本之函數和數組(含案例,适合練習)

文章目錄

    • 一、shell函數
      • 1.1、函數的定義
      • 1.2、調用函數的方法
      • 1.3、shell函數應用
    • 二、數組
      • 2.1、數組定義方法
      • 2.2、數組操作
      • 2.3、數組執行個體

一、shell函數

1.1、函數的定義

shell腳本之函數和數組(含案例,适合練習)
  • return傳回的是狀态碼,需要使用$?調取
  • echo 傳回的是值,使用變量調用
  • 傳參:指位置變量
  • 可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
  • 參數傳回,可以顯示加:return 傳回,如果不加,将以最後一條指令運作結果,作為傳回值。
  • return後跟數值n(0-255)

1.2、調用函數的方法

  • 函數名 [參數1($1)] [參數2($2)]
  • 在Shell中,調用函數時可以向其傳遞參數。在函數體内部,通過 $n 的形式來擷取參數的值,例如,$1表示第一個參數,$2表示第二個參數…

1.3、shell函數應用

  • 求兩個數的平方相加的結果
  • 比如: 5的平方加上6的平方
#!/bin/bash
read -p "請輸入兩個整數:" shu_1 shu_2

function  sqrt (){
  sum=$(expr $(expr $1 \* $1) + $(expr $2 \* $2))
}
sqrt $shu_1 $shu_2
           

二、數組

2.1、數組定義方法

  • 方法一:
基本格式
數組名=(value0 value1 value2...)
           
  • 方法二:
基本格式
數組名=([0]=value [1]=value [2]=value...)
           
  • 方法三:數組元素之間使用空格隔開
基本格式
清單名=“value0 value1 value2”
數組名=($清單名)
           
  • 方法四:
基本格式
數組名[0]=“value”
數組名[1]=“value”
數組名[2]=“value”
...
           

2.2、數組操作

  • 擷取數組長度
基本格式  ${#數組名[@/*]}
例如
[[email protected] opt]# abc=(10 20 30 40 50)
[[email protected] opt]# echo ${#abc[*]}
5
           
  • 讀取某下标指派
基本格式
${數組名[下标]}
例如
[[email protected] opt]# echo ${abc[0]}
10
[[email protected] opt]# echo ${abc[1]}
20
[[email protected] opt]# echo ${abc[1]}
20
[[email protected] opt]# echo ${abc[2]}
30
...
           
  • 擷取數組的内容
基本格式  ${數組名[@]}
        ${數組名[*]}
             以上是把數組的内容一一單列出來
 例:
 [[email protected] opt]# echo ${abc[*]}
10 20 30 40 50 
           
  • 數組切片

    數組切片即讀取數組的一部分

基本格式    ${數組名[@]:跳過的元素:元素個數}

例:從數組的第二個元素後面取,取3個元素
        ${name[*]:2:3}
這裡的 2 指跳過的元素,3 指擷取的元素個數
           

2.3、數組執行個體

  • 案例1:先輸5個數放入數組,然後求出數組的最大值max
#!/bin/bash
for ((i=1;i<=5;i++));do
  read -p "請輸入第$i個數字:" num
  abc[$i-1]=$num
done

max=${abc[0]}
for ((k=1;k<=${#abc[*]}-1;k++));do
  if [ $max -lt ${abc[$k]} ];then
   max=${abc[$k]}
  fi
done
echo "最大值是:$max"   
           
[[email protected] opt]# chmod +x max.sh 
[[email protected] opt]# ./max.sh 
請輸入第1個數字:2
請輸入第2個數字:3
請輸入第3個數字:66
請輸入第4個數字:33
請輸入第5個數字:111
最大值是:111
           
  • 案例2:互動由使用者使用者随意輸一個數組,求出最大值
#!/bin/bash 
read -p "請輸入你的數組長度:" num1
for i in `seq $num1`
do
read -p "請輸入$i個數:" shu
 number[$i-1]=$shu
done
echo ${number[*]}
max=${number[0]}
for((j=1;j<=${#number[*]}-1;j++))
do
    if [ ${number[j]} -gt $max ]
	then
	    max=${number[j]}
	fi
done
echo "最大值為$max"