20191310李烨龙第十章读书笔记

第十章读书笔记

知识点归纳

1.sh脚本

sh脚本是一个包含sh语句的文本文件,命令解释程序sh要执行该语句。在我的理解来看,之前学习了makefile语句,貌似就是sh脚本的高配语句。

​ sh是一个解释程序,逐行读取sh脚本文件并执行。

2.命令行参数

位置参数

​ $n(if n > 9, add {})

​ $0是程序名本身,其余是程序的参数。

内置变量

​ $#=命令行参数的数量(1-n)

​ $*=所有命令行参数,包括$0

​ $S=执行sh的进程PID

​ $?=最后一个命令执行的退出状态(if success, set 0)

​ 在sh中,特殊字符$表示替换,还有其他许多特殊字符如/、*、>、<等。如果想把他们用作普通字符,可使用\或单引号来引用它们。

​ 通常,\用于引用单个字符,单引号中用于引用长字符串,在双引号中会发生替换。

3.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:				将位置参数$2 $3重命名为$1 $2

trap [arg] [n]:		接收到信号n后执行参数。

umask [ddd]:		将掩码设置为八进制数ddd的。

wait [pid]:			等待进程pid,如果没有给出pid,则等待所有活动子进程。

Linux命令

sh可以执行所有的Linux命令。

echo:	打印参数字符串。

expr:	将参数字符串转换为数字,对数字执行操作,在将数字转换为字符串。

awk:	数据处理程序。

cmp:	比较两个文件。

comm:	选择两个排序文件共有的行。

grep:	匹配一系列文件的模式。

diff:	找出两个文件的差异。

join:	通过使用相同的键来链接记录以比较两个文件。

sed:	流或行编辑命令。

sort:	排序或合并文件。

tail:	打印某个文件最后n行。

tr:		一对一字符翻译。

uniq:	从文件中删除连续重复行。

命令替换

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

4.sh控制语句

sh是一种编程语句,其使用方法与C相似。

for语句
	运算符-eq、-ne、-lt、-gt等将参数作为整数进行比较。
	-e name				
	-f name			
	-d name			判断是否为文件夹
	-r name			判断文件是否可读
	name -ef name	判断文件是否相同	
	
while语句

until-do语句

case语句

continue&break语句

5.I/O重定向

当进入sh命令时,我们可以指示sh将I/O重定向到除默认stdin、stdout、和sterr以外的文件。

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

​	>>file	stdout追加到文件。

​	<file	将文件用作stdin;文件必须存在并具有r权限。

​	<<word 	从“here”温江中获取输入,直到只包含word的行。

6.sh函数

由于sh逐行执行命令,所以必须在任何可执行语句之前定义sh脚本中的所有函数。

7.sh通配符

*:	拓展到当前目录中的所有文件

?:	查询某文件名中的字符。

[]:	查询文件名中一对[]中的字符。

问题与解决思路


实践内容

编程项目:用sh脚本递归复制文件

项目sh代码如下:

#! /bin/bash
read -p "filename
" file
checkfile()
{
    if [ -f $1 ]; then
	return 0
    elif [ -d $1 ]; then
	return 1
    else
	return 3
    fi
}

checkfile $file
if [ $? -eq 0 ]; then
    echo $file is a REG file
elif [ $? -eq 1 ]; then
    echo $file is a DIR file
else
    echo unknow file type
fi

项目运行截图如下:

posted @ 2021-09-25 23:12  20191310李烨龙  阅读(22)  评论(0编辑  收藏  举报