Shell编程之函数

知识就是力量,时间就是生命。这篇文章主要讲述Shell编程之函数相关的知识,希望能为你提供帮助。
Shell编程之函数

  • Shell函数
    • 将命令序列按格式写在一起
    • 可方便重复使用命令序列
  • Shell函数定义
    [1] # 定义函数 function 函数名 命令序列[2] 函数名() 命令序列########## main ########## # 调用函数 函数名

    #!/bin/bash # 创建用户的函数user() useradd $name echo 123456 | passwd --stdin $nameread -p "请输入要创建的用户名:" name # 用户输入用户名user # 调用函数

  • 【Shell编程之函数】函数返回值
    • return表示退出函数并返回一个退出值,脚本中可以使用$?变量显示该值
    • 使用原则
    • 函数一结束就取返回值,因为$?变量值返回执行的最后一条命令的退出状态码
    • 退出状态码必须是0~255,超出时值将为该值除以256的取余值
    #!/bin/bashfunction test read -p "请输入一个数值:" num return $[ $num * 2]test1() read -p "请输入:" value echo $[$value * 2]##### main ##### result=$(test1) echo $resulttest echo $?

  • 函数传参
    • 函数体外的位置变量是运行脚本时传入的位置变量
    • 函数体内的位置变量是调用函数时传入的位置变量
    #!/bin/bashsum1() sum=$[$1 +$2] echo $sum########## main ########## read -p "请输入第一个位置参数" first read -p "请输入第二个位置参数" secondresult=$(sum1 $first $second) echo $result

  • 函数变量的作用范围
    • 函数在shell脚本中仅在当前shell环境中有效(除非是用的source)
    • Shell脚本中变量默认全局有效
    • 使用local命令将变量限定在函数内部
    #!/bin/bashmyfun() echo $i# 8 local i i=9 echo $i# 9i=8 myfun echo $i# 8

  • 递归
    • 函数调用自己本身的函数
    • 阶乘
    #!/bin/bashfact() if [ $1 -eq 1 ] #输入为1时直接输出1 then echo 1 else local temp=$[$1 -1] local result=$(fact $temp) #调用自身且$1为temp的值实现递归调用 echo $[$1 * $result] # 相当于5*$result(4*$result(3*$result(2*$result(1)))) fi########## main ##########read -p "请输入一个要阶乘的数值:" nresult=$(fact $n)echo $result

    • 递归目录
    #!/bin/bashfunction list_files for f in `ls $1` do if [ -d "$1/$f" ] then echo "目录:$2$f" list_files "$1/$f" " $2" else echo "文件:$2$f" fi done########## main ########## # 递归查看指定目录 ## 第一个位置变量用于判断是目录或者文件,第二个位置变量用于给子目录或者子文件实现缩进 list_files "/var/log" ""

    • 创建库
    vim myfuncs.sh
    # 一个简单的加减乘除阶乘的库 addition()#加法 echo $[$1 + $2]multiplication()#乘法 echo $[$1 * $2]subtraction()#减法 ecno $[$1 - $2]division()#除法 if [ $2 -ne 0 ]; then echo $[$1 /$2] else echo "0 不能作为除数" fiFactorial()#阶乘 if [ $1 -eq 1 ]; then echo 1 elif [ $1 -eq 0 ]; then echo 0 else local temp=$(subtraction $1 1) local result=$(fact $temp) echo $[$1 * $result] echo $(multiplication $1 result) fi

    • vim test.sh #编写测试脚本
    #!/bin/bash. /opt/myfuncs.shv1=10 v2=2resl=$(addition $v1 $v2) res2=$(subtraction $v1 $v2) res3=$(multiplication $v1 $v2) res4=$(division $v1 $v2) res5=$(Factorial $v1 $v2)echo "加法的结果是:$res1" echo "减法的结果是:$res2" echo "乘法的结果是:$res3" echo "除法的结果是:$res4" echo "阶乘的结果是:$res5"


    推荐阅读