第十章: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脚本,以后在做重复性工作时肯定能节省很多时间。