• 第十章学习笔记


    第十章学习笔记

    第十章 sh编程

    1.sh脚本

    • sh脚本是一个包含sh语句的文本文件,命令行解释程序sh要执行该语句。
    • 创建一个mysh:
     #! /bin/bash
      # comment line
      echo hello
    

    2.sh脚本与C程序

    • sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。若是可执行命令且为内置命令则直接执行,否则复刻一个子进程来执行命令,并等待子进程终止再继续,每个变量都是字符串,sh脚本不需要main函数,第一个可执行语句是程序的入口点。C语言必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制可执行文件,每个变量必须有一个类型,必须有main()函数。sh脚本中,第一个可执行语句是程序的入口点。

    3.命令行参数

    • 可使用与运行sh命令完全相同的参数调用sh脚本,如:
    mysh one two three
    
    • sh脚本中,可通过位置参数$0、$1、$2等访问命令行参数,前10个命令行参数可以作为$0~$9被访问,10以上参数必须称为${n},或者可以通过稍后显示的shift命令查看他们。
    • $# = 命令行参数$1到$n的数量
    • $ = 所有命令行参数,包括$0
    • $S = 执行sh的进程PID
    • $? = 最后一个命令执行的退出状态,成功为0

    4.sh变量

    • 内置变量有PATH、HOME、TERM等,还可以以使用任何符号作为sh变量,所有sh变量值都是字符串,未赋值的为NULL
    • 变量赋值:
    variable=string
    

    5.sh中的引号

    • sh的特殊字符,如$、/、*、>、<等,可使用或单引号来引用它们把它们用作普通字符

    6.sh语句

    • sh语句包括所有的Unix/Linux命令,以及可能的I/O重定向。

    7.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命令:echo只是将参数字符串作为行回显到stdout,通常将相邻的多个空格压缩为一个空格,除非有冒号。
    • expr命令:将两个参数字符串转换为数字,对数字执行操作OP,再将得到的数字转换回字符串。
    • 管道命令:在sh中经常使用管道作为过滤器。
    • 其他实用命令:
      • axk:数据处理程序。
      • cmp:比较两个文件。
      • comm:选择两个排序文件共有的行。
      • grep:匹配一系列文件的模式。
      • diff:找出两个文件的差异。
      • join:通过使用相同的键来连接记录以比较两个文件。
      • sed:流或行编辑命令。
      • sort:排序或合并文件。
      • tail:打印某个文件的最后口行。
      • tr:一对一宇符翻译。
      • uniq:从文件中删除连续重复行。

    8.命令替换

    • 在sh中,$A会被替换成A值。同样,当sh遇到'cmd'或$(cmd)时,它会先执行cmd,然后用执行的结果字符串替换成$(cmd)。

    9.sh控制语句

    • if-else-fi语句
     if [condition]
        then
          statemates
        else
          statements
      fi
    
    • if-elif-else-fi语句
    if [condition];then
          commands
        elif [condition2];then
          commands
        else
          commands
      fi
    
    • for语句
    for VARIABLE in string1 string2 ... stringn
          do
            commands
          done
    
    • while语句
     while [condition]
        do 
          commands
        done
      fi
    
    • until-do语句
      until [$ANS = "give up"]
        do
          echo -n "enter your answer"
          read ANS
        done
    
    • case 语句
      case $variable in
        pattern1)  commands;;
        pattern2)  commands;;
        patternn)  commands;;
      esac
    

    10.I/O重定向

    • file:stdout转向文件,如果文件不存在,将会创建文件

    • file:stdout追加文件

    • <file:将文件用作stdin;文件必须存在并具有r权限
    • <<word:从“here”文件中获取输入,直到包含“word”的行

    11.嵌入文档

    • 可以指示输出命令从stdin获取输入,使其回到stdout,直到遇到预先安排的关键字。

    12.sh函数

    • sh函数的定义为:
      func()
      {  
        # function code
      }
    

    13.sh中的通配符

    • *:可扩展到当前目录中的所有文件
    • ?:查询某文件名中的字符
    • []:查询文件名中一对[]中的字符

    14.命令分组

    • 可以用{}或()对命令进行分组

    15.eval语句

    • eval是sh的一个内置命令,将输入参数字符串连接到一个字符串中,计算一次,然后给出结果字符串

    16.调试sh脚本

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

    bash -x mysh
    
  • 相关阅读:
    Java 通过SFTP上传图片功能
    Java 签名验签工具类
    winform自定义分页控件
    C# ini配置文件操作类
    c# 使用Renci.SshNet.dll操作SFTP总结
    .net core 2.0 webapi部署iis操作
    WORDPRESS修改文章文件后,出现乱码
    WP-PostViews使用
    wordpress WP-PageNavi分页
    如何让搜索引擎抓取AJAX内容?
  • 原文地址:https://www.cnblogs.com/zhangwenying/p/15338884.html
Copyright © 2020-2023  润新知