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

一 shell 中的函數

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

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

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

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

sh執行結果爲: 4 4 5 6.sh
$1 $2 標示傳遞給shell腳本的第一個,第二個參數
$# 標示傳遞給腳本的參數個數
$0 是腳本自己的名字,若是用./執行的話,$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 ens33 -A1 |awk '/inet/ {print $2}'
各段含義:
ifconfig 不用說了,能夠查看網卡相關信息
grep enss3 -A1 過濾出含有網卡名稱ens33 的行,並順帶打印其下一行。也就是咱們須要的ip地址行
grep 'inet' 找出還有ip地址的行,這裏能夠使用tail -1代替
awk '{print $2}' 打印ip地址行的第二段,也就是ip地址了,awk不指定分隔符,默認以空格或者tab分割。也就是以空字符分割。
最終結果bash

#!/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地址,沒有給出提示ide

#!/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 ( 更改數組)函數

相關文章
相關標籤/搜索