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
,输出警告信息,避免用户执行