文章目錄
-
- 一、shell函數
-
- 1.1、函數的定義
- 1.2、調用函數的方法
- 1.3、shell函數應用
- 二、數組
-
- 2.1、數組定義方法
- 2.2、數組操作
- 2.3、數組執行個體
一、shell函數
1.1、函數的定義
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL4YjN0EDN0YTM1AjMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
- 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"