知识就是力量,时间就是生命。这篇文章主要讲述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"
- 函数调用自己本身的函数
推荐阅读
- Linux防火墙基础 —— iptables防火墙
- 正则表达式
- SNAT策略
- 6个显示彩色字符的批处理代码
- DNAT策略
- awk编辑器
- 进程和计划任务管理
- Shell脚本之双重循环
- 华为路由RIP与OSPF互相引入