Shell编程之函数
Posted NicolasNRH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell编程之函数相关的知识,希望对你有一定的参考价值。
Shell编程之函数
-
Shell函数
- 将命令序列按格式写在一起
- 可方便重复使用命令序列
-
Shell函数定义
[1] # 定义函数 function 函数名 命令序列 [2] 函数名() 命令序列 ########## main ########## # 调用函数 函数名
#!/bin/bash # 创建用户的函数 user() useradd $name echo 123456 | passwd --stdin $name read -p "请输入要创建的用户名:" name # 用户输入用户名 user # 调用函数
-
函数返回值
- return表示退出函数并返回一个退出值,脚本中可以使用$?变量显示该值
- 使用原则
- 函数一结束就取返回值,因为$?变量值返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255,超出时值将为该值除以256的取余值
#!/bin/bash function test read -p "请输入一个数值:" num return $[ $num * 2] test1() read -p "请输入:" value echo $[$value * 2] ##### main ##### result=$(test1) echo $result test echo $?
-
函数传参
- 函数体外的位置变量是运行脚本时传入的位置变量
- 函数体内的位置变量是调用函数时传入的位置变量
#!/bin/bash sum1() sum=$[$1 +$2] echo $sum ########## main ########## read -p "请输入第一个位置参数" first read -p "请输入第二个位置参数" second result=$(sum1 $first $second) echo $result
-
函数变量的作用范围
- 函数在shell脚本中仅在当前shell环境中有效(除非是用的source)
- Shell脚本中变量默认全局有效
- 使用local命令将变量限定在函数内部
#!/bin/bash myfun() echo $i # 8 local i i=9 echo $i # 9 i=8 myfun echo $i # 8
-
递归
-
函数调用自己本身的函数
- 阶乘
#!/bin/bash fact() 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 "请输入一个要阶乘的数值:" n result=$(fact $n) echo $result
- 递归目录
#!/bin/bash function 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 不能作为除数" fi Factorial() #阶乘 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.sh v1=10 v2=2 resl=$(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"
-
以上是关于Shell编程之函数的主要内容,如果未能解决你的问题,请参考以下文章