shell的函數引用和數組
阿新 • • 發佈:2018-09-20
local 地址 root flag 下標 sid name 就是 while shell中的函數
函數就是吧一段代碼整理到一個小單元中,並給這個小單元其一個名稱,當用到這段代碼時直接調用這個名稱即可
函數中的特殊調用
linux中shell變量
$#,$@,$0,$1,$2的含義解釋: 變量說明: $$ Shell本身的PID(ProcessID) $! Shell最後運行的後臺Process的PID $? 最後運行的命令的結束代碼(返回值) $- 使用Set命令設定的Flag一覽 $* 所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。 $@ 所有參數列表。如"$@"用「"」括起來的情況、以"$1" "$2" … "$n" 的形式輸出所有參數。 $# 添加到Shell的參數個數 $0
Shell本身的文件名
這裏需要註意$1-$n數值的意義
$1~$n
添加到Shell的各參數值。$1是第1參數、$2是第2參數…。
?
特殊$表示的含義,示例:
#!/bin/bash # printf "The complete list is %s\n" "$$" printf "The complete list is %s\n" "$!" printf "The complete list is %s\n" "$?" printf "The complete list is %s\n" "$*" printf "The complete list is %s\n" "$@" printf "The complete list is %s\n" "$#" printf "The complete list is %s\n" "$0" printf "The complete list is %s\n" "$1" printf "The complete list is %s\n" "$2
結果:
[root@localhost ~]$ bash params.sh 123456 QQ The complete list is 24249 The complete list is The complete list is 0 The complete list is 123456 QQ The complete list is 123456 The complete list is QQ The complete list is 2 The complete list is params.sh The complete list is 123456 The complete list is QQ
定義一個使用函數公式計算的數值結果
定義一個加法公式,引用函數將某兩個數字相加得和
[root@localhost src]# vim jia.sh
#!/bin/bash
sum () {
? ? ?s=$[$1+$2]
? ? ?echo $s
}
sum 20 10
[root@localhost src]# sh -x jia.sh
+ sum 20 10
+ s=30
+ echo 30
30
shell函數腳本輸出網卡ip
輸入的網卡名稱並輸出顯示該網卡的ip地址
[root@localhost src]# cat fun1.sh
ip () {
? ifconfig |grep -A1 "$1: " |awk ‘/inet/ {print $2}‘
} ? ?
read -p "Please input the eth name: " eth
ip $eth
[root@localhost src]# sh -x fun1.sh
+ read -p ‘Please input the eth name: ‘ eth
Please input the eth name: ens33
+ ip ens33
+ grep -A1 ‘ens33: ‘
+ awk ‘/inet/ {print $2}‘
+ ifconfig
192.168.1.234
判斷輸入網口名稱並提取ip地址的while循環和if判斷邏輯
[root@localhost src]# cat fun1.sh
#!/bin/bash
?
ip () {
? ifconfig |grep -A1 "$1: " |awk ‘/inet/ {print $2}‘
} ? ?
while :;
do
read -p "Please input the eth name: " eth
?n=`ifconfig |grep $eth`
? ?if [ -z $eth ]
? ? then
? ? ? echo "必須輸入一個網口名稱"
? ? ? ? elif [ -z "$n" ]
? ? ? ? ?then
? ? ? ? ? ? ? echo "s輸入正確的網口名稱"
? ? ? ? ? continue
? ? ? ? ? ? else
? ? ? ? ? break
? ? fi
done
ip_=`ip $eth`
if [ -z $ip_ ]
?then
? ?echo "$eth:這個網卡沒有配置ip"
?else
? ?echo "$ip_"
fi
shell中的數組
數組是一個變量中引用的多個數值,數值不一定是數字也可以是字符
定義數組
數組=(數值或字符)
a=(1 2 3 4 5)
獲取數組所有的數值,@表示數組內所有的值
echo ${a[@]}
獲取數組元素的個數
echo ${#a[@]}
獲取數組的第三個元素,數組內數值是按照從0開始的順序計算的,0對應第一個字符,1對應第二個字符....以此類推
echo ${a[2]}
數組賦值或添加下標元素
a[5]=100
如果該下標不存在元素時則會添加這個指定的數值元素
刪除數組或取消某一個元素
uset a
或取消一個下標是第一位、是第三位的數組元素 ? unset a[1]
數組分片
a=(`seq 1 10`) ?
echo $a{[@]:2:4}
?截取四個字符,從第三個數值開始,0對應數組的數值1的位置,截取四個字符結束,例如結果如下
[root@localhost src]# echo ${a[@]:2:4}
3 4 5 6
截取倒數字符echo ${a[@]:0-2:3}
?
0-2表示從一段數組中的哪個位置開始往後計算,3表示截取幾個數值。如下操作示例
[root@localhost src]# echo ${a[@]:0-2:4}
9 10
[root@localhost src]# echo ${a[@]:0-5:4}
6 7 8 9
數組替換
echo ${a[@]/3/100}
?a=(${a[@]/3/222})
如下,將數組中某個下標數值替換成其他數值
[root@localhost src]# echo ${a[@]/3/100}
1 2 100 4 5 6 7 8 9 10
[root@localhost src]# a=(${a[@]/3/222})
[root@localhost src]# echo ${a[@]}
1 2 222 4 5 6 7 8 9 10
shell的函數引用和數組