20191317王鹏宇第十章学习笔记

第十章:sh编程

知识点归纳总结

本章讨论了sh编程,阐释了sh脚本和不同版本的sh。比较了sh脚本与C程序,并指出了解释语言和编译语言的区别;说明了如何编写sh脚本,包括sh变量,sh语句,sh内置命令,常规系统命令和命令替换。解释了sh控制语句,包括测试条件,for循环,while循环,case语句等。并示范了用法;说明了如何编写sh函数以及使用参数调用sh函数;举例说明了sh脚本的广泛应用,包括linux系统的安装,初始化和管理。


其中让我最有收获的几个部分如下:

  • sh脚本与C程序
  • 命令行参数
  • 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:将位置参数S2 $3 ...重命名为$1 S2…。
trap [arg] [n]:接收到信号n后执行参数。
umask [ddd]:将掩码设置为八进制数ddd的。
wait [pid]:等待进程pid,如果没有给出pid,则等待所有活动子进程。


sh-linux命令:
awk:数据处理程序。
cmp:比较两个文件。
comm:选择两个排序文件共有的行。
grep:匹配一系列文件的模式。
diff:找出两个文件的差异。
join:通过使用相同的键来连接记录以比较两个文件。
sed:流或行编辑命令。
sort:排序或合并文件。
tail:打印某个文件的最后n行。
-tr: 一对一字符翻译。
uniq:从文件中删除连续重复行。


问题:一门程序设计语言有哪些必备的要素和技能?
参考网站

程序设计语言是用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。语法表示程序的结构或形式,亦即表示构成语言的各个记号之间的组合规律,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,亦即表示按照各种方法所表示的各个记号的特定含义,但不涉及使用者。程序设计语言具有心理工程及技术等特性。

  • 心理特性:歧义性、简洁性、局部性、顺序性、传统性。
  • 工程特性:可移植性,开发工具的可利用性,软件的可重用性、可维护性。
  • 技术特性:支持结构化构造的语言有利于减少程序环路的复杂性,使程序易测试、易维护。
    除了这些,程序语言还具有三种特点:
  • 模块化。不仅语言具有模块成分,程序由模块组成,而且语言本身的结构也是模块化的。
  • 简明性。涉及的基本概念不多,成分简单,结构清晰,易学易用。
  • 形式化。发展合适的形式体系,以描述语言的语法、语义、语用。

实践内容:我的第一个shell脚本

参考网站
代码:

#!/bin/bash
echo "Hello World !"

实践截图:


实践内容:sh变量

代码:

#! /bin/bash
echo A  
echo $A
A="this is fun "
echo $A
B=A
echo $B
B=$A
echo $B 

实践截图:



实践内容:sh脚本条件语句


代码:

#! /bin/bash
read who
if [ "$who" = "me"]; then
        echo "you are male"
else
        echo "$who is female"
fi


代码截图:

但是发现出了一点小错误:

经过查找,这是因为[]前后必须要有空格。因此改成这样就可以了:

#! /bin/bash
read who
if [ "$who" = "me" ]; then
        echo "you are male"
else
        echo "$who is female"
fi


成功运行。

实践内容:教材练习-测试程序如何测试文件类型和文件属性
参考网站

代码:

#! /bin/bash
read -p "please input a file name:" filename
[ -e "$filename" ] || {
        echo -e "file dose not exist
"
        exit
}
[ -f "$filename" ] && {
        echo "$filename is a file"  
}
[ -L "$filename" ] && {
        echo "$filename is a Link file"
        exit
}
[ -S "$filename" ] && {
        echo "$filename is a socket"
        exit
}
[ -b "$filename" ] && {
        echo "$filename is a block"
        exit
}
[ -d "$filename" ] && {
        echo "$filename is a directory"
        exit
}
[ -r "$filename" ] && {
        echo "$filename is a file that can read"
}
[ -w "$filename" ] && {
        echo "$filename is a file that can write"
}
[ -x "$filename" ] && {
        echo "$filename is a excutable file"
        exit
}



桌面文件:

其中可运行文件有:

code.desktop emacs.desktop emacs-term.desktop test.sh
文件夹有:
WPY_TEST
可读txt文件有:
wuhu.txt readonly.txt
可写txt文件有:
wuhu.txt writeonly.txt

代码截图:

脚本运行截图:


第十章的内容是关于sh脚本,其语法与C语言类似,只不过其中含有很多文件操作内容,所以关于文件操作的sh脚本还需要多多练习,我觉得如果能掌握好sh脚本,以后在做重复性工作时肯定能节省很多时间。

原文地址:https://www.cnblogs.com/wpy-1049363419/p/15320556.html