一、函数 functions
1.什么是函数
函数就是一组命令的合集,通常用来编写特定的代码模块,供后续重复使用。
简单来说就是将重复的语句命令封装为函数,再进行调用,减少冗余
2.语法
1.第一种方式
caidan() { #封装
command..
}
caidan #调用、打印
2.第二种方式
function info() {
command..
}
info
3.函数的传参
函数的传参 和 位置参数 不是一个概念,没有关系。
(1) 例如,执行脚本输出的结果为3
#!/bin/bash
one() {
echo $(( $1 + $2 ))
}
one 1 2
(2) 位置参数与函数的传参结合使用
#!/bin/bash
two() {
echo $(( $1 + $2 )) #传递给函数中的变量
}
two $1 $2 #接收脚本位置参数,中转站
#sh fun.sh 3 4 执行脚本结果为7
4.函数的返回值
(1) echo 返回数据
#!/bin/bash
get_user() {
users=$(cat /etc/passwd |awk -F ":" '{print $1}')
echo $users #输出该变量的结果
}
index=1
for i in $(get_user) #函数相当于命令,所以在调用时可直接执行,或者 $() 执行
do
echo "This is Number $index: $i"
index=$[ $index + 1 ] #自加
done
(2) return 返回状态吗
[root@m01 day-05-fun-array]# cat fun-status.sh
#!/bin/bash
cal() {
if [ $1 -eq $2 ];then
return 0
else
if [ $1 -gt $2 ];then
return 100
else
return 200
fi
fi
}
cal $1 $2
rc=$?
if [ $rc -eq 100 ];then
echo "大于"
elif [ $rc -eq 200 ];then
echo "小于"
elif [ $rc -eq 0 ];then
echo "等于"
fi
(3) 跳板机脚本
[root@m01 day-05-fun-array]# cat fun-tele.sh
#!/bin/bash
meminfo() {
cat <<EOF
---------------------------------
| 1) db-172.16.1.51 |
| 2) nfs-172.16.1.31 |
| 3) web-172.16.1.8 |
| h) help |
---------------------------------
EOF
}
meminfo
#让ctrl+c、ctrl+z失效
trap "" HUP INT QUIT TSTP
while true
do
read -p "请根据编号输入您想要登录的主机:" num
case $num in
1)
ssh root@172.16.1.51
;;
2)
ssh root@172.16.1.31
;;
3)
ssh root@172.16.1.8
;;
h)
meminfo
;;
q)
exit
;;
*)
continue
esac
done
(4) 多级菜单
与跳板机类似,只不过跳板机是一个菜单,简单来说就是不断地进行嵌套
二、数组 array(了解)
为awk数组的学习做铺垫
1.什么是数组
数组主要是用来存值的,他可以存多个值
2.数组的分类
- 普通数组:定义多个值时,取值只能用 整数 0 1 2 3 ...
books=(linux nginx shell)
books[0]=linux
books[1]=nginx
books[2]=shell
- 关联数组:可以自定义索引,取值时,只需通过索引名来取值
#首先申明这是一个关联数组
declare -A info
#1.方式一 数组名[索引名]=变量值
info[index1]=pear
info[index2]=apple
info[index3]=orange
#2.方式二 数组名=([索引名]=变量值)
info=([index1]=pear [index2]=apple [index3]=orange)
3.数组的遍历与循环
[root@m01 day-05-fun-array]# cat array.sh
#!/bin/bash
declare -A shells
while read line
do
types=$(echo $line |awk -F ":" '{print $NF}')
#要统计谁就将谁作为索引,然后让其自增
let shells[$types]++ #用 let 运算
done</etc/passwd
for item in ${!shells[@]}
do
echo "索引是:$item ,他出现的次数是:${shells[$item]}"
done
注意:
- 要统计谁就将谁作为索引,然后让其自增
- shells[@] 是输出所有的变量值
- !shells[@] 是输出所有的索引名
网友评论