1.函数基本概述
将命令序列按格式写在一起,可方便重复使用命令序列
Shell函数定义
[ function ] 函数名(){
命令序列
[return x] //使用return或exit可以显式地结束函数
}
调用函数的方法
函数名 [参数1][参数2]...
参数的表示方法:$1 $2 $3 ……${10} ${11}
函数的作用范围:
函数再shell脚本中仅在当前shell环境有效
shell脚本中变量默认为全局变量
若要定义仅在函数内部的局部变量时使用local+变量名
2.递归函数
调用自己本身的函数
示例
递归遍历目录
通过定义递归函数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" ""
3.数组
应用场景包括:
获取数组长度
获取元素长度
遍历元素
元素切片 ===>某一个子部份
元素替换
元素删除
定义数组的方法:
数组名=(value0 value1 value2) #用空格隔开
数组名=([0]=value0 [1]=value1 [2]=value2)
列表名=“value0 value1 value2”
数组名=($列表名)
数组名[0]=value0
数组名[1]=value1
数组名[2]=value2
4.使用数组的命令
1.获取数组长度
$(#数组名[@/]}
[root@localhost ~]# arr-number=(1 2 3 4 5);
[root@localhost ~]# arr-length=$(#arr-number[*]}
[root@localhost ~]# echo $arr_length
5
2.读取某下标赋值
${数组名[下标]}
[root@localhost ~]# arr-index2-$(arr-number[2])
[root@localhost ~]# echo $arr-index2
3
3.获取数组元素
${数组名[@/*]}
4.数组遍历
for v in ${数组名[@/*]}
do
echo $v
done
5.举例
#!/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[*]}
6.Shell脚本调试
echo命令
bash命令
命令语法
sh [-nvx] 脚本名
set命令
set -x:开启调节模式
set +x:关闭调节模式
本文详细介绍了Shell脚本中的函数概念,包括基本概述、递归函数的使用。接着,文章聚焦于数组,讲解了如何使用数组命令,如获取数组长度、读取与赋值、遍历及数组的操作,如冒泡排序、切片、替换和删除。最后,还探讨了Shell脚本的调试技巧。
33万+

被折叠的 条评论
为什么被折叠?



