• 《信息安全系统设计与实现》学习笔记3


    第10章 sh编程

    教材学习内容总结

    本章主要讲了sh脚本的相关知识,包括sh脚本的介绍,sh脚本与C程序的对比,如何编写sh脚本以及如何调用sh函数

    一、sh 脚本

    sh 脚本是一个包含sh 语句的文本文件,命令解释程序sh要执行该语句。

    1、创建一个mysh

    #!  /bin/bash
    # comment line
    echo hello
    

    使用chmod +x mysh 使其可执行

    2、命令行参数

    在sh脚本中,可以通过位置参数$0、$1、$2等访问命令行参数。其中特殊字符$表示替换,如果需要使用$字符,需加上单引号或者反引号。

    $#=命令行参数$1到$n的数量
    $*=所有命令行参数,包括$0
    $S=执行sh的进程PID
    $?=最后一个命令执行的退出状态(成功为0,否则为非0)
    

    二、sh命令

    1、内置命令

    .file:读取并执行文件。
    break [n]:从最近的第n个嵌套循环中退出。
    cd [dirname]: 更换目录。
    continue[n]:重启最近的第n个嵌套循环。
    eval [arg...]:计算一次参数并让sh执行生成的命令。
    exec [arg...]:通过这个sh执行命令,sh将会退出。
    exit [n]:使sh退出,退出状态为n。
    export [var…]:将变量导出到随后执行的命令.
    read [var...]:从stdin 中读取一行并为变量赋值。
    set [arg...]:在执行环境中设置变量。
    shift:将位置参数$2 $3...重命名为 $1 $2...。
    trap [arg] [n]:接收到信号n后执行参数。
    umask [ddd]:将掩码设置为八进制数 ddd 的。
    wait pid]: 等待进程 pid,如果没有给出pid,则等待所有活动子进程。
    

    2、Linux命令

    echo命令:将参数字符串作为行回显到stdout。
    expr命令:间接更改sh变量的值。
    管道命令:作为过滤器。
    实用命令:
    axk:数据处理程序。
    cmp:比较两个文件。
    comm:选择两个排序文件共有的行。
    grep:匹配一系列文件的模式。
    diff:找出两个文件的差异。
    join:通过使用相同的键来连接记录以比较两个文件。
    sed:流或行编辑命令。
    sort:排序或合并文件。
    tail:打印某个文件的最后口行。
    tr:一对一宇符翻译。
    uniq:从文件中删除连续重复行。
    

    三、sh控制语句

    sh支持多种控制语句,可类比C语言的语句。

    1、if-else-if语句

    C语言的if-else-if语句每个语句必须在单独的一行上,而sh允许多个语句在同一行上
    语法格式:

        if condition1
        then
            command1
        elif condition2 
        then 
            command2
        else
            commandN
        fi
    

    2、for语句

    语法格式:

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

    命令行格式:

        for var in item1 item2 ... itemN; do command1; command2… done;
    

    3、while语句

    while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。
    语法格式:

        while condition
            do
                command
            Done
    

    4、untill-do语句

    until 循环执行一系列命令直至条件为 true 时停止。
    until 循环与 while 循环在处理方式上刚好相反。一般 while 循环优于 until 循环,但在某些时候—也只是极少数情况下,until 循环更加有用。

    语法格式:

        until condition
        do
            command
        done
    

    5、case语句

    case为多选择语句,与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case ... esac 语句,esac(就是 case 反过来)作为结束标记。
    可以用 case 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

    语法格式如下:

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

    6、continue和break语句

        break命令允许跳出所有循环(终止执行后面的所有循环)。
        continue命令不会跳出所有循环,仅仅跳出当前循环。
    

    四、I/O重定向

        >file:stdout转向文件,如果文件不存在,将会创建文件。
        >>file:stdout追加到文件。
        <file:将文件用作stdin;文件必须存在并具有r权限。
        <<word:从“here”文件中获取输入,直到只包含“word”的行。
    

    五、sh函数

    1、sh函数的定义

    func()
    {
    # function code
    }
    

    由于sh逐行执行命令,所以必须在任何可执行语句之前定义sh脚本中的所有函数。而在sh函数中无法声明函数原型。

    2、通配符

    星号(*)通配符:可扩展到当前目录中的所有文件。
    ?通配符:查询某文件名中的字符。
    []通配符:查询文件名中一对[]中的字符。
    

    3、调试脚本

    sh脚本由带有-x选项的子sh运行以进行调试。

        eg:bash -x mysh
    

    子sh将在执行命令之前显示要执行的每个sh命令,包括变量和命令替换。它允许用户跟踪命令执行。如果出现错误,sh将在错误行上停止并显示错误消息。

    六、实践

    创建一个sh文件

    运行sh文件

    参考链接:https://www.runoob.com/w3cnote/shell-scripting.html

    七、遇到的问题

    1、openeuler系统安装增强功能
    参考https://www.jianshu.com/p/e61352770864在openeuler系统(deepin)安装增强功能
    由于版本不同,部分文件路径需自己调整

    检查报错 /var/log/vboxadd-setup.log,但找不到具体解决办法

  • 相关阅读:
    select SCOPE_IDENTITY()用法
    SQL 2005 with(nolock)详解
    .NET4进行COM互操作导出数据到Excel
    Counterfeit Dollar 1013 pku
    Numbers that count 1016 PKU
    对局问题 ——取火柴问题(转)
    (a^b) mod c
    对局问题——放硬币问题(转)
    对局问题 ——取石子问题– 1堆(转)
    Follow My Logic 1048 PKU
  • 原文地址:https://www.cnblogs.com/daijunxi2019/p/15321386.html
Copyright © 2020-2023  润新知