精华内容
下载资源
问答
  • shell基本知识

    2018-09-10 20:51:03
    shell知识点,有关Linux shell脚本的基本知识 有代码解释
  • shell 基本知识

    2020-02-11 15:41:47
    文章目录shell介绍使用方法 shell介绍 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写...

    shell介绍

    Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
    Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

    Linux 的 Shell 种类众多,常见的有:

    Bourne Shell(/usr/bin/sh或/bin/sh)
    Bourne Again Shell(/bin/bash)
    C Shell(/usr/bin/csh)
    K Shell(/usr/bin/ksh)
    Shell for Root(/sbin/sh)
    

    Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

    在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash

    使用方法

    shell 变量
    定义变量时,变量名不加美元符号

    name="zhangsan"
    

    使用一个定义过的变量,只要在变量名前面加美元符号即可

    your_name="tom"
    echo $your_name
    

    字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。 单引号字符串的限制:

    单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
    

    双引号的优点:

    双引号里可以有变量
    双引号里可以出现转义字符
    
    name="world"
    # 使用双引号拼接
    greeting="hello, "$name" !"
    greeting_1="hello, ${name} !"
    echo $greeting  $greeting_1
    # 使用单引号拼接
    greeting_2='hello, '$name' !'
    greeting_3='hello, ${name} !'
    echo $greeting_2  $greeting_3
    
    hello, runoob ! hello, runoob !
    hello, runoob ! hello, ${name} !
    

    获取字符串长度

    string="hello"
    echo ${#string} #输出 5
    

    提取子字符串

    string="hello world"
    echo ${string:1:4} # 输出 ello
    

    在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

    array_name=(value0 value1 value2 value3)
    

    读取数组元素值的一般格式是:

    valuen=${array_name[n]}
    

    使用 @ 符号可以获取数组中的所有元素,例如:

    echo ${array_name[@]}
    

    Shell 注释
    单行注释
    以 # 开头的行就是注释,会被解释器忽略
    多行注释

    多行注释还可以使用以下格式:

    :<<EOF
    注释内容...
    注释内容...
    注释内容...
    EOF
    

    shell 传递参数
    我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推

    特殊字符

    参数处理 说明
    $# 传递到脚本的参数个数
    $* 以一个单字符串显示所有向脚本传递的参数。
    如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
    $$ 脚本运行的当前进程ID号
    $! 后台运行的最后一个进程的ID号
    $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
    如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
    $- 显示Shell使用的当前选项,与set命令功能相同。
    $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

    Shell 基本运算符
    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

    #!/bin/bash
    val=`expr 1 + 1`
    echo "两数之和为 : $val"
    

    Shell 流程控制
    如果else分支没有语句执行,就不要写这个else。
    if else
    if

    if 语句语法格式:

    if condition
    then
        command1 
        command2
        ...
        commandN 
    fi
    

    if else 语法格式:

    if condition
    then
        command1 
        command2
        ...
        commandN
    else
        command
    fi
    

    for 循环

    与其他编程语言类似,Shell支持for循环。

    for循环一般格式为:

    for var in item1 item2 ... itemN
    do
        command1
        command2
        ...
        commandN
    done
    

    while 语句

    while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:

    while condition
    do
        command
    done
    

    case

    Shell case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

    case 值 in
    模式1)
        command1
        command2
        ...
        commandN
        ;;
    模式2)
        command1
        command2
        ...
        commandN
        ;;
    esac
    

    Shell 函数

    linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

    shell中函数的定义格式如下:

    [ function ] funname [()]
    
    {
    
        action;
    
        [return int;]
    
    }
    

    Shell 输入/输出重定向

    command > file 将输出重定向到 file。
    command < file 将输入重定向到 file。
    command >> file 将输出以追加的方式重定向到 file。
    n > file 将文件描述符为 n 的文件重定向到 file。
    n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
    n >& m 将输出文件 m 和 n 合并。
    n <& m 将输入文件 m 和 n 合并。
    << tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

    /dev/null 文件

    如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

    $ command > /dev/null
    
    展开全文
  • shell 基本 知识

    2021-03-08 20:13:08
    基本参数 e filename 如果 filename存在,则为真 如: [ -e /var/log/syslog ] -d filename 如果 filename为目录,则为真 如: [ -d /tmp/mydir ] -f filename 如果 filename为常规文件,则为真 如: [ -f /usr/bin...

    基本参数

    1. e filename 如果 filename存在,则为真 如: [ -e /var/log/syslog ]
    2. -d filename 如果 filename为目录,则为真 如: [ -d /tmp/mydir ]
    3. -f filename 如果 filename为常规文件,则为真 如: [ -f /usr/bin/grep ]
    4. -n 若字符串不为0 - true [=n “$a”]
    5. cut -d ‘-’ -f1
    6. mkdir -p :递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
    7. chmod +x 给执行权限
    cut -f1 -d'-' 以'-' 为分隔符,取第一个字段
    
    $ uname -rs|sed 's/ //g'|cut -f1 -d'-'   (-f1切割开的第一块区域- f2第二块区域  -d'-'自定义分隔符为-
    
    1. $@:表示所有脚本参数的内容   $#:表示返回所有脚本参数的个数。 $0
      变量 含义
      $0 当前脚本的文件名
      $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
      $# 传递给脚本或函数的参数个数。
      $* 传递给脚本或函数的所有参数。
      $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到。
      $? 上个命令的退出状态,或函数的返回值。
      $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。

    基本命令

    创建
    touch 创建文件
    mkdir 创建目录

    sed

    sed的使用方法

    https://blog.csdn.net/wdz306ling/article/details/80087889

    1.命令行指定sed指令对文本进行处理:
       sed +选项  ‘指令’ 文件
    2.将sed指令保存到文件中,将该文件作为参数进行调用:
       sed   +选项  -f  包含sed指令的文件  文件
    
    sed -n '2p' file 打印file第2行  
    -n 只显示匹配处理的行
    
    sed '2,$p'  打印从第一行到最后一行
    
    

    语法

    路径

    要用‘/’,如G:/anhang/xxx.x

    if

    if 
    elif
    	then
    fi
    
    if test ${#a[@]} -eq 0
    then 
      echo
    fi
      
    if [[ "$a" == *".zip"* || "$a" == *".rar"* ]]
    

    ¥() 和 ‘ ’ 命令变量替换

    变量

    IFS(Internal Filed Separator-内容字段分隔符)

    #获取字符串的长度 echo ${#str}
    
    1 查看IFS的值
    echo "$IFS"
     
    echo "$IFS"|od -b
    
    0000000 040 011 012 012  
    0000004
    转二进制,"040"-空格,"011"-Tab,"012"-换行符"\n" 。最后一个 012 是因为 echo 默认是会换行的。
    
    2 实际中的应用
    #!/bin/bash
    OLD_IFS=$IFS #保存原始值
    IFS="" #改变IFS的值
    IFS=$OLD_IFS #还原IFS的原始值
    
    
    

    file=$1

    if [ "KaTeX parse error: Expected '}', got '#' at position 6: {file#̲#*.}"x = "css"x…{file##*.}"x = "js"x ];then

    do something
    

    fi
    复制代码
    注意:

    1> 提取文件后缀名: ${file##*.}

    ##是贪婪操作符,从左至右匹配,匹配到最右边的.号,移除包含.号的左边内容。
    

    这里可以参考 http://www.1987.name/264.html

    2> 是=,而且其两边有空格,如果没有空格,会报错

    3> 多加了x,是为了防止字符串为空时报错。

    双引号里,可以有变量
    单引号里,变量必须再+单引号
    变量 直接用$+name

    写操作会自动创建文件
    echo ${data} >> ${sourcePath}

    展开全文
  • Shell 基本知识

    2019-07-12 17:35:00
    本机有多少我们可以使用的SHELL类型存在: /etc/shells 文件中 一般有如下几种:/bin/sh (已经被/bin/bash替换)  /bin/bash (就是Linux默认的shell)  /bin/tcsh (整合C shell,提供更多的功能)  /bin/csh...

    本机有多少我们可以使用的SHELL类型存在:   /etc/shells  文件中

    一般有如下几种:/bin/sh  (已经被/bin/bash替换)

            /bin/bash  (就是Linux默认的shell)

            /bin/tcsh   (整合C shell,提供更多的功能)

            /bin/csh   (已经被上面的tcsh所替换) 

    1. type 【-tpa】 name  :不加任何参数会显示name是外部命令还是bash内部的命令

    -t 将那么以下面的字眼显示它的意义:

       file:表示外部命令

      alias:表示别名设置的命令

      builtin:表示为bash内置的命令功能

    -p 后面接外部命令是会显示完整的路径和文件名

    -a 会由PATH变量定义的路径中,将命令列出来

    2. \ (反斜杠) 如果一行的命令有些长,可以用[ \+Enter ]这个来转义到下一行继续数据

    ctrl+u  从光标向前删除命令串   ctrl+k  是向后删除

    ctrl+a 移动光标到行首  ctrl+e  移动光标到行尾

    3. 变量

    echo $HOME  or echo ${HOME}   查看HOME的变量

    设置变量规则:变量与变量内容以一个等号连接,等号两边不能直接接空格,变量名只能是英文字母与数字,开头字符不能是数字,变量内容有空格可以使用单引号或双引号。

    需要借用其他命令的结果时,可以使用反单引号 或者$()      例如:  cd /lib/modules/$(uname -r)/kernel

    扩增变量内容时,"$变量名" or  ${变量名}   例如:PATH=${PATH}:/home/bin

    4. read 读取来自键盘输入的变量值

    read -pt variable

    -p 后面是提示字符  -t是等待的秒数  超时会自动略过

    5.declare, typeset

    都是声明变量的类型

    declare -aixr variable    -a 定义变量为数组类型  -i定义变量为整数类型  -x定义变量变为环境变量  -r定义变量为readonly 该变量不能改,也不能被unset

     

    转载于:https://www.cnblogs.com/20e8/p/11177484.html

    展开全文
  • Shell基本知识

    2018-08-20 17:23:26
    什么是Linux的Shell脚本和怎么执行脚本? //https://blog.csdn.net/sunxiwang/article/list/2?t=1 shell中的判断与循环 什么是Shellshell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制...
    1. 什么是LinuxShell脚本和怎么执行脚本?

    //https://blog.csdn.net/sunxiwang/article/list/2?t=1

    shell中的判断与循环

    • 什么是Shell

    shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括lscdpwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。

    二、什么是脚本?

    脚本就是由Shell命令组成的文件,这些命令都是可执行程序的名字,脚本不用编译即可运行。它通过解释器解释运行,所以速度相对来说比较慢。

    三、Linux中有哪些脚本解释器?

    dashbash两种,但dash没有bash功能全面,所以通常使用bash。可以通过命令来查看系统中的脚本解释器ls – l/bin/*sh

         https://img-blog.csdn.net/20171126121330582?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

    • 怎么执行脚本文件?

    先创建一个脚本文件 script.sh  后缀名是 .sh

    #!/bin/bash

    echo "this is the first shell script"

    注意:执行之前首先要为脚本文件添加可执行权限,不然就得用root权限才能执行!

    添加可执行权限: chmod  +x  script.sh   回车

     <1>第一种执行方式

    dash/bash   script.sh    回车

    <2>第二种执行方式

     ./script.sh     回车

     这两中执行方式有什么区别呢?

      区别:第一种方式,使用/bin/sh所指向的shell解释器来执行脚本文件

    第二种方式,它默认使用/bin/sh所指向的shell解释器来执行脚本文件,前提是脚本文件中未指定解释器。但如果在脚本文件中指定了使用哪种脚本解释器,那么它就不管/bin/sh指向哪个脚本解释器,而是使用脚本文件中所制定的那个脚本解释器。

    在脚本文件中指定脚本解释器: #!/bin/bash

    <3>第三种执行方式

     指定脚本文件的绝对路径,即可执行

      举例 /home/liutao/LinuxStudy/shellStudy/script.sh  回车

    这种执行方式选择使用的脚本解释器和第二种相同。

    执行脚本文件后输出截图

                https://img-blog.csdn.net/20171126121203619?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

    1. Shell脚本的基本语法(一) if判断、for循环、while循环和until循环

    注释

           Shell中的注释标志是井号 "#",除了脚本文件第一行的#不是注释之外,其他地方出现#,则说明#开始,到本行的末尾都是注释

    指定脚本解释器

           一般每个Shell脚本文件的第一行都是指定脚本解释器

           #!/bin/bash       指定本脚本文件使用bash脚本解释器解释执行

    if 判断语法

           <1>、判断大小

         首先Shell中判断两个数字大小的方式:

                  -gt(大于)  -lt(小于)  -eq(等于)  -le(小于等于)  -ge(大于等于)

           判断两个字符串的方式:

                  >(大于)    <(小于)   ==(等于)   >=(大于等于)   <=(小于等于)

           <2>、通过实例来描述if语法

     

    https://img-blog.csdn.net/20171126133100461?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

    1.if语句

    • shell中的if语句结构如下,它通过判断command1的返回值,若0(即命令成功执行)则执行command2command3;若1则不执行

    if commandA

    then

        command1

        command2

    fi

    #另一种风格的写法

    if commandA ; then

        command1

    command2

    fi

    1

    • 当然shell中也有else,还有elseif,用法分别如下:

    if commandA ; then

        command1

    else

        command2

    fi

     

    if commandA ; then

        command1

    elif commanB ; then

        command2

    elif commandC ; then

        command3

    fi

    • 当需要多次判断时,也可用switch case来替代if else

    case $USR in

    root)

        echo root

        echo oh!;;

    jack)

        echo jack;;

    peter | ben)            #满足peterben

        echo hah! hah!;;

    *)                      #星号代表默认情况

        echo error;;

    esac

    2.test语句

    • test命令是if语句的好伴侣,常用来判断条件是否满足,满足返回0,不满足返回1test可以用来比较:数值、字符串、文件/路径。常见用法为:

    if test condition ; then       #(“ ; 作为分隔符, then语句换行可将分号; 省略)

        commands

    fi

    #bash支持的另一种格式,本质也是调用了test,千万要注意在condition和方括号之间加空格

    if [ condition ] ; then

        commands

    fi

    • test用于数值比较时,基本格式为var1 参数 var2,如下,具体参数有很多,可以上网查

    if [ $var1 -eq $var2 ] #判断var1var2变量值是否相等

    if [ $var1 -gt 2 ] #判断var1的变量值是否大于2

    • 1
    • test用于字符串比较时,基本格式也为var1 符号 var2,此外还可以使用[[ ]]来使用正则匹配

    if [ $string1 = $string2 ] #判断变量string1string2值是否相等

    if [ $USR = !root ] #判断变量USR值是否不等于root

    if [[ $USR == r* ]] #判断变量USR值是否以字母r开头

    • test用于判断文件和目录的状态时,基本格式为参数 filepath如下,具体参数有很多,可以上网查

    if [ -d $MYPATH ] #判断位于$MYPATH的文件是否存在,并且是个目录

    if [ -e $MYPATH ] #判断位于$MYPATH的文件是否存在

    if [ -r $MYPATH ] #判断位于$MYPATH的文件是否可读

    if [ -x $MYPATH ] #判断位于$MYPATH的文件是否可执行

    • test 还可以判断一个变量是否有值

    if [ -z "$USR" ] #判断变量USR长度是否为零

    if [ -n "$USR" ] #判断变量USR长度是否非零

    • 对于复合判断语句shell中使用&&||来表示,尤其需要注意的是,shell中以命令返回0为真,1位假,故&&||操作以逻辑真假为准,不再以数值上的01为准

    if [ condition1 ] && [ condition2 ]

    if [ condition1 ] || [ condition2 ]

     

    • 此外&&还能用来作为简易版本的if语句,左边的命令返回真(即返回0),右边的命令才被执行
    • [ $? -ne 0 ] && mk_error "build rootfs Failed" && return 1

      3for循环语法

             <1>、第一种循环方式

       https://img-blog.csdn.net/20171126134208680?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

            <2>、第二种循环方式

          https://img-blog.csdn.net/20171126134714743?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

      <3>、第三种循环方式

      https://img-blog.csdn.net/20171126135204275?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

      在此详细说几种算奇数和的方法:

      for i in {1..100..2}

      do

             let "sum+=i"

      done

      //

      for i in $(seq 1 2 100)

      do

            let "sum+=i"

      done

       <4>第四种循环方式

      https://img-blog.csdn.net/20171126135756992?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center

      类似C语言的风格   ::这种用法与C语言一样,就不在多说

      for((expression1;expression2;expression3))

      do

            循环体

      done

      4while循环语法

      https://img-blog.csdn.net/20171126140304850?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

      5until循环语法

             until与其他循环不同,它是判断表达是为假时进行循环。而其他循环是判断条件为真时进行循环,条件为假则跳出循环。(此循环并不常用)

      https://img-blog.csdn.net/20171126140957722?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

    •  Shell脚本的基本语法(二) 预定义特殊字符、case语句和函数调用
    • 一、Shell中有许多预定义的特殊字符:

       

    •      $n   :n是一个数字(大于10则用大括号括起来,${12}),代表程序的第n个参数

      (注释:$0代表当前使用的shell、在命令行环境下表示当前shell的名称,在脚本中表示当前执行的脚本名称。

      $1...$9:在脚本中用来表示位置参数,即脚本执行时所带的第几个参数的值。 )

             $#   :总共有多少个参数

             $*    :指所有的参数

             $@  :指所有的参数

             $?   : 上次命令执行的返回值

             注意:我们发现$*和$@的意思是一样的,其实它们两个有一个很大的区别:

                        $*  将所有参数放在一块内存中,以空格分隔

                        $@ 将每个参数分别放在一块内存中,相当于字符串数组

      https://img-blog.csdn.net/20171126143221257?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

      二、case语句,shell中的开关语句

              shell中的开关语句有许多地方和C语言是类似的我们可以通过对比两个就可发现其相似之处。

      https://img-blog.csdn.net/20171126144509751?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

       

      不同之处:

      C语言中每个开关结束时,必须以break跳出。如果不跳的话继续向下执行。

      而在shell中每个开关是以双分号;;来跳出的。如果不跳则出现语法错误。

      三、shell中的函数调用

      shell中的函数可以有参数,也可以有返回值。

      但是它没有形参列表,没有返回值类型,而且取返回值的方式也与众不同。

      https://img-blog.csdn.net/20171126145233579?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

      4Shell脚本实例(一) 监控一个程序的运行情况

       

    • 一、问题描述:

          监控指定程序是否运行,如果程序没有运行,那么启动程序。

      二、解决思路:

          <1>、我们判断一个程序是否运行,可以通过查看该程序的进程信息来判断。

          例: 判断程序 01FirstScript.sh 是否在运行;

           命令:ps -ef  |  grep  01FirstScript.sh | grep  -v  grep

           结果分析: 如果命令执行之后有输出,即输出进程信息。则说明程序正在运行,如果执行之后没有输出,则说明程序没有运行

           <2>、如何监控指定的程序?

           我们可以将指定程序的名字作为监控程序的参数传递进去,在内部实现时,通过死循环来不断监控

           <3>、如果程序未运行,如何启动程序?

           在判断程序为运行时,如果指定程序名是监控程序的第一个参数。可以通过下面命令启动指定程序

      sh  $1

      三、脚本代码实现:

      #!/bin/bash

      #进程监控脚本

      #功能需求: 监控程序是否运行,如果程序没有运行,那么启动程序。

      while [ true ]

      do

               pro=$(ps -ef | grep "$1" | grep -v grep | grep -v "$0")

               #过滤出目标进程信息,如果pro为空串说明目标进程未运行

              #反向过滤掉grep进程 和 本进程信息, 因为这两个进程信息中包含目标进程的名字

               if [ -z "$pro" ]

               then

                        echo "程序未启动,重新启动程序"

                         sh $1    #重新启动指定程序

               else

                        echo "程序正在运行..."

               fi

               sleep 0.5

      done

      四、运行结果截图:

      https://img-blog.csdn.net/20171126162555704?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU3VuWGlXYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast

      五、程序运行过程说明:

           <1>、一开始指定程序并未运行

           <2>、然后监控进程检测指定程序未运行,随即启动指定程序

           <3>、指定程序开始运行

           <4>、在中途使用kill命令终止指定程序进程

           <5>、监控进程再次检测到指定程序未运行,随即启动指定程序

           <6>、指定程序开始运行

      程序调试心得:

      bash  my_1_shell.sh  my_first_shell.sh

      bash  ./my_1_shell.sh  ./my_first_shell.sh     #(./指定当前路径)

       

      注释:启动“my_1_shell.sh”判别程序“my_first_shell.sh”是否启动,如果没有启动就启动“my_first_shell.sh”程序;

      bash ./my_first_shell.sh | bash ./my_1_shell.sh

       

      注释:先启动程序“my_first_shell.sh”,利用“my_1_shell.sh”判定“my_first_shell.sh”程序是否启动;

       

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,181
精华内容 872
关键字:

shell基本知识