shell函数和数组

2023年 8月 28日 60.5k 0

shell函数

Shell函数的概念

函数的数学表达式sin、cos、tan 其实只是定义好的计算公式,函数就是一个功能模块,在函数中写好需要执行的命令即可

函数的作用

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

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

函数使用方法:

  • 定义函数
  • 再引用函数
  • 函数使用步骤

  • 首先是定义函数
  • 其次是调用函数(注意:若定义完成不调用则函数无效)
  • 查看系统限制所有函数:declare -F
  • 查看函数定义详细内容:declare -f 函数名
  • 删除函数:unset 函数名
  • 定义函数基本格式

    格式1:
    function  函数名 () {
    函数内容
    }
    
    格式2:
    function 函数名 {
    函数内容
    }
    
    格式3:
    函数名 () {
    函数内容
    } 
    

    image.png

    注意事项

  • 直接写 函数中调用函数 直接写函数名
  • 同名函数 后一个生效
  • 调用函数一定要先定义
  • 只要先定义了调用的 其他函数定义顺序无关
  • 查看函数

    [root@localhost ~]# declare -F
    #函数列表
    declare -f __HOSTNAME
    declare -f __SIZE
    declare -f __SLAVEURL
    [root@localhost ~]# declare -f
    #函数具体的定义
    

    image.png

    删除函数

    unset func_name

    image.png

    函数的返回值

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

    使用原则:

  • 函数一结束就去返回值,应为$?变量只返回执行的最后一条命令的退出返回码
  • 退出码必须是0-255,超出的值将为除以256取余
  • image.png

    image.png

    image.png

  • 解决超过255的问题
  • image.png

    image.png

    函数的传参数

    shell函数和数组-1

    image.png

    函数的作用范围

    函数变量的作用范围:

  • 函数在Shell脚本中仅在当前Shell环境中有效。(即定义和调用函数要在同一个shell环境中)
  • 脚本中定义的变量,仅在当前shell环境中有效
  • Shell脚本中变量默认全局有效。(即在整个脚本中都生效,并非是环境变量)
  • 将变量限定在函数内部使用 local 命令。这样变量只在当前函数内有效,不影响脚本中的其他函数和变量。
  • 实例一:

    image.png

    image.png

    实例二:

    image.png

    函数的递归

    递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。所以递归要有两个基本要素,结束条件与递推关系。

    阶乘:

    image.png

    shell数组

    数组分类

  • 关联数组:必须声明才可以使用,命令:delare -A 数组名
  • 普通数组:利用数字下标节约变量,可以不声明也可以声明,命令:delare -a 数组名
  • delare -a命令也可查看有哪些普通数组

    定义数组方法

  • 普通数组
  • 数组名=(vlaue0  vlaue1  vlaue2  ...)
     
    [root@localhost ~]#a=(10 20 30)    #定义数组a,值为10 20 30 
    [root@localhost ~]#echo ${a[0]}    #输出数组a下标为0的元素
    10
    [root@localhost ~]#echo ${a[@]}    #输出数组a中所有的元素
    10 20 30
    [root@localhost ~]#echo ${a[*]}    #输出数组a中所有的元素
    10 20 30
    [root@localhost ~]#echo ${#a[@]}   #输出数组a中元素的个数
    3
    [root@localhost ~]#echo ${!a[@]}   #输出数组a中元素的下标
    0 1 2
    [root@localhost ~]#a[0]=100        #重新定义数组a下标为0的元素为100
    [root@localhost ~]#echo ${a[0]}    #输出数组a中下标为0的元素
    100
    
  • 关联数组定义
  • delare -A  数组名   #声明数组
    数组名[下标]=元素    #定义关联数组
     
    [root@localhost ~]#declare -A f       #声明关联数组f
    [root@zrsb  ~]#f[name]=pc1        #定义关联数组f下标name的元素为pc1
    [root@localhost ~]#f[ip]=10.0.0.0     #定义关联数组f下标ip的元素为10.0.0.0
    [root@localhost ~]#echo ${f[@]}       #输出关联数组f的所有元素值
    zrsb 10.0.0.0
    [root@localhost ~]#echo ${!f[@]}      #输出关联数组f中元素的所有下标
    name ip
    

    相关文章

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

    发布评论