shell之函数和数组练习案例

目录

  • 函数和数组练习案例
    • 1、编写函数,实现打印绿色OK和红色FAILED判断是否有参数,存在为Ok,不存在为FAILED
    • 2、编写函数,实现判断是否无位置参数,如无参数,提示错误
    • 3、编写函数实现两个数字做为参数,返回最大值
    • 4、编写函数,实现两个整数位参数,计算加减乘除。
    • 5、将/etc/shadow文件的每一行作为元数赋值给数组
    • 6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量
    • 7、使用关联数组按扩展名统计指定目录中文件的数量

函数和数组练习案例

1、编写函数,实现打印绿色OK和红色FAILED判断是否有参数,存在为Ok,不存在为FAILED

#!/bin/bash
#########################
#File name:1.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 15:18:02
#Description:
#########################
print(){
        if [ -z "$1" ];then
                 echo -e "\033[31m failed \033[0m"
        else

                 echo -e "\033[32m ok \033[0m"
        fi
}

有参数运行结果

print 1

在这里插入图片描述
无参数运行结果

print

在这里插入图片描述

2、编写函数,实现判断是否无位置参数,如无参数,提示错误

#!/bin/bash
#########################
#File name:2.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 21:43:28
#Description:
#########################
set(){
        if [ "$#" -eq 0 ]
        then
                echo "error"
        else
                echo "the function has "$#" parameters"
        fi
}

无参数运行结果

set

在这里插入图片描述
有参数运行结果

set 123 shuju2
在这里插入图片描述

3、编写函数实现两个数字做为参数,返回最大值

#!/bin/bash
#########################
#File name:3.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 21:58:41
#Description:
#########################
max(){
        if [ $1 -ge $2 ];then
                return $1
        else
                return $2
        fi
}

read -p "please input two number:" num1 num2
max $num1 $num2
echo "the max number is $?"

4、编写函数,实现两个整数位参数,计算加减乘除。

#!/bin/bash
#########################
#File name:4.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 22:07:27
#Description:
#########################
calculation(){
        echo "a+b=$(($1+$2))"
        if [ $1 -ge $2 ]
        then
                echo "a-b=$(($1-$2))"
        else
                echo "b-a=$(($2-$1))"
        fi
        echo "a*b=$(($1*$2))"
        echo "a/b=$(($1/$2))"
}

read -p "please input two number:" num1 num2
calculation $num1 $num2

运行结果

[root@localhost teacher3]# bash 4.sh
please input two number:6 6
a+b=12
a-b=0
a*b=36
a/b=1

5、将/etc/shadow文件的每一行作为元数赋值给数组

#!/bin/bash
#########################
#File name:5.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 23:17:40
#Description:
#########################
i=0
for j in `cat /etc/shadow`
do
        arry[$i]=$j
        let i++
done

echo ${arry[4]}
命令行模式下
[root@localhost teacher3]# arry=(`cat /etc/shadow`)
[root@localhost teacher3]# echo ${arry[*]}

运行结果

[root@localhost teacher3]# bash 5.sh
lp::17110:0:99999:7:::
[root@localhost teacher3]# head -5 /etc/shadow | tail -1
lp:
:17110:0:99999:7::: (查看源文件第五行内容)

shell之函数和数组练习案例_第1张图片

6、使用关联数组统计文件/etc/passwd中用户使用的不同类型shell的数量

#!/bin/bash
#########################
#File name:6.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 22:29:16
#Description:
#########################
declare -A typenum
#var1=`cat /etc/passwd | cut -d ':' -f 7`
for i in `cut -d ':' -f 7  /etc/passwd`
do
        #echo $i
        let typenum[$i]+=1
done

for type in ${!typenum[*]}
do
        echo "$type:${typenum[$type]}"
done

运行结果

[root@localhost teacher3]# bash 6.sh
/sbin/nologin:18
/bin/sync:1
/bin/bash:24
/sbin/shutdown:1
/sbin/halt:1

7、使用关联数组按扩展名统计指定目录中文件的数量

#!/bin/bash
#########################
#File name:7.sh
#Version:v1.0
#Email:[email protected]
#Created time:2023-01-03 23:05:54
#Description:
#########################
declare -A typenum
for i in `ls ./xixi`
do
        #echo $i
        let typenum[${i#*.}]+=1
done
#echo ${typenum[*]}
for j in ${!typenum[*]}
do
        echo "$j:${typenum[$j]}"
done

运行结果

[root@localhost teacher3]# bash 7.sh 
jpg:10
mp3:10
mov:5
tar.gz:10
tar.bz2:10
png:10

你可能感兴趣的:(linux,bash,运维)