Linux學習總結(六十)shell指令碼4-函數及數組

來源:互聯網
上載者:User

標籤:shell   指令碼   函數   數組   

一 shell 中的函數

1 先瞭解指令碼的幾個系統變數

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

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

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

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

#!/bin/bashsum(){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分割。也就是以Null 字元分割。
最終結果

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

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

#!/bin/baship(){ifconfig |grep "$1: " -A1 |grep ‘inet‘|awk ‘{print $2}‘}read -p "please input a name of network card: " nameip $namen=`ifconfig |grep "$name"`if [ -z "$n" ];then    echo "the eth is not exist"fim=`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-函數及數組

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.