将命令序列按格式卸载一起,可方便重复使用命令序列
function 函数名 { 命令序列 }
函数名 () { 命令序列 }
return表示退出函数并返回一个退出值,脚本可以用 $ ? 变量显示该值
✪使用原则:
❉1.函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
❉2.退出状态码必须是0~255,超出时值将为除以256取余
#!/bin/bash function test1 { read -p "请输入一个数字:" num1 return $[$num1 * 2] } test1 echo $? test2 () { read -p "请输入一个数字:" num2 echo $[$num2 * 2] } return2=`test2` echo $return
#!/bin/bash sum1 () { sum=$[$1 + $2] echo $sum } read -p "输入第一个参数:" first read -p "输入第二个参数:" second sum1 $first $second
#!/bin/bash sum1 () { sum=$[$1 + $2] echo $sum } sum1 $1 $2
✪函数在shell脚本中仅在当前shell环境中有效
✪shell脚本中变量默认全局有效
✪将变量限定在函数内部使用local命令
#!/bin/bash jb () { local i #设置局部变量 i=1 echo $i } i=2 #全局环境 jb echo $i
函数调用自己本身的函数
#!/bin/bash aa() { if [ $1 -eq 1 ] then echo 1 else local bb=$[$1 - 1] local cc=$(aa $bb) echo $[$1 * $cc] fi } read -p "请输入:" n cc=$(aa $n) echo $cc
#!/bin/bash function list { for a in `ls $1` #使用for循环将目标目录下的文件和目录作为取值列表 do if [ -d "$1/$a" ] #if语句判断是否为目录 then echo "$2$a" list "$1/$a" "$2" #调用函数 else echo "--$2$a" fi done } list "/var/log" "" #递归显示/var/log目录
✪1.创建库
jiafa() { echo $[$1 + $2] } chengfa() { echo $[$1 * $2] } jianfa() { echo $[$1 - $2] } chufa() { if [ $2 -ne 0 ];then echo $[$1 / $2] else echo "$2不能为0" fi }
2.编写脚本
#!/bin/bash . /root/script/8.sh read -p "输入第一个参数值:" first read -p "输入第二个参数值:" second result1=`jiafa $first $second` result3=$(chengfa $first $second) result2=`jianfa $first $second` result4=$(chufa $first $second) echo $result1 echo $result2 echo $result3 echo $result4
3.运行脚本