Shell脚本之shell函数

本文详细介绍了Shell脚本中的函数概念,包括基本概述、递归函数的使用。接着,文章聚焦于数组,讲解了如何使用数组命令,如获取数组长度、读取与赋值、遍历及数组的操作,如冒泡排序、切片、替换和删除。最后,还探讨了Shell脚本的调试技巧。

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:关闭调节模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值