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

转载于:https://www.cnblogs.com/xiehy/p/3867217.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值