当前位置:   article > 正文

Shell 函数的定义和使用_shell函数定义与调用

shell函数定义与调用

目录

 一、Shell的函数的定义

1.1定义

1.2 函数返回值

1.3 函数传参

1.4 函数变量的作用范围

1.5 函数递归

1.5.1 阶乘

 1.5.2 递归目录

 1.6 创建库


 一、Shell的函数的定义

1.1定义

  • 将命令序列按格式写在一起
  • 可方便重复使用命令序列
  1. [1]
  2. function函数名{
  3. 命令序列
  4. }
  5. [2]
  6. 函数名() {
  7. 命令序列

 示例1:

 

示例2:调用函数,创建用户

 

1.2 函数返回值

return表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值。
使用原则:
1、函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码。
2、退出状态码必须是0~255,超出时值将为除以256取余。
 

return  echo两种输出函数的获取方法

  1. function db1 {
  2. read -p "请输入: " value
  3. return $[$value * 2]
  4. }
  5. db1
  6. echo $?
  7. db1 () {
  8. read -p "请输入: " value
  9. echo $[$value * 2]
  10. }
  11. result=`db1`
  12. echo $result

 示例1:利用函数输出一个数值为设定数值num的两倍

 

 1.3 函数传参

格式:

  1. 函数传参:
  2. sum1 () {
  3. sum=$[$1 + $2]
  4. echo $sum
  5. }
  6. read -p "输入第一个参数: " first
  7. read -p "输入第二个参数: " second
  8. sum1 $first $second
  9. sum2 () {
  10. sum=$[$1 + $2]
  11. echo $sum
  12. }
  13. sum2 $1 $2

示例1:

 

 示例2:

$1--10  $4--40,所以输出值为10+40=50

 

1.4 函数变量的作用范围

  • 函数在Shell脚本中仅在当前Shell环境中有效。
  • Shell脚本中变量默认全局有效。
  • 将变量限定在函数内部使用local命令。

linux全局变量局部变量

  • 全局变量:变量作用于整个操作系统所有用户的shell环境内。
  • 局部变量:变量只作用于当前shell环境内。

shell脚本全局变量局部变量

  • 全局变量:作用于shell脚本当前的整个shell环境内,包括所有函数体内或函数体外。
  • 局部变量:作用于shell脚本当前的sdell环境内,仅限制于某个函数体内。

格式:

  1. myfun() {
  2. local i
  3. i=8
  4. echo $i
  5. }
  6. i=9
  7. myfun
  8. echo $i

示例:

1.5 函数递归

函数调用自己本身的函数

1.5.1 阶乘

  1. fact () {
  2. if [ $1 -eq 1 ]
  3. then
  4. echo 1
  5. else
  6. local temp=$[$1-1]
  7. local result=$(fact $temp)
  8. echo $[$1 * $result]
  9. # 5 * $result(4*$result(3*$result(2*$result(1))))
  10. fi
  11. }
  12. ######## main ########
  13. read -p "请输入" n
  14. result=$(fact $n)
  15. echo $result

 示例:算一个数的阶乘,以数值8为例

 1.5.2 递归目录

格式:

  1. function list_files {
  2. for f in `ls $1`
  3. do
  4. if [ -d "$1/$f" ]
  5. then
  6. echo "$2 目录是 $f"
  7. list_files "$1/$f" "$2"
  8. else
  9. echo "$2 文件是 $f"
  10. fi
  11. done
  12. }
  13. list_files "/var/log" ""

示例:递归查看相关的文件或者目录

 输出结果

 

 1.6 创建库

  1. vim myfuncs.sh
  2. #!/bin/bash
  3. jiafa () {
  4. echo $[$1 + $2]
  5. }
  6. jianfa () {
  7. echo $[$1 - $2]
  8. }
  9. chengfa () {
  10. echo $[$1 * $2]
  11. }
  12. chufa () {
  13. if [$2 -ne 0]
  14. then
  15. echo $[$1 / $2]
  16. else
  17. echo "$2 不能为0"
  18. fi
  19. }
  20. fact () {
  21. if [ $1 -eq 1 ]
  22. then
  23. echo 1
  24. elif [ $1 -eq 0 ]
  25. then
  26. echo 0
  27. else
  28. local temp=$(jianfa $1 1)
  29. local result=$(fact $temp)
  30. #echo $[$1 * $result]
  31. echo $(chengfa $1 $result)
  32. fi
  33. }
  34. vim test.sh
  35. . myfuncs.sh
  36. value1=$1
  37. value2=$2
  38. result=$(jiafa $value1 $value2)
  39. result2=$(chufa $value1 $value2)
  40. result3=$(fact $value1)
  41. echo "加法结果为: $result"
  42. echo "除法结果为: $result2"
  43. echo "阶乘结果为: $result3"

示例:

 

 输出的结果

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/154539
推荐阅读
相关标签
  

闽ICP备14008679号