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

 

posted @ 2022-10-31 16:24  赵哈哈#  阅读(42)  评论(0编辑  收藏  举报