shell函数的定义和使用

shell函数

shell函数的定义:

将命令序列按格式写在一起

可方便重复使用目录序列

shell函数的格式:

【1】

function 函数名 {

     命令序列

}

【2】

函数名 () {
    命令序列
}
# !/bin/bash
#定义函数user( ) {
useradd $name
echo 123456 | passwd --stdin $name
}
##########main###########
read -p "请输入要创建的用户名:" name
#调用函数
user

函数的返回值:

  • return表示退出函数并返回一个退出后值,脚本中可以使用$?变量显示该值

使用原则:

1.函数一结束就取返回值,因为$?变量只能返回执行的最后一条命令的退出状态码

2.退出状态码必须是0~255,超出时值将为除以256取余

  • echo 输出相应的返回值

    db1 () {
       read -p "输入一个数" num
       echo $[$num*2]
    }
    result=`db1`
    echo $result
    

函数传参

c和java中的形参和实参

形参

user(spring name) {
     useradd name
}

实参

user(zhangsan)

shell中通过位置参数传参

sum1 () {
  sum=$[$1+$2]
  echo $sum
}
#########  main  ###########
read -p "输入第一个参数" first
read -p "输入第二个参数" second
result=$(sum1 $first $second)
echo $result

或者

sum1 () {
  sum=$[$1+$2]
  echo $sum
}
#########  main  ###########
result=$(sum1 $1 $2)
echo $result

函数变量的作用范围:

linux全局变量局部变量

全局变量:变量作用于整个操作系统所有用户的shell环境内

局部变量:变量只作用于当前shell环境内

shell脚本全局变量局部变量

全局变量:作用于shell脚本当前的整个shell环境内,包括所有函数体内或函数体外

局部变量:作用于shell脚本当前的sdell环境内,仅限制于某个函数体内

函数在shell脚本中仅在当前shell环境中有效(用source会影响当前的shell环境)

Shell脚本中变量默认全局有效

将变量限定在函数内部使用local命令

#!/bin/bash

myfun () {
  echo $i
  lcocal i #指定局部变量i=9
  i=9
  echo $i
}

i=8
myfun
echo $i

#运行结果为
8
9
8

函数递归

函数调用自己本身的函数

阶乘

#!/bin/bash

fact () {

if [ $1 -eq 1 ]
  then
    echo 1
else
    local temp=$[$1-1]
    local result=$(fact $temp)
    echo $[$1 * $result]
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
}

list_files "/var/log"

在这里插入图片描述

函数库

创建库

vim ku.sh  #创建函数库
#!/bin/bash
jiafa () {
  echo $[$1 + $2]
}

jianfa () {
  echo $[$1 - $2]
}

chengfa () {
  echo $[$1 * $2]
}

chufa () {
  if [$2 -ne 0]
    then
      echo $[$1 / $2]
  else
      echo "$2 不能为0"
  fi
}

fact () {
  if [ $1 -eq 1 ]
    then
      echo 1
  elif [ $1 -eq 0 ]
    then
      echo 0
  else
      local temp=$(jianfa $1 1)
      local result=$(fact $temp)
      #echo $[$1 * $result]
      echo $(chengfa $1 $result)
 fi
}



vim test.sh   #创建测试文件


#!/bin/bash


. ku.sh  #调用函数库

value1=$1
value2=$2

result=$(jiafa $value1 $value2)

result2=$(chufa $value1 $value2)

result3=$(fact $value1)

echo "加法结果为: $result"
echo "除法结果为: $result2"
echo "阶乘结果为: $result3"

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值