第十章学习笔记

第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脚本

实践


原文地址:https://www.cnblogs.com/kevin-hw/p/15335709.html