Shell编程实战(二):函数的高级用法

1. 函数定义和使用

如何调用函数:

  • 直接使用函数名调用,可以将其想象成 Shell 中的一条命令
  • 函数内部可以直接使用参数 $1、$2..$n
  • 调用函数:functon_name $1 $2
#!/bin/bash

this_pid=$$             # $$ 是执行这个脚本的子进程的pid

ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null     # 把$this_pid 过滤掉是为了防止这个脚本文件的名字中含有 "nginx"

# echo $?                       # $? 上一条命令的执行结果

if [ $? -eq 0 ];then    
        echo "nginx 正在运行"
else
        echo "nginx 停止运行"
fi

2. 向函数传递参数

写一个脚本,该脚本可以实现计算器的功能,可以进行±*/四种计算

#!/bin/bash

function calcu
{
        # 需要先判断 $1, $2, $3
        result=`echo "$1 $2 $3" | bc`
        echo $result
}

calcu $1 $2 $3

调用

[flw@nlp2 ~]$ sh calculate.sh 1 + 5
6

3. 函数返回值

1.使用 return 返回值

  • 使用return返回值,只能返回 1-255的整数
  • 函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1;0表示成功,1表示失败
#!/bin/bash

this_pid=$$

function is_nginx_running
{
        ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null
        if [ $? -eq 0 ];then
                return
        else
                return 1
        fi
}


is_nginx_running && echo "nginx正在运行" || echo "nginx停止运行"

2.使用 echo 返回值

  • 使用echo可以返回任何字符串结果
  • 通常用于返回数据,比如一个字符串值或者列表值
#!/bin/bash

function get_users
{
        users=`cat /etc/passwd | cut -d ":" -f1`
        echo $users
}

user_list=`get_users`

for u in $user_list
do
        echo $u
done

4. 局部变量和全局变量

  • 不做特殊声明,Shell中变量都是全局变量
  • Tips:大型脚本程序中慎用全局变量

局部变量

  • 定义变量时,使用 local 关键字
  • 函数内和外若存在同名变量,函数内部变量会覆盖外部变量
#!/bin/bash

# var1,var2 都是全局变量

var1="hermione"

function test
{
        var2="hogwarts"
}


echo $var1
echo $var2

test                # 调用函数后,才能使 var2 生效

echo $var2
#!/bin/bash

# var1是全局变量, var2是局部变量

var1="hermione"

function test
{
        local var2="hogwarts"
}


echo $var1
echo $var2

test                # 调用函数后,才能使 var2 生效

echo $var2

5. 函数库

为什么要定义函数库

  • 经常使用的重复代码封装成函数文件
  • 一般不直接执行,而是由其他脚本调用

经验之谈

  • 库文件名的后缀是任意的,但一般使用.lib
  • 库文件通常没有可执行权限
  • 库文件无需和脚本在同级目录,只需在脚本中引用时指定
  • 第一行一般使用 #!/bin/echo,输出警告信息,避免用户执行
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值