Shell函数与数组

函数基本概述

  • 函数
    函数就是将命令语句按格式写在一起,可以方便重复使用命令函数的格式
[function]函数名(){
命令语句
[return x]      #使用return或exit可以显式地结束函数
}
  • 调用函数的方法:函数名 [参数1] [参数2]…
    参数的表示方法:$ 1 $ 2 $ 3 ……$ {10} ${11}
  • 函数的作用范围:
    函数再shell脚本中仅在当前shell环境有效
    shell脚本中变量默认为全局变量
    若要定义仅在函数内部的局部变量时使用local+变量名

​递归函数

调用自己本身的函数
示例
递归遍历目录
通过定义递归函数list_files来实现

#!/bin/bash
# 递归遍历目录list_files
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" ""

数组

  • 应用场景包括:
    获取数组长度
    获取元素长度
    遍历元素
    元素切片 ===>某一个子部份
    元素替换
    元素删除
  • 定义数组的方法:
    数组名=(value0 value1 value2) #用空格隔开
    数组名=([0]=value0 [1]=value1 [2]=value2)
    列表名=“value0 value1 value2”
    数组名=($列表名)
    数组名[0]=value0
    数组名[1]=value1
    数组名[2]=value2

使用数组的命令

获取数组长度

$(#数组名[@/]}

[root@localhost ~]# arr-number=(1 2 3 4 5);
[root@localhost ~]# arr-length=$(#arr-number[*]}
[root@localhost ~]# echo $arr_length
5

读取某下标赋值

${数组名[下标]}

[root@localhost ~]# arr-index2-$(arr-number[2])
[root@localhost ~]# echo $arr-index2
3

获取数组元素

${数组名[@/*]}

${数组名[@/*]}

数组遍历

for v in ${数组名[@/*]}
  do
   echo $v
  done
#!/bin/bash
#不满足60分的都加到60分
score=(66 58 49 60 88 96)
for ((i=0;i<=&{#score[*]};i++));do
	if [ ${score[$i]} -lt 60 ];then
		new[$i]=60
	else
		new[$i]=${score[$i]}
	fi
done
echo ${new[*]}
冒泡排序
#!/bin/bash
# 冒泡排序
num=(3 5 4 7 8 2)
for ((i=1;i<${#num[*]};i++))
do
         for ((j=0;j<${#num[*]}-$i;j++))
         do
         if [ ${num[j]} -gt ${num[$j+1]} ]
         then temp=${num[j]}
         num[j]=${num[$j+1]}
         num[j+1]=$temp
         fi
         done
 done
 echo ${num[*]}
 [root@server1 ~]# ./maop.sh
2 3 4 5 7 8

数组切片

${数组名[@/*]:起始位置:长度}

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# echo $farr[@])
1 2 3 4 5
[root@localhost ~]# echo $farr[@]:0:2}
1 2
[root@localhost ~]# echo $arr[@]:2:3}
3 4 5

数组的替换

${数组名[@或*]/查找字符/替换字符}

[root@localhost ~]#arr=(1 2 3 4 5)
[root@localhost ~]# echo ${arr[@14/66}
12 3 66 5
[root@localhost ~]#echo $farr@])
1 2 3 4 5
[root@localhost ~]# arr=($(arr[@]/4/66})
[root@localhost ~]# echo $farr[@])
1 2 3 66 5

数组删除

unset

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]#unset arr
[root@localhost ~]# echo ${arr[*])

[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr[2)
[root@localhost ~]# echo ${arr[*])
1 2 4 5
#!/bin/bash
#将低于60分以下的成绩删除
score=(10 20 30 40 50 90 80 50 60)
i=1
for	f	in	${score[*]};do
	if	[ $f -lt 60 ];then
	  unset score[$i]
	fi
	lei i++
done
echo ${score[*]}

Shell脚本调试

echo命令
bash命令
命令语法

sh [-nvx] 脚本名

set命令
set -x:开启调节模式

set +x:关闭调节模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值