• [国嵌攻略][095][脚本编程技术]


    脚本定义

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

    脚本编程

    1.基本结构

    脚本由解析器和命令序列组成,#!/bin/bash指明了脚本由哪个解析器解析运行。创建脚本文件,并更改权限为可执行。注意:文本格式要转换为Unix格式。

    2.变量

    shell脚本允许用户设置和使用自己的变量,变量可以是数字或字符串,用户无需指定其类型,也无需在使用前定义。在使用变量时需要加美元符,在对变量赋值时不需要加美元符,和赋值号’=’之间不能有空格。

    a="hello world!"
    b=100
    
    echo "a is $a"
    echo "b is $b"

    3.参数

    shell脚本中可以使用命令行参数

    $#: 命令行参数个数

    $*: 命令行全部参数,各参数之间用空格隔开

    $0: 命令行第一个参数(shell文件名)

    $1: 命令行第二个参数

    $2: 命令行第三个参数

    echo "argc is $#"
    echo "argv is $*"
    echo "argv[0] is $0"
    echo "argv[1] is $1"
    echo "argv[2] is $2"

    4.运算

    shell脚本提供了一个专门的命令expr来计算数学表达式,例如expr 5+1,但是当要把计算的结果赋值给其他变量时,还必须使用反引号。例如var=`expr 5+1`

    x=1
    y=2
    z=`expr $x + $y`
    echo "x + y = $z"

    4.选择

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

    if [ condition ]    (注意:方括号左右两边必须有空格)
    then
        command
    else
        command
    fi

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

    相同        -eq         =

    不同        -ne         !=

    大于        -gt         >

    小于        -lt         <

    小于        -lt         <

    大于或等于  -ge

    小于或等于  -le

    为空        -z

    不为空      -n

    示例:

    比较整数a和b是否相等:if [ $a = $b ] ( 也可用 eq)

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

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

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

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

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

    注意:

    1. 在“[”和“]”符号的左右都留有空格

    2. “=”左右都有空格

    -e 文件已经存在

    -f 文件是普通文件

    -s 文件大小不为零

    -d 文件是一个目录

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

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

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

    示例:

    #!/bin/sh

    folder=/home

    [ -r "$folder" ] && echo "Can read $folder"   #当条件为真执行显示

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

    if [ $1 -gt $2 ]
    then
        echo "max is argv[1]"
    else
        echo "max is argv[2]"
    fi

    5.循环

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

    for var in list
    do
        command
    done

    示例:

    list="Sun Mon Tue Wed Thu Fri Sat"
    
    for day in $list
    do
        echo $day
    done

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

    while [ condition ]
    do
        command
    done
    num=0
    while [ $num -lt 7 ]
    do
        echo $num
        
        num=`expr $num + 1`
    done

    6.sed编辑器

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

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

    操作选项:

    -n:处理后只显示改行

    -e:进行多项编辑任务

    -i:直接修改读取内容,如果不使用该命令则不会修改源文件

    命令选项:

    p:打印匹配行

    a:新增

    c:替代一行

    d:删除一行

    s:替代一行中的某一部分

    示例:

    1.显示

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

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

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

    2.删除

    sed ‘2’d tmp.txt   删除第 2行

    sed ‘3,$’d tmp.txt   删除第 3行到最后一行, $:最后一行

    3.查询

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

    4.代替

    sed ‘1c Hi’ tmp.txt 第 1行代替为Hi

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

    5.插入

    sed -i ‘$a bye’ tmp.txt 在最后一行插入bye

    7.awk分析器

    awk是一个强大的文本分析工具,它能把文件逐行读入,比空格为默认分割方式将每行分割给多个字段。

    使用方法:

    awk ‘pattern + action’ filename

    pattern:查找的内容

    action:执行的操作

    示例:

    1.查看last命令显示的第一列

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

    2.查看cat命令显示的以’:’分割的第一行

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

    3.查看/etc/passwd文件显示的以’:’分割的,并且第一列等于”root”的所有列

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

    shell.sh

    #!/bin/bash
    
    #变量
    a="hello world!"
    b=100
    
    echo "a is $a"
    echo "b is $b"
    
    #参数
    echo "argc is $#"
    echo "argv is $*"
    echo "argv[0] is $0"
    echo "argv[1] is $1"
    echo "argv[2] is $2"
    
    #运算
    x=1
    y=2
    z=`expr $x + $y`
    echo "x + y = $z"
    
    #选择
    if [ $1 -gt $2 ]
    then
        echo "max is argv[1]"
    else
        echo "max is argv[2]"
    fi
    
    #循环
    list="Sun Mon Tue Wed Thu Fri Sat"
    
    for day in $list
    do
        echo $day
    done
    
    num=0
    while [ $num -lt 7 ]
    do
        echo $num
        
        num=`expr $num + 1`
    done
  • 相关阅读:
    园友五一快乐
    silverlight 2.0 入门教程(三)
    AJXA控件示例之   Accordion
    LINQ学习入门教程(一)
    泛型学习笔记
    梆定一个方法并把数据库中的值作为参数
    翻译IP地址转换成IP Number并得到国家
    vs 2005中解决找不到模板项
    silverlight 入门学习(二)
    最近的学习计划
  • 原文地址:https://www.cnblogs.com/d442130165/p/5235517.html
Copyright © 2020-2023  润新知