————————————————

Shell函数基础

函数

定义

  • 把一段代码块放进放进函数里面进行封装,可以实现一次书写,终身调用

创建函数

  • 格式
   function name { 
    commands 
    } 

或者

   name() { 
    commands 
    } 
  • 注意事项

    • 函数名必须唯一,一个脚本两个同名函数,新函数覆盖旧函数

调用函数

  • 函数定义后,直接通过函数名调用(不需要加括号)

  • 注意事项

    • 函数必须先定义,采用被调用

函数返回码

  • 使用标准变量

    • $?

    • 注意事项

      • 默认只返回最后一条命令执行的状态码
      • 如果最后一条命令执行成功,返回0状态码,即使函数中间有命令执行失败
  • 使用return命令

    • return num

    • 注意事项

      • 为了避免提取函数返回值前执行了其他命令导致函数返回值的丢失(覆盖),建议函数结束马上取返回值
      • 退出状态码必须为0-255共256个

处理函数输出

variable=$(function )

向函数传参

  • function value

    • 脚本命令行传参给函数

      • 函数不能直接使用命令行传给的参数。可以通过给脚本传参,脚本使用特殊参数变量保存参数值,使用函数时,把特殊参数变量作为函数的参数传给函数

      • 注意事项

        • 特殊参数变量说明

          • $@

            • 代表存储所有参数的值
          • $#

            • 代表参数的个数

函数处理变量

  • 全局变量

    • 默认在脚本中定义的变量都是全局变量,全局变量在脚本的任何地方都有效,包括函数内部

    • 注意事项

      • 全局变量在脚本文件中定义和赋值,函数调用该值时改变该值,当脚本主体再次调用该全局变量时,将会是被函数修改后的变量值
  • 局部变量

    • 局部变量在函数内部定义,只在函数内部使用

    • 语法格式

      local varibale

    • 注意事项

      • 局部变量使得函数变量和脚本变量相隔离,同时脚本变量可以共享给函数使用

函数处理数组

  • 先分后合

    • 函数只会读取数组变量的第一个值,而不是数组变量的全部值。如果要函数把数组所有的值都读取出来,需要先把数组变量传给函数,函数把原数组拆分成每一个值,再把每一个值赋给新数组

    • 函数重组数组

      • 定义局部变量

        local arrayname

      • 拆分数组并赋值给新数组

        arrayname=($(echo "$@"))

    • 函数返回处理后的数组

      echo ${arrrayname[*]}

函数递归

  • 函数调用自身获得结果

  • 典型应用

    • 计算阶乘

      • 阶乘

        • 一个数的阶乘等于该数之前的所有数乘以该数的值

        • 公式

          x!=x*(x-1)!

        • 函数实现

          • 思路

            • 想要求x的阶乘,先求出x-1的阶乘,想要x-1的阶乘,先求出x-2的阶乘....

            • 具体实现

              • 获取用户输入值,如果等于1,则返回1;大于1则开启函数递归功能(递归的过程是求取x-1及之前的总数值),最终把递归求出得值乘以用户输入值
               fuction factorial {
                if [$1=1]
                then 
                echo 1
                else
                local temp=[$1 - 1]
                local result="factorial $temp"
                echo $[$result  * $1 ]
                fi
                }
              

函数库的使用

  • 库文件

    • 把多个函数写进一个文件,在脚本文件中进行导入调用
  • 导入函数库

    source filename
    或者
    . filename

    • 注意事项

      • filename为库文件名,如果与脚本文件不在同一个目录,需要加上绝对路径
  • 在.bashrc中定义函数

    • 在.bashrc文件中导入文件库或定义函数,可以实现所有的shell初始化启动时可以自动加载,可以在命令行和脚本文件中直接使用函数,而不用再次导入
    • , path/filename

命令行创建函数

  • 单行创建函数

    • function name { xxx ; }

    • 注意事项

      • 单行创建函数必须加分号,代表函数结束
  • 多行创建函数(使用次提示符)

    function name {
     xxx 
    }
    
    • 注意事项

      • { 代表函数起始,}代表结束
  • 注意事项

    • 命令行定义的函数的函数名不可以和内建的命令重复,否则会覆盖函数系统的命令

shtool库

  • 提供大量的shell脚本函数

  • 基本语法

    shtool [option ] [function [options] [args] ]

  • 常用函数

    shtool paltform

    • 查看发行版和CPU硬件信息

    shtool proc -p "text"

    • 创建执行命令的旋转进度条和提示文本
posted @   Tjane'Blogs  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示