1. 程式人生 > >Linux學習總結(六十)shell腳本4-函數及數組

Linux學習總結(六十)shell腳本4-函數及數組

shell 腳本 函數 數組

一 shell 中的函數

1 先了解腳本的幾個系統變量

$# 是傳給腳本的參數個數
$0 是腳本本身的名字
$1 是傳遞給該shell腳本的第一個參數
$2 是傳遞給該shell腳本的第二個參數
$@ 是傳給腳本的所有參數的列表
$* 是以一個單字符串顯示所有向腳本傳遞的參數,與位置變量不同,參數可超過9個
$$ 是腳本運行的當前進程ID號
$? 是顯示最後命令的退出狀態,0表示沒有錯誤,其他表示有錯誤

2 函數的定義及用法
函數就是把一段代碼整理到了一個小單元中,並給這個小單元起一個名字,當用到這段代碼時直接調用這個小單元的名字即可。格式: function f_name() { command }函數必須要放在最前面,其中關鍵字function可以省略

示例1

vim 6.sh
#!/bin/bash
input() {
    echo $1 $2 $# $0
}
input 4 4 4 4 4

執行結果為: 4 4 5 6.sh
$1 $2 標示傳遞個shell腳本的第一個,第二個參數
$# 標示傳遞給腳本的參數個數
$0 是腳本本身的名字
示例2

#!/bin/bash
sum()
{
s=$[$1+$2]
echo $s
}
sum 1 2

如果要在腳本外面傳入參數,sum 1 2 可以改為sum $1 $2,然後執行腳本時帶上參數,比如 sh sum.sh 1 2
示例3
需求,寫一個腳本,給出網卡名稱,就能顯示對應的ip地址
腳本調試
ifconfig |grep ens33 -A1 |grep ‘inet‘ |awk ‘{print $2}‘


各段含義:
ifconfig 不用說了,可以查看網卡相關信息
grep enss3 -A1 過濾出含有網卡名稱ens33 的行,並順帶打印其下一行。也就是我們需要的ip地址行
grep ‘inet‘ 找出還有ip地址的行,這裏可以使用tail -1代替
awk ‘{print $2}‘ 打印ip地址行的第二段,也就是ip地址了,awk不指定分隔符,默認以空格或者tab分割。也就是以空字符分割。
最終結果

#!/bin/bash
ip()
{
ifconfig |grep "$1: " -A1 |grep ‘inet‘ |awk ‘{print $2}‘
}
read -p "please input a name of network card: " name
ip $name

備註:grep命令後面的$1表示函數傳遞的第一個參數,一定要用雙引號。
對上面腳本做一個完善,
1 判斷該網卡名是否為系統裏的網卡,不是給出提示
2 判斷該網卡是否分配了ip地址,沒有給出提示

#!/bin/bash
ip()
{
ifconfig |grep "$1: " -A1 |grep ‘inet‘|awk ‘{print $2}‘
}
read -p "please input a name of network card: " name
ip $name
n=`ifconfig |grep "$name"`
if [ -z "$n" ];then
    echo "the eth is not exist"
fi
m=`ifconfig |grep "$name" -A1 |grep ‘inet‘`
if [ -z "$m" ];then
    echo "the eth has no ip assigned"
fi

二 shell中的數組

定義數組 a=(1 2 3 4 5)
echo ${a[@]} // 顯示整個數組,等價於echo ${a[*]}
echo ${#a[@]} 獲取數組的元素個數
echo ${a[2]} 讀取第三個元素,數組元素編號從0開始
數組賦值
a[1]=100; echo ${a[@]}
a[5]=2; echo ${a[@]} 如果下標不存在則會自動添加一個元素
數組的刪除
unset a[1] ;echo ${a[*]} //刪除數組中第1個元素
unset a;echo ${a[*]} //清空數組
數組分片
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中的3替換成100(只顯示到屏幕,並不更改數組)
a=(${a[@]/3/100}) //將數組a中的3替換成100 ( 更改數組)

Linux學習總結(六十)shell腳本4-函數及數組