• 第十章学习笔记


    第10章学习笔记 sh编程

    问题:大家学习过Python,C,Java等语言,总结一下一门程序设计语言有哪些必备的要素和技能?这些要素和技能在shell脚本中是如果呈现出来的?

    我认为学程序有要有英语基础和数学思维能力,现在大部分编程语言是基于英语语言的,比如常见的C、C++、Python等等都是英语单词堆起来的。所以最好有英语基础,这样学习编程轻松、高效一些。另外需要数学思维能力,编程需要很强的逻辑思维能力。编程就是编写一个程序,程序是我们处理一件“事情”的流程的程序化表示,流程体现逻辑,或者可以说算法体现逻辑。
    另外程序设计语言也有3个方面的因素,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。语言的种类千差万别。但是,一般说来,基本成分不外4种。数据成分、用以描述程序中所涉及的数据。运算成分、用以描述程序中所包含的运算。控制成分、用以表达程序中的控制构造、传输成分。这些要素具体体现在sh编程中的各类命令当中。

    知识点总结

    10.1-10.2
    这两个部分首先介绍了sh脚本和不同版本的sh,并把sh脚本和C语言进行比较。不难发现,sh脚本是解释程序,它会逐行读取sh脚本并直接执行,而C语言恰恰相反,它必须先编译链接,再通过主sh的子进程运行文件。除此之外,sh脚本中每一个变量都是字符串且不需要main函数,而C语言必须要有一个main函数,其变量也必须要有一个类型。
    10.3-10.8
    这部分主要说明如何编写sh脚本,包括命令行参数、sh变量、引号、sh语句、常规命令以及命令语句。

    本章讨论了sh编程,阐述了sh脚本和不同版本的sh;比较了sh脚本与C程序,并指出了解释语言和编译语言的区别;详细说明了如何编写sh脚本,包括sh变量、sh语句、sh内置命令、常规系统命令和命令替换;解释了sh控制语句,其中包括测试条件、for循环、while循环、do-until 循环、case语句等;说明了如何编写sh函数以及使用参数调用sh函数。sh脚本和C语言存在相似之处,但本质不同。 首先,sh是一个解释程序,逐行读取sh脚本文件并直接执行这些行。如果行是可执行命令且为内置命令,那么sh可直接执行。否则,它会复刻一个子进程来执行命令,并等待子进程终止后再继续,这与它执行单个命令行完全一样。 相反,C程序必须先编译链接到一个二进制可执行文件,然后通过主sh的子进程运行二进制可执行文件。

    内置命令:
    .flie、break、cd、continue用法与Linux类似
    eval:计算一次参数并让sh执行生成的命令
    exec:使用这个sh执行命令,sh将会退出
    export:将变量导出到随后执行的命令
    set:在执行环境中设置变量
    shift:将位置参数进行移动

    Linux命令
    echo命令:通常将相邻的多个空格压缩成一个空格,除非有引号
    expr命令:可将字符串转换为数字,进行操作后再转回字符串
    管道命令:经常使用管道作为过滤器
    实用命令:
    cmp:比较两个文件
    conm:选择两个排序文件共有的行
    diff:找出两个文件的差异
    sort:排序或合并文件
    tail:打印文件的最后n行
    tr:一对一字符翻译
    uniq:从文件中删除连续重复行

    10.9
    这部分介绍了sh的控制语句及其用法,包括if-else-fi、for、while、until-do、case以及continue和break语句。
    if-else-fi语句和C语言中的if-else语句类似,但需要一个fi作为结束语句。
    for、while、until-do语句也十分类似,但需要有do-done关键字

    10.10-10.16
    这部分主要是讲解如何编写sh函数以及如何使用参数调用sh函数。
    由于sh逐行执行命令1,所以必须在任何可执行语句之前定义sh脚本中的所有函数。而在被调函数中,参数被引用为$0、$1到$n,其中通常$0是函数名,$1到$n是与命令行参数对应的位置参数。函数执行结束时,$?表示其退出状态,成功时状态为0,否则状态为非0

    通配符
    file *:列出当前目录中所有文件的信息
    ls *.c:列出当前目录中所有以.c结尾的文件
    file ??:有3个字符的所有文件名
    ls *.??: .后有2个字符的所有文件名
    file [ab]:包含字符a或b的所有文件名
    ls [xyz]:列出所有包含x、y或z的文件名
    ls [a-m]:列出包含a到m范围内字符的所有文件名

    最有收获的内容
    shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用。通常shell脚本以.sh为后缀。在编写shell时,第一行一定要指明系统需要哪种shell解释用户的shell程序,如:#!/bin/sh,#!/bin/bash,#!/bin/csh,,#!/bin/tcsh和,#!/bin/ksh等。下面的run.sh则指明使用bash执行。

    !bin/bash

    ls -l
    通常,shell脚本会以#!/bin/sh作为默认的shell程序。执行shell的方式有两种:第一种是为shell脚本加上可执行权限并执行,第二种是通过sh命令执行shell脚本,例如执行当前目录下的run.sh脚本,命令如下:
    //为shell脚本直接加上可执行权限并执行
    chmod 755 run.sh
    ./run.sh
    //通过sh命令执行shell脚本

    实践


  • 相关阅读:
    Kubernetes CNI 发展趋势- iptables_ipvs_bpf_ovs
    《设计模式:可复用面向对象软件的基础》之单例模式
    《设计模式:可复用面向对象软件的基础》之策略模式
    Rancher On K3s 高可用架构部署
    学习计算机的体会与认识
    结对编程1-模块化
    个人作业——APP案例分析
    四则运算——二叉树
    IDEA使用Visual Studio的快捷键配置
    【Java学习笔记】写第一个HelloWorld程序,命令行程序
  • 原文地址:https://www.cnblogs.com/kevin-hw/p/15335709.html
Copyright © 2020-2023  润新知