shell-函数

shell-函数

函数定义

通常shell函数有两种定义方式,如下代码中的fun1和fun2

 1 #!/bin/bash
 2 function fun1(){
 3     echo $1
 4     echo $2
 5 }
 6 
 7 fun2(){
 8     echo "hello"
 9 }
10 
11 fun1 1 2
12 fun2

 

说明

$n代表一个参数,表示传入的第n个参数

$#表示参数个数

$*表示传递的参数作为一个字符串显示

 

函数返回值

说明:shell脚本中,函数中的返回值有两种方式

1)return

只能返回1~255的整数,一般用来被其他调用获取状态,0表示成功,1表示失败

 

2)echo

可以返回任意字符串,通常用于返回数据

 

 1 function get_user_info(){
 2     user_info_temp="I am 20"
 3     echo ${user_info_temp}
 4 }
 5 
 6 user_info=`get_user_info`
 7 echo ${user_info}
 8 
 9 function get_nginx_running_status(){
10     this_script_pid=$$
11     #一直监控ngnix进程是否在运行
12 
13     ps -ef | grep ngnix | grep -v grep | grep -v ${this_script_pid} &> /dev/null
14     if [ $? -eq 0 ];then
15         echo "ngnix is runing well"
16           return 0
17     else
18         #启动ngnix进程
19         systemctl start ngnix
20         echo "ngnix is down, restart it ..."
21         return 1
22     fi
23 }

 

案例

1)编写一个shell脚本用来监控nginx进程,若nginx进程死掉,则重新启动该进程

 1 function is_nginx_running(){
 2     this_script_pid=$$
 3     #一直监控ngnix进程是否在运行
 4     while true
 5     do
 6         ps -ef | grep ngnix | grep -v grep | grep -v ${this_script_pid} &> /dev/null
 7         if [ $? -eq 0 ];then
 8             echo "ngnix is runing well"
 9             sleep 3
10         else
11             #启动ngnix进程
12             systemctl start ngnix
13             echo "ngnix is down, restart it ..."
14         fi
15     done
16 }

 

注意:

1)如果不想让日志在前端输出,可以通过nohup sh shell脚本名 &(将输出到nohup.out文件中)

2)执行 一条grep cmd有返回值时,$?为0,返回为1时则认为nginx程序已死掉

3)ps -ef | grep nginx 执行时它也会作为一个子进程在电脑中启动起来,对判定条件造成干扰

  ps -ef | grep nginx | grep -v grep 把grep去掉

4)systemctl stop nginx杀死nginx进程

      systemctl start nginx启动nginx进程

5)如果shell脚本名中含有nginx,执行脚本本身,脚本也会作为一个进程存在于系统中

6)$$为在执行就脚本过程中产生的子进程pid输出来,将脚本运行时产生的子进程过滤掉

 

函数库

将逻辑代码或将要复用的代码封装成文件,以便由其他脚本调用

库文件的后缀是任意的,但一般使用.lib

库文件一般没有可执行权限

第一行一般使用#!/bin/echo,输出警告信息,避免用户执行

posted @ 2019-12-08 23:45  可口可乐嗨  阅读(142)  评论(0编辑  收藏  举报
levels of contents