• shell语法


    一、基本语法:

    shell必须以#!/bin/sh开始。

    1.1、注释

        在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。

    1.2、管道

        管道 (|): 将一个命令的输出作为另外一个命令的输入。

        exp : ifconfig eth0 | awk -F '[ :]+' 'NR==2 {print $4}'

        将ifconfig的输出输入给awk,然后awk提取出在第二行的ip地址。

    1.3、重定向

        重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。

        >  : 写入文件并覆盖旧文件 。

        >> :  加到文件的尾部,保留旧文件内容。

    1.4、关键字

        if    then    elif    else    fi

        while    do    done    until    for    in

        break    continue    return

    二、变量:

        数值                      var=123

        字符串                   str="Hello world!"

        数值数组                 dArray=(2 4 6 8)

        字符串数组               sArray=(one two three four)

        打印整个数组            echo ${array[*]}

        得到数组长度            len=${#array[*]}

        打印数组中单个元素    echo ${array[0]}, echo ${array[1]}, echo ${array[2]},...

        修改数组中某个元素: array[2]="Hello"

        备注:1、赋值等号前后不得有空格;

                 2、单引号仅是字符串;如 echo '$str'    其打印为: $str

                 3、双引号可以包含变里;如 echo "$str"     其打印为:Hello world!

    三、语句:

    3.1、算术比较:

    算术比较

    结果

    expression1 –eq expression2

    如果两个表达式相等则结果为真

    expression1 –ne expression2

    如果两个表达式不等则结果为真

    expression1 –gt expression2

    expression1大于expression2则为真

    expression1 –ge expression2

    expression1大于等于expression2则为真

    expression1 –lt expression2

    expression1小于expression2则为真

    expression1 –le expression2

    expression1小于等于expression2则为真

    ! expression

    如果表达式为假则结果为真,反之亦然

    3.2、字符串比较:

    字符串比较

    结果

    string1 = string2

    如果两个字符串相同则结果为真("="前后有空格)

    string1 != string2

    如果两个字符串不同则结果为真("!="前后有空格)

    -n string

    如果字符串不为空则结果为真

    -z string

    如果字符串为null(一个空串)则结果为真

    3.3、文件条件:

    文件条件

    结果

    -d file

    如果文件是一个目录则结果为真

    -e file

    如果文件存在则结果为真。要注意的是,历史上-e选项不可移植,所以通常使用的是-f选项

    -f file

    如果文件是一个普通文件则结果为真

    -g file

    如果文件的set-group-id位被设置则结果为真

    -r file

    如果文件可读则结果为真

    -s file

    如果文件的大小不为0则结果为真

    -u file

    如果文件的set-user-id位被设置则结果为真

    -w file

    如果文件可写则结果为真

    -x file

    如果文件可执行则结果为真

     3.4、if 语句

         A、简单if语句:

         或者         

        B、分支if语句:

         或者          

        C、多分支if语句:

        

        D、复合条件:

        

        注意1:以上[ 条件 ]前后都要有空格;if与[ 条件 ]也要有空格。(这是shell的语法规定)

        注意2:当比较字符串时,= 和 !=的前后都有空格,若不加空格,则判断结果会出错;且

                   字符串变量需加双引号,这样做的目的是防止隐蔽的语法问题,如下:

                   if [ "$temp" = "yes" ]; then

                       语句 

                   fi

    3.5、if语句高级特性——双圆括号

        双圆括号命令支持将高级数学表达式放入比较中,如同C语言一样编写。示例如下:

          结果:  

    3.6、if语句高级特性——双方括号

        双方括号命令提供了针对字符串比较的高级特性。 

    3.7、while语句:

         或者                 或者        

    3.8、C语言风格的for语句:加上双圆括号后,就可以如同C语言一样编写,示例如下:

          结果:  

    四、函数:

        函数根据返回值的类型可分为两种,具体如下:

        4.1、返回值为0~~255这间的数值

        

        4.2、返回值为字符串,字符串中可以包含空格

        

        说明:当要求返回值为数值时,则函数里边得用 retrun返回;当要求返回值为字符串时,则函数里边得用 echo返回。

    五、正则与命令:

        grep : 与正则表达式配合可实现查找类工作。

        exp : ps -ef | grep wpa_supplicant | grep -v "grep" 

        说明:查找 wpa_supplicant 进程是否存活。

        awk : 可实现提取想要的字符功能。

        exp : ps -ef | grep wpa_supplicant | grep -v "grep" | awk '{print $2}'

        说明:提取 wpa_supplicant 进程的PID。

        exp : grep '^onlineMode=' conf.conf | awk -F = '{print $2}'

        说明:首先在conf.conf文件中查找“onlineMode=”的行,然后由awk提取“=”后的字符。

        sed : 可实现按要求修改字符功能:

        exp : Mac=`echo $line | grep "Cell" | awk '{print $5}' | sed -e 's/:/-/g'`

        说明:首先在变量line中查找“Cell”,然后再提取第五项,再然后将第五项中的“:”改为“-”,最后将修改的值存入变量Mac中。

        exp : sed -i '/nameserver/'d /etc/resolv.conf

        说明:删除/etc/resolv.conf文件中包含"nameserver"字段的行。

        exp : sed -i "s/111/222/g" conf.conf

        说明:将conf.conf文件中的111替换成222,并写回文件。

        exp : sed -e "s/111/222/g" conf.conf

        说明:将111换成222,但不写回文件。这就是"-e"和"-i"参数的差别:"-e"不修改文件,只是打印输出显示改了。

    六、调试

        sh -x test.sh

  • 相关阅读:
    applications_manager很经典的应用性能监控工具
    eureka分区的深入讲解
    Spring Boot 微服务应用集成Prometheus + Grafana 实现监控告警
    solidity 学习笔记(3) 函数修饰符/继承
    以太坊
    solidity 学习笔记 2 (二维数组)
    solidity学习笔记
    女巫攻击---针对联盟链的攻击
    区块链知识点
    [转]PBFT 算法详解
  • 原文地址:https://www.cnblogs.com/xiehy/p/3867217.html
Copyright © 2020-2023  润新知