zoukankan      html  css  js  c++  java
  • 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,输出警告信息,避免用户执行

  • 相关阅读:
    计算机
    产品经理
    Vue router-link路由不同的写法,不一样的效果
    elementui样式引入方法
    格式化启动盘win10
    删除mongdb中的数据库
    google浏览器快速清除历史记录
    js动画之弹球打砖块小游戏
    js动画之面向对象二
    js动画之面向对象一
  • 原文地址:https://www.cnblogs.com/marton/p/12008687.html
Copyright © 2011-2022 走看看