shell脚本的函数与数组
一、函数的定义
1.1、函数的作用
(1)语句块定义函数相当于别名。
(2)封装的可重复利用的具有特定功能的代码
1.2、函数的定义
1 function 函数名(){
2 命令序列
3 [return x] #使用return或exit可以显示的结束函数
4 }
5 或者
6
7 函数名 (){
8 命令序列
9 [return x] #使用return或exit可以显示的结束函数
10 }
注意事项
- 直接写 函数中调用函数 直接写函数名
- 同名函数 后一个生效
- 调用函数一定要先定义
- 只要先定义了调用的 其他函数定义顺序无关
1.3、函数的调用
1 name(){ #定义函数
2 echo "good" #函数命令
3 }
4
5
6 xingbie(){
7 echo "man"
8 }
9
11
12 name #输出函数
13 xingbie
1.4、函数的返回值
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
函数返回值的使用规则
(1)函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
(2)退出状态码必须是0~255,超出时值将为除以256取余。
1 #!/bin/bash 2 3 j(){ #定义函数 4 read -p "请输入一个数:" i #给i赋值 5 if [ $i -ge 1 ];then #如果赋的值大于等于1时执行操作 6 echo $[$i + 1] #输出 7 fi 8 } 9 10 11 result=`j` # 获取函数结果 12 echo $result #最后进行输出
二、函数实例
2.1、阶乘
1 fact() {
2 if [ $1 -eq 1 ] 当$1不等于1时进入else
3 then
4 echo 1
5 else
6 local t=$[$1 - 1]
7 local r=$(fact $t) 到这一步r=$(fact $t)再次调用函数fact,fact这时为$t
8 echo $[$1 * $r]
9 fi
10 }
11 read -p "请输入:" n 定义一个值
12 result=$(fact $n) 进入函数算出值
13 echo $result
2.2、传参
1 #!/bin/bash
2 chuan(){
3 f=$[$1+$2] #shell脚本内的参数再传递给函数内参数
4 echo $f
5 }
6
7 chuan $1 $2 外部命令行输入的位置传递给shell脚本内的参数
2.3、递归
1 #!/bin/bash
2 list() {
3 for fd in $(ls $1)
4 do
5 if [ -d "$1/$fd" ];then
6 echo "$2$fd 是目录" #如果是目录就输出这个目录
7 list "$1/$fd" " $2"
8 else
9 echo "$2$fd 是文件" 不是目录则输出$fd
10 fi
11 done
12 }
13
14 ####main#####
15 list "/var/log" ""
三、数组的定义
3.1、创建数组
法一:
1 [root@localhost ~]# a=(1 2 3 4 5)
2 [root@localhost ~]# echo ${a[*]}
3 1 2 3 4 5
法二:
1 [root@localhost ~]# b=([0]10 [1]20 [2]30)
2 [root@localhost ~]# echo ${b[@]}
3 [0]10 [1]20 [2]30
法三:
1 [root@localhost ~]# li="a b c d"
2 [root@localhost ~]# c=($li)
3 [root@localhost ~]# echo ${c[*]}
4 a b c d
法四:
1 [root@localhost ~]# d[0]="20"
2 [root@localhost ~]# d[1]="30"
3 [root@localhost ~]# d[2]="40"
4 [root@localhost ~]# d[3]="50"
5 [root@localhost ~]# echo ${d[*]}
6 20 30 40 50
四、数组增删替换
4.1、数组的追加
法一:单个添加
1
2 [root@localhost ~]# a=(1 2 3 4 5)
3 [root@localhost ~]# echo ${a[*]}
4 1 2 3 4 5
5 [root@localhost ~]# a[5]=6
6 [root@localhost ~]# a[6]=7
7 [root@localhost ~]# echo ${a[*]}
8 1 2 3 4 5 6 7
法二:索引增加
1 [root@localhost ~]# b=(1 2 3)
2 [root@localhost ~]# b[${#b[*]}]=4
3 [root@localhost ~]# echo ${b[*]}
4 1 2 3 4
法三:删除索引添加新的元素
1 [root@localhost ~]# unset b[2]
2 [root@localhost ~]# echo ${b[2]}
3
4 [root@localhost ~]# b=("${b[*]}" [2]=2)
5 [root@localhost ~]# echo ${b[2]}
6 2
4.2、数组的删除
删除整个数组
[root@localhost ~]# unset a
[root@localhost ~]# echo ${a[*]}
删除数组的某个索引对应的元素
[root@localhost ~]# unset b[4]
[root@localhost ~]# echo ${b[4]}
4.3、数组的替换
单个元素替换
1 [root@localhost ~]# b=(2 4 6 8)
2 [root@localhost ~]# b[0]=3
3 [root@localhost ~]# echo ${b[*]}
4 3 4 6 8
多次替换
[root@localhost ~]# echo ${b[*]/4/5}
3 5 6 8