2-27 shell脚本编程

(本节笔记的实验代码,在这里

1.  基本概念

      脚本是一个包含一系列命令序列的文本文件。当运行该脚本文件时,文件中包含的命令序列将得到自动执行。

 

2.  脚本编程技术

    2.1 基本结构

        #!/bin/sh

        ......

                                                                 』

    2.2 变量

    shell脚本允许用户设置和使用变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义。

//在赋值的时候,变量名前不需要加“$”,但在使用时要加上“$”。

//赋值号左右不能有空格

//注释用“#”开头

//在windows编辑的.sh文件有可能包含非Unix字符,需要用dos2unix工具进行格式转换(dos2unix可以通过RPM包安装)

 

        #!/bin/sh

        a="helloworld"

        b=5

        echo"A is:" $a

        echo"B is:" $b

                                                                 』

输出:  hello world

              5

    2.3 参数

    同C程序一样,shell脚本可以使用命令行参数

l  $#:传入脚本的命令行参数个数

l  $*:所有命令行参数值,在各个参数值之间留有空格

l  $0:命令本身(shell文件名)

l  $1:第一个命令行参数

l  $2:第二个命令行参数

        #!/bin/sh

        echo"number of var:" $#

        echo"value of vars:" $*

        echo"name of script:" $0

        echo"value of val1:" $1

        echo"value of val2:" $2

                                                                 』

输入:./shell.sha 3

输出:  number of var: 2

                valueof vars: a 3

                nameof script: ./shell.sh

                valueof val1: a

                valueof val2: 3

 

    2.4 数学计算

    shell脚本提供一个专门的命令“expr”来计算数学表达式,例如“expr 5 + 1”,但当要把计算结果赋值给某个变量的时候,必须使用反引号。

        #!/bin/sh

        var1=10

        var2=20

        var3=`expr$var2 / $var1`

        var4=`expr$var2 + $var1`

        echo"var3 is: "$var3

        echo"var4 is:" $var4

                                                                 』

输出:

        var3is: 2

        var4is: 30

 

    2.5 if语句

    shell脚本中最基本的流程控制语句为“if-then”,使用格式为:

    //方括号左右两边必须空格

    //“=”左右两边都要有空格

    if[ condition ]

    then

        commands

    else

        commands

    fi

 

    比较操作            整数操作        字符串操作

    相同                -eq             =

    不同                -ne             !=

    大于                -gt             >

    小于                -lt             <

    大于或等于          -ge

    小于或等于          -le

    为空                -z

    不为空              -n

    例如:

    比较整数a和b是否相等:    if [ $a = $b ]

    判断正数a是否大于正数b:   if[ $a -gt $b ]

    比较字符串a和b是否相等:  if [ $a = $b ]

    判断字符串a是否为空:      if[ -z $a ]

    判断正数变量a是否大于b:   if [ $a -gt $b ]

 

    文件的比较:

    -e  文件已经存在

    -f  文件是普通文件

    -s  文件大小不为零

    -d  文件是一个目录

    -r  文件对当前用户可以读取

    -w  文件对当前用户可以写入

    -x文件对当前用户可以执行

    例如:

    folder=/home

    [-r "$floder" ]&&echo"can read $folder"    #条件为真时执行

    [-f "$folder" ]||echo "this is not file"       #条件为假时执行

        #!/bin/sh

        var=10

        if[ $var -gt 5 ]

        then

            echo"the value is greater than 5"

        fi

                                                                 』

输出:var greater than 5

 

    2.6 for语句

    shell脚本提供for命令,用于创建类似C中的for循环,格式如下:

    forvar in list

    do

        commands

    done

 

        #!/bin/sh

        list="SunMon Tue Wed Thur Fri Sat"

        forday in $list

        do

            echo$day

        done

                                                                 』

输出:  Sun

        Mon

        Tue

        Wed

        Thur

        Fri

        Sat

 

    2.7 while语句

    shell脚本提供了while命令,用于创建类似C语言中while语句一样的循环,格式如下:

        whilecondition

        do

            commands

        done

        #!/bin/sh

        var=5

        while[ $var -gt 0 ]

        do

            echo$var

            var=`expr$var - 1`

        done

                                                                 』

输出:  5

        4

        3

        2

        1

 

    2.8 sed编辑器

    Sed(Stream Editor):流式编辑器又名行编辑器,每次只编辑一行,使用格式如下:

    sed[操作选项] '命令' 文件名

常用操作选项:

    -n:指定处理后只显示该行

    -e:进行多项编辑任务

    -i:直接修改读取的文件内容,而不是有屏幕输出

常用命令选项:

    p打印匹配行

    a新增

    c替代一行

    d删除定位行

    s替代一行中的某些部分

例如:

    1.显示

    sed-n '2p' tmp.txt             只显示第二行

    sed-n '1,3p' temp.txt          打印第一行到第三行

    sed-n '/mov/'p temp.txt        打印含mov的行

    2.删除

    sed'2d' tmp.txt                删除第二行

    sed'3,$d' tmp.txt              删除第三行到最后一行,“$”最后一行

    3.查询

    sed-n '/hello/p' tmp.txt       查询包括关键字hello的所有行

    4.代替

    sed'1c Hi' tmp.txt

    sed-n '/hello/p' tmp.txt | sed 's/hello/bird/g'

    5.插入

    sed-i '$d bye' tmp.txt #在最后一行插入bye

   

    2.9awk分析器

    awk是一个强大的文本分析工具,它吧文件逐行的读入,以空格为默认分隔符,将每行分割为多个字段,使用格式为:

    awi'{pattern + action}' filenames

    pattern:   要查找的内容

    action:    找到匹配内容是执行的命令

例如:

    last-n 5 | awk '{print $1}'

    cat/ect/passwd | awk -F ':''{print $1}'

    awk-F ':' '$1=="root"{print $0}' /ect/passwd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值