shell脚本入门-函数

本文详细介绍了Shell脚本中的函数创建、调用、返回值、变量作用域及文件包含等核心概念,并通过示例解释了如何在脚本中定义和使用函数,以及如何处理函数的返回状态和局部变量。此外,还展示了如何在脚本中包含其他文件以实现代码复用。
摘要由CSDN通过智能技术生成

基本使用

  • 创建函数

    • 采用关键字function

      funtion name{  #脚本中每一个函数都必须有唯一的名称
       commands
      }
      
    • 类似其他编程语言

      name()
      {
      	commands
      }
      
  • 调用函数

    #!/bin/bash 
    # using a function in a script 
    function func1 { 
     echo "This is an example of a function" 
    } 
    count=1 
    while [ $count -le 5 ] 
    do 
     func1 
     count=$[ $count + 1 ] 
    done 
    echo "This is the end of the loop" 
    func1                             # 指定函数名即可调用函数
    echo "Now this is the end of the script" 
    
  • 函数调用要在函数定义之后

  • 函数名必须是唯一的

函数的返回值 成功状态码返回0

  • 默认退出状态码:默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。在函数执行结束后,可以用标准变量$?来确定函数的退出状态码
    • 默认状态码并不安全
  • return命令

状态码:$?

函数中的变量

function addem {
 if [ $# -eq 0 ] || [ $# -gt 2 ]   # 判断传递给函数的参数个数 -gt是大于为真
     then 
     echo -1 
 elif [ $# -eq 1 ] 
     then 
     echo $[ $1 + $1 ] 
 else 
     echo $[ $1 + $2 ] 
 fi 
} 
echo -n "Adding 10 and 15: " 
value=$(addem 10 15) 
echo $value 
echo -n "Let's try adding just one number: " 
value=$(addem 10) 
echo $value 
echo -n "Now trying adding no numbers: " 
value=$(addem) 
echo $value 
echo -n "Finally, try adding three numbers: " 
value=$(addem 10 15 20) 
echo $value

#输出:
Adding 10 and 15: 25 
Let's try adding just one number: 20 
Now trying adding no numbers: -1 
Finally, try adding three numbers: -1
  • 全局变量:默认情况下,你在脚本中定义的任何变量都是全局变量。在函数外定义的变量可在函数内正常访问,

    #!/bin/bash 
    function dbl { 
     value=$[ $value * 2 ] 
    } 
    value=450
    dbl 
    echo "The new value is: $value" 
    
    #输出
    The new value is :900
    

    但也会产生问题

  • 局部变量:local 关键字保证了变量只局限在该函数中。如果脚本中在该函数之外有同样名字的变量,那么 shell 将会保持这两个变量的值是分离的

    • local temp = $[ $value + 5 ]

函数中的文件包含

[root@pre-host-work02 opt]# cat test1.sh 
#!/bin/bash 
test(){
    url='www.educoder.net'
}

[root@pre-host-work02 opt]# cat test2.sh 
#!/bin/bash 
hello(){
    echo "i am from test3.sh"
}


[root@pre-host-work02 opt]# cat test3.sh 
#!/bin/bash
               ##包含多个文件时,一行智能写一个文件,分开写。
. ./test1.sh   ##包含test1.sh  ./test1.sh表示当前目录下
. ./test2.sh   ##包含test2.sh  ./test2.sh表示当前目录下
echo "编程平台:$url"
hello

#结果如下:
[root@pre-host-work02 opt]# bash test3.sh 
编程平台:
i am from test3.sh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值