shell-四(数组和函数)

一、数组

数组是用数组的名字保存一组值的变量
数组中的术语
数组元素    值
数组下标    跟元素对应的
数组下标    一般从0开始的
1、定义数组 declare -a 数组名=(值)
[root@bogon ~]# name=(loyal Wang lili)
2、查看数组中的某个元素的值
[root@bogon ~]# echo ${name[0]}   //中括号中数字就是下标
loyal
[root@bogon ~]# echo ${name[1]}
Wang
[root@bogon ~]# echo ${name[2]}
lili
3、给数组中的某个元素赋值
[root@bogon ~]# name[1]=wan
[root@bogon ~]# echo ${name[1]}
wan
4、数组的遍历
[root@bogon ~]# echo ${name[*]}
loyal wan lili
[root@bogon ~]# echo ${name[@]}
loyal wan lili
5、显示数组元素的个数
[root@bogon ~]# echo ${#name[*]}
3
[root@bogon ~]# echo ${#name[@]}
3
6、取消数组
[root@bogon ~]# unset name
[root@bogon ~]# echo ${name[*]}
          //显示结果为空

二.函数

1.函数就是完成某个特定功能的一段脚本    
2.函数本身不能独立运行,需要时通过函数名调用它。    
3.使用函数,一定要先定义,再去使用。   
4.脚本中函数的作用,就是把 命令模块化 ,缩减命令的输入次数

在介绍函数之前,先简单用一个例子来说明下,不使用函数时一些代码的冗余。
这是一个查询磁盘空间、内存、交换分区的脚本

[root@bogon ~]# cat test1.sh
#!/bin/bash
cat <<EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
read -p "Please input your choice [d/m/s/q]: " choice
until [ $choice = "q" -o $choice = "Q" ]
do
    case $choice in
        d|D) df -h ;;
        m|M) free -m | grep ^Mem ;;
        s|S) free -m | grep -i swap ;;
        *) read -p "Please input your choice: " choice ;;
     esac
     read -p "Please input your choice: " choice
done
[root@bogon ~]# sh test1.sh
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
Please input your choice [d/m/s/q]:    //可根据查询内容进行选择填入

在脚本中,例如查询后在不退出脚本情况下,需要每次都要输出选项,以供查阅,这时候脚本中会出现较多冗余。如下:

[root@bogon ~]# cat test2.sh
#!/bin/bash
cat <<EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
read -p "Please input your choice [d/m/s/q]: " choice
until [ $choice = "q" -o $choice = "Q" ]
do
case $choice in
d|D) df -h ;;
m|M) free -m | grep ^Mem ;;
s|S) free -m | grep -i swap ;;
*)
cat <<EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
read -p "Please input your choice: " choice ;;
esac
cat <<EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
read -p "Please input your choice: " choice
done

可以明显的看出,脚本显得过于繁琐,使用函数可以轻易解决这个问题。

1、函数的定义
两种方法:
    第一种方法
         function FUNCTION_NAME {
                函数体             
         }
    第二种方法:
        FUNCTION_NAME() {
            函数体            
        }
2、将打印菜单的部分改写成函数
[root@bogon ~]# cat test3.sh
#!/bin/bash
showmenu() {      //定义函数
cat <<EOF
d|D) show disk usages
m|M) show memory usages
s|S) show swap usages
q|Q) quit
EOF
}
showmenu     //使用函数名去调用函数
read -p "Please input your choice [d/m/s/q]: " choice
until [ $choice = "q" -o $choice = "Q" ]
do
case $choice in
d|D) df -h ;;
m|M) free -m | grep ^Mem ;;
s|S) free -m | grep -i swap ;;
*)
showmenu
read -p "Please input your choice: " choice ;;
esac
showmenu
read -p "Please input your choice: " choice
done

可以看出使用函数,很大程度上简化了代码量。

3、函数的调用
直接使用函数名即可调用函数
   showmenu
4、自定义状态函数返回值
return 数字        //数字范围:0-255
[root@bogon ~]# cat test3.sh
#!/bin/bash
USERADD() {
username=loyal-Wang
if ! id $username &> /dev/null
then
    useradd $username
    return 0
else
    return 1
fi
}
USERADD
if [ $? -eq 0 ]     //比较函数状态返回值是否为0
then
    echo "user $username added successfully."
else
    echo "user $username already exists."
fi
[root@bogon ~]# sh test3.sh 
user loyal-Wang added successfully.
[root@bogon ~]# sh test3.sh 
user loyal-Wang already exists.
5、带参数的函数
调用带参数的函数的时候,需要加参数
    函数名 参数1 参数2 ... ...
[root@bogon ~]# cat test4.sh
#!/bin/bash
USERADD() {
username=$1
if ! id $username &> /dev/null
then
    useradd $username
    return 0
else
    return 1
fi
}
for i in `seq 10`
do
    USERADD user$i     //添加用户user1~user10
    if [ $? -eq 0 ]
    then
        echo "user $username added successfully."
    else
        echo "user $username already exists."
    fi
done
for i in `seq 10`
do
    USERADD test$i   //添加用户test1~test10
    if [ $? -eq 0 ]
    then
        echo "user $username added successfully."
    else
        echo "user $username already exists."
    fi
done  
[root@bogon ~]# sh test4.sh 
user user1 added successfully.
user user2 added successfully.
user user3 added successfully.
user user4 added successfully.
user user5 added successfully.
user user6 added successfully.
user user7 added successfully.
user user8 added successfully.
user user9 added successfully.
user user10 added successfully.
user test1 added successfully.
user test2 added successfully.
user test3 added successfully.
user test4 added successfully.
user test5 added successfully.
user test6 added successfully.
user test7 added successfully.
user test8 added successfully.
user test9 added successfully.
user test10 added successfully.
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值