函数与数组

2020-06-09  本文已影响0人  Linux运维

一、函数 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.数组的分类

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

注意:

  1. 要统计谁就将谁作为索引,然后让其自增
  2. shells[@] 是输出所有的变量值
  3. !shells[@] 是输出所有的索引名
上一篇 下一篇

猜你喜欢

热点阅读