AI智能
改变未来

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


1. 函数定义和使用

如何调用函数:

  • 直接使用函数名调用,可以将其想象成 Shell 中的一条命令
  • 函数内部可以直接使用参数
    $1、$2..$n
  • 调用函数:
    functon_name $1 $2
#!/bin/bashthis_pid=$$             # $$ 是执行这个脚本的子进程的pidps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/null     # 把$this_pid 过滤掉是为了防止这个脚本文件的名字中含有 \"nginx\"# echo $?                       # $? 上一条命令的执行结果if [ $? -eq 0 ];thenecho \"nginx 正在运行\"elseecho \"nginx 停止运行\"fi

2. 向函数传递参数

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

#!/bin/bashfunction calcu{# 需要先判断 $1, $2, $3result=`echo \"$1 $2 $3\" | bc`echo $result}calcu $1 $2 $3

调用

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

3. 函数返回值

1.使用 return 返回值

  • 使用return返回值,只能返回
    1-255

    的整数

  • 函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1;0表示成功,1表示失败
#!/bin/bashthis_pid=$$function is_nginx_running{ps -ef | grep nginx | grep -v grep | grep -v $this_pid &> /dev/nullif [ $? -eq 0 ];thenreturnelsereturn 1fi}is_nginx_running && echo \"nginx正在运行\" || echo \"nginx停止运行\"

2.使用 echo 返回值

  • 使用echo可以返回任何字符串结果
  • 通常用于返回数据,比如一个字符串值或者列表值
#!/bin/bashfunction get_users{users=`cat /etc/passwd | cut -d \":\" -f1`echo $users}user_list=`get_users`for u in $user_listdoecho $udone

4. 局部变量和全局变量

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

局部变量

  • 定义变量时,使用
    local

    关键字

  • 函数内和外若存在同名变量,函数内部变量会覆盖外部变量
#!/bin/bash# var1,var2 都是全局变量var1=\"hermione\"function test{var2=\"hogwarts\"}echo $var1echo $var2test                # 调用函数后,才能使 var2 生效echo $var2
#!/bin/bash# var1是全局变量, var2是局部变量var1=\"hermione\"function test{local var2=\"hogwarts\"}echo $var1echo $var2test                # 调用函数后,才能使 var2 生效echo $var2

5. 函数库

为什么要定义函数库

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

经验之谈

  • 库文件名的后缀是任意的,但一般使用.lib
  • 库文件通常没有可执行权限
  • 库文件无需和脚本在同级目录,只需在脚本中引用时指定
  • 第一行一般使用
    #!/bin/echo

    ,输出警告信息,避免用户执行

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Shell编程实战(二):函数的高级用法