函数基本概述
- 函数
函数就是将命令语句按格式写在一起,可以方便重复使用命令函数的格式
[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:关闭调节模式