• 第三周学习笔记(第十章)


    第10章 sh编程——教材知识点归纳

    摘要:本章介绍了sh脚本;比较sh脚本与c程序;详细说明了如何编写sh脚本,解释了sh控制语句;说明了如何编写sh函数以及使用参数调用sh函数;最后举例说明了sh脚本的广泛应用。
    10.1sh脚本与c程序
    Sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。若行是可执行命令且位内置命令,则sh可直接执行。否则,会复制一个子进程来执行。C程序必须先编译链接到二进制,后通过主sh子进程运行。Sh脚本每个变量都是字符串,且不需要main函数。Sh脚本中,第一个可执行语句是程序的入口点。
    10.2命令行参数
    前十个,$0$9,之后的用$(10)$(n),n>10
    $#=命令行参数$1到$n的数量
    $*=所有命令行参数,包括$0
    $S=执行sh的进程pid
    $?=最后一个命令执行的退出状态(如果成功,则为0,否则为非0)

    10.3 sh变量
    sh有许多内置变量,如PATH、HOME、Term等。除了内置变量外,用户还可以使用任何符号作为sh变量。不需要声明。所有的sh变量值都是字符串。未赋值的sh变量是NULL字符串。sh变量可用以下方法设置或赋值:

    variable=string # NOTE: on white spaces allowed between tokens
    10.5 sh中的引号
    sh有许多特殊字符,如$、/、*、>、<等。要想把它们用作普通字符,可使用\或单引号来引用它们。

    10.6 sh语句
    sh语句包括所有Unix/Linux命令,以及可能的I/O重定向。
    10.7 sh命令
    sh有许多内置命令,这些命令由sh执行,不需要创建一个新进程。下面列出一些常用的内置sh命令。

    .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,则等待所有活动子进程。
    10.8 sh控制语句
    10.8.1 if-else-fi 语句

    重要:sh中,0为真,非0为假

    For语句

    While语句

    Until-do语句

    Case语句

    10.13~10.15 sh中的通配符、命令分组、eval语句
    sh中的通配符:
    *是通配符,可以配位所有字符。
    ?可以配对对应数量的字符。
    [xyz]配对中括号内的字符。

    sh命令分组
    类似于C语言,sh脚本可用{}和()进行命令分组。{}中语句在相同的环境下执行,()在subsh进程中执行,不影响sh的工作目录。

    eval语句
    eval是sh一个内置命令,对其后的参数进行一次计算。
    如a="cat file.txt"时,直接写$a会出错,而eval $a就可以执行a。

    实践部分

    使用sh命令实现猜数字的功能:
    代码如下:
    !/bin/bash

    脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
    猜小了或猜大了,直至用户猜对脚本结束。

    RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
    使用取余算法将随机数变为 1‐100 的随机数
    num=$[RANDOM%100+1]
    echo "$num"

    使用 read 提示用户猜数字
    使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
    ‐lt(小于),‐le(小于等于)
    while :
    do
    read -p "计算机生成了一个 1‐100 的随机数,你猜: " cai
    if [ $cai -eq $num ]
    then
    echo "恭喜,猜对了"
    exit
    elif [ $cai -gt $num ]
    then
    echo "Oops,猜大了"
    else
    echo "Oops,猜小了"
    fi
    done

    用shell脚本输入一个小于100的整数,并计算从1到该数之间所有整数的和
    代码截图:

    运行截图:

  • 相关阅读:
    Elasticsearch:使用function_score及soft_score定制搜索结果的分数
    Elasticsearch:Elasticsearch中的refresh和flush操作指南
    Elasticsearch:top_hits aggregation
    Linux 容器的使用
    编译Linux内核
    GIT的使用
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
    Linux 小知识翻译
  • 原文地址:https://www.cnblogs.com/gtgtgt/p/16706112.html
Copyright © 2020-2023  润新知