Shell编程数组应用

shell函数

格式

函数名 [参数1] [参数2]

特殊$符号意思

  • $0:是脚本本身的名字;
  • $#:是传给脚本的参数个数;
  • $@:是传给脚本的所有参数的列表,即被扩展为"$1" “$2” “$3"等;
  • $*:是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个,即被扩展成”$1c$2c$3",其中c是IFS的第一个字符;
  • $$:是脚本运行的当前进程ID号;
  • $?:是显示最后命令的退出状态,0表示没有错误,其他表示有错误;

定义方法

  • 方法一:数组名=(value0 value1 value2 …)
  • 方法二:数组名=([0]=value [1]=value [2]=value … )[ ]:下标
  • 方法三:列表名=“value0 value1 value2 … ”
    数组名=($列表名)
  • 方法四:数组名[0]=“value”
    数组名[1]=“value”
    数组名[2]=“value”

示例

数组长度与下标

[root@server2 ~]# b=(1 2 3 4 5 )
[root@server2 ~]# echo ${#b[*]}
5
[root@server2 ~]# echo ${#b[@]}
5
[root@server2 ~]# echo ${b[0]}
1
[root@server2 ~]# echo ${b[4]}
5
[root@server2 ~]# echo ${b[@]}
1 2 3 4 5
c=([0]=10 [1]=20 [2]=30)
[root@server2 ~]# echo ${#c[@]}
3
[root@server2 ~]# echo ${c[0]}
10
[root@server2 ~]# echo ${c[2]}
30
[root@server2 ~]# echo ${c[*]}
10 20 30

数组的替换

[root@server2 ~]# b=(1 2 3 4 5 )
[root@server2 ~]# echo ${b[@]/3/33}   (在输出时替换,本质未变)
1 2 33 4 5
[root@server2 ~]# echo ${b[@]}
1 2 3 4 5
[root@server2 ~]# b=${b[@]/3/33}      (改变本源)
[root@server2 ~]# echo $b
1 2 33 4 5

数组的删除

[root@server2 ~]# unset b
[root@server2 ~]# echo ${b[@]}

递归函数

调用自己本身的函数

function sum(){
    s=`sum`
}

递归遍历目录

function list_files(){
    for f in `ls $1`
    do
    #判断是否为目录
    if [ -d "$1/$f" ];then
        echo "$2$f"
        #递归调用
        list_files "$1/$f" "   $2"
    else 
        echo "$2$f"
    fi
    done
}
list_files "/var/log" ""

Shell脚本计算10的阶乘10

#!/bin/sh
factorial=1 
for a in `seq 1 10  `
do
factorial=`expr $factorial\*$a`
done
echo "10! = $factorial"

Shell脚本调试

bash命令

命令格式

  • sh [-nvx] 脚本名

常用选项

-n,-v,-x

  • -n:不会执行该脚本,仅查询脚本语法是否有问题,如果没有语法问题就不显示任何内容,如果有问题会提醒报错。
  • -v:在执行脚本时,先将脚本的内容输出到屏幕上然后执行脚本,如果有错误,也会给出错误提示。
  • -x:将执行的脚本内容输出到屏幕上,这个是对调试很有用的参数。

set命令

  • set -x:开启调节模式
  • set +x:关闭调节模式

项目示例

[root@server2 ~]# vi grade1.sh
#!/bin/bash
set -x //开启调试模式
read -p "请输入你的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分!优秀" set +x //关闭调试模式
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格" else
echo "$GRADE 分?不合格"
fi
[root@server2 ~]# chmod +x grade1.sh
[root@server2 ~]# ./grade1.sh 

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值