shell脚本中的函数与数组

2023年 8月 15日 54.3k 0

1.函数

1.1函数的作用

在编写脚本时,有些脚本可以反复使用,可以调用函数来解决

语句块定义成函数约等于别名

函数使用方法:

  • 定义函数
  • 再引用函数
  • 1.2函数的定义

    【1】
    function 函数名 {
    命令序列
    ;}

    image.png
    【2】
    函数名() {
    命令序列
    ;}

    image.png
    【3】
    unction func_name () {

    ...函数体...

    }

    注意事项

  • 直接写 函数中调用函数 直接写函数名
  • 同名函数 后一个生效
  • 调用函数一定要先定义
  • 只要先定义了调用的 其他函数定义顺序无关
  • 函数是将脚本定义成一个命令,调用命令时记得使用 命令,调用结果
  • 6.3 查看函数

    delcare -F :查看函数的列表

    image.png

    delcare -f :查看函数的具体命令

    image.png

    删除函数:

    unset 函数名

    6.4 函数的返回值

    return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值

    使用原则:

  • 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
  • 退出码必须是0-255,超出的值将为除以256取余
  • #!/bin/bash
    test1 () {
            read -p "请输入一个数字:" num
            echo $[$num*2]
    
    
    }
    
    result=`test1`
    echo $result
    

    image.png

    6.5函数的变量范围

    函数在shell脚本中仅在当前的shell环境中有效

    shell脚本中函数的变量默认全局有效

    将变量限定在函数内部使用local命令

    [root@localhost opt]# cat demo8.sh 
    #!/bin/bash
    myfun(){
    i=8
    echo $i
    
    }
    myfun
    i=9
    echo $i
    
    [root@localhost opt]# ./demo8.sh 
    8
    9
    
    

    image.png

    6.6 函数的递归

    函数调用自己本身的函数

    阶乘:

    函数调用自己
    #!/bin/bash
    #求 5的阶乘 需要 5-1=4  (1*2*3*4)*5
    fact() {
    if [ $1 -eq 0 -o $1 -eq 1 ] 
    then
    echo 1
    else
    echo $[$1*$(fact $[$1-1])]
     fi
    }
    fact $1
    

    6.7 使用函数文件

    我们可以新建一个专门存放函数的文件

    [root@localhost data]#vim functions 
    
    ostype (){
       if  grep -i -q "linux 6" /etc/os-release
       then
       echo "centos6"
       elif grep -i -q "linux 7" /etc/os-release
       then
       echo "centos7"
       elif grep -i -q "linux 8"  /etc/os-release
       then
       echo "centos8"
      else
      echo  "not linux"
      fi
      }
    
    color () {
    RED="echo -e E[31m"
    GREEN="echo -e E[32m"
    END="E[0m"
    }
    引用时
    [root@localhost data]#. functions 
    [root@localhost data]#ostype 
    centos7
    
    #直接当成命令使用
    
    [root@localhost data]#color
    [root@localhost data]#${GREEN}MMM$END
    ##会变颜色
    

    2.数组

    2.1数组的基本格式

  • 数组名=(value0 value1 value2 value3 ......)

  • 数组名=([0]=value [1]=value1 [2]=value2 ....)

  • 列表名="value0 value1 value2 value3 ...... "

    数组名=($列表名)

  • 数组名[0]="value1"

    数组名[1]="value2"

    数组名[2]="value3"

  • shell脚本中的函数与数组-1

    数组的包括数据类型

    • 数值型
    • 字符型
    • 混合型数字加字符
    输出第一一个数值  注意是从0开始计算
    列出所有参数
    [root@localhost ~]# echo ${a[*]}   //*代表所有参数
    1 2 3 4 5
    [root@localhost ~]# echo ${a[@]}   //@同*
    1 2 3 4 5
    共有多少个位置
    [root@localhost ~]# echo ${#a[@]}     //前面加#数组的长度
    5
    [root@localhost ~]# echo ${#a[*]}    
    5
    
    #数组分隔
    [root@localhost ~]# a=(1 2 3 4 5)
    [root@localhost ky15]#echo ${a[@]:0:5}
    1 2 3 4 5
    [root@localhost ky15]#a[1]=9
    #数组替换
    [root@localhost ky15]#echo ${a[1]}
    9
    [root@localhost ky15]#echo ${a[@]}
    1 9 3 4 5
    
    【数组遍历】
    #!/bin/bash
    a=(1 2 3 4 5)
    for i in ${a[@]}
    do
    echo $i
    done
    

    image.png

    a=(1 2 3 4 5)
    
    echo ${a[@]/4/66} 	#${数组名[@或*]/查找字符/替换字符}
    echo ${a[@]}			#并不会替换数组原有内容
    
    

    shell脚本中的函数与数组-2

    【取出数组中的最大值和最小值】
    最大值
    #!/bin/bash
    a=( 10 20 50 40 100 )
    max=${a[0]}
    l=${#a[*]}

    for ((i=0;i

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论