前言:
《Linux命令、编辑器与Shell编程》这本书可以说是我的Linux启蒙教材。最初在看这本书的时候,对每一章后面的高级练习都感到头疼,甚至束手无策。最近重新翻阅这本书,顺便也把部分高级练习的解题思路写在这里。
第四章 linux文件系统 课后练习
"13. 如何才能创建一个名为-i 的文件? 采用哪种方法不能奏效? 为什么不能? 如何删除该文件?"
解题思路:我们知道,在linux系统下,只要文件名不包含(/)和空操作符(null)都是合法的文件名。斜线用来分隔构成路径名的各文件名,空操作符则用来终止一个路径名。(注意:别把空操作符(null)和空格(SPACE),制表符(TAB),回车(CR)这些空字符搞混淆)。
(以下直接在命令行输入)
方法1:touch ./-i
方法2:echo "Hello, World!" > -i
方法3:在vim中命令模式键入"w \-i"
删除文件命令:rm ./-i
"14. 假设工作目录下仅包含一个名为andor的文件那么执行命令"mv andor and\/or"会得要什么错误信息?在什么情况下,运行该命令不会报错?"
解题思路:命令会提示没有and/or那个文件或者目录。因为文件名中是不能包含斜杠(/)就算用反斜杠(\)转义也没用。该命令会被Shell理解为”把andor文件移动到当前工作目录目录and目录下的or目录中“,只要存在这么目录树就不会报错了。
"15. 通过命令 ls -i 可在文件名前面显示文件对应 inode 的编号。输入一个命令将工作目录下的所有文件 inode 和文件名输出到某个文件中,并按照inode编号排序(提示:使用管道)"
解题思路:ls -i | sort -n > file
第五章 Shell 课后练习
"12. 假设用户对某个文件具有写权限但不能删除它, 那么:"
a. 在不调用编辑器的情况下,给出将该文件变为空的命令。
解题思路:cat /dev/null > filename
b. 说明在什么情况下,用户可以对某个文件具有修改权限而没有删除权限。
用户对该文件只具有写(w)权限,而不具有读(r)权限
"15. 为什么命令名和文件名中通常都不包括空格?如何创建一个包含空格的文件名?又如何删除它?"
解题思路:因为 Shell 默认内部字段分隔符(IFS)为空格(SPACE),制表符(TAB),回车(CR)。
(IFS=' \t\n')。创建命令:touch 'Hello World' 或者 touch Hello\ World 只需要把空格转义就行。同理删除命令:rm 'Hello World' 或者 rm Hello\ World
第六章 vim 编辑器 课后练习
"12. 创建一个包含以下列表的文件,然后在vim中执行命令实现对该列表的排序,并采用两列来显示"
上面是执行命令前
上面是执行完"% !sort"后的效果,其中"%"代表整个工作缓冲区
"15. 使用哪些命令可以将所有行中的 hither 与 yon 单词交换,其中,两个单词间的字数不确定。"
解题思路:此题考虑使用正则表达式。
上面是执行替换命令前
这是执行替换命令后
替换命令为:g/\(\<yon\>\)\(.*\)\(\<hither\>\)/s//\3\2\1/
其中"\<yon\>"匹配单词"yon","\<hither\>"匹配单词"hither",".*"匹配两个单词之间的任意字符。用一对圆括号()将这三个表达式括起来进行模块匹配。(注:在这里面使用圆括号需要用反斜杠(\)将其转义。)然后在替换模式中用\1来调用第一个识别的模块,\2调用第二个识别的模块,\3调用第三个识别的模块。
第八章 Bourne Again Shell 课后练习
"12. 将前一条命令的退出状态添加到提示符中,使其表现得如下所示:"
$ [0] ls xxx
ls: xxx: No sush file or directory
$ [1]
这是我在命令行执行 PS1="[\$?] 之前
这是我执行 PS1="[\$?] 之后
执行 PS1="[\u@\h \W]$ " 恢复默认
"13. dirname 工具将它的参数作为一个路径名,并将该路径前缀(不包含最后部分的整个串)写到标准输出:
$ dirname a/b/c/d
a/b/c
如果只给 dirname 一个简单的文件名(不包含字符/)作为参数,dirname 将写一个 . 字符到标准输出:
$ dirname simple
.
用一个bash函数实现 dirname 。要确保当参数为/之类的时,该函数也能正确处理"
#!/bin/bash # my_dirname - this is a local command of dirname IFS.OLD=$IFS #备份IFS IFS=$'/' #把路径分隔符'/'设为IFS if [ $# -ne 1 ] then echo "Usage: my_dirname.sh /home/wx" else length=0 for var in $* do param[$length]=$var #把路径名分别存储在数组param中 length=$[ $length + 1 ] #数组的长度,或者直接这样也行${#param[*]} done if [ $length -eq 1 ] #处理简单文件名(不包含/) then echo '.' else count=1 if [ -z ${param[0]} ] #处理 /a/b/c/d 绝对路径这种情况 then length=$[$length - 1] while [ $count -lt $length ] do echo -n "/${param[$count]}" count=$[ $count + 1 ] done else #处理 a/b/c/d 相对路径这种情况 echo -n "${param[0]}" length=$[$length - 1] while [ $count -lt $length ] do echo -n "/${param[$count]}" count=$[ $count + 1 ] done fi echo fi fi IFS=$IFS.OLD #恢复IFS exit 0
测试如下图所示
结束语:以上只是一部分习题的解题思路,如读者在其他习题上遇到问题,可以一起探讨。由于本人水平所限,如有错误,还请指正。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
LINUX命令编辑器与SHELL编程(中文)07
LINUX命令编辑器与SHELL编程(中文)04
LINUX命令编辑器与SHELL编程(中文)
LINUX命令编辑器与SHELL编程(中文)05
本资源"Linux命令编辑器和Shell编程光盘含源代码"提供了一套全面的学习材料,旨在帮助用户深入理解和熟练运用Linux环境中的基本操作和高级编程技巧。 首先,"Linux命令"是用户与操作系统交互的主要方式,它包含了一...
LINUX命令编辑器与SHELL编程(中文)00 算上这个一共12个part全免费的,全下载后解压这个即可
LINUX命令、编辑器与SHELL编程.part1.rar LINUX命令、编辑器与SHELL编程.part2.rar LINUX命令、编辑器与SHELL编程.part3.rar 将三部分都下载下来,放在同一文件夹下,只需解压第一部分即可得到
LINUX命令编辑器与SHELL编程(中文)08
本书覆盖超过80个核心工具、shell编程、编辑器和编程工具,能使您成为真正的Linux高手,它是掌握强大的Linux命令行的捷径。 本书是目前所能找到的最实用、最全面的Linux指南和参考手册,也是唯一一本提供以下全部...
此资源共分为14部分上传,一起下载全才可以解压,这是 part4 《Linux命令、编辑器与Shell编程》特点: 1.它是Pearson、Amazon、Bames&Noble;计算机畅销书。 2.知名Linux专家MarkSobell编写的这《Linux命令、编辑器与...
注意: ...LINUX命令、编辑器与SHELL编程.part1.rar LINUX命令、编辑器与SHELL编程.part2.rar LINUX命令、编辑器与SHELL编程.part3.rar 将三部分都下载下来,放在同一文件夹下,只需解压第一部分即可得到
本书覆盖超过80个核心工具、shell编程、编辑器和编程工具,能使您成为真正的Linux高手,它是掌握强大的Linux命令行的捷径。 本书是目前所能找到的最实用、最全面的Linux指南和参考手册,也是唯一一本提供以下全部...
Linux命令、编辑器与Shell编程 第二部分 共三部分
LINUX命令、编辑器与SHELL编程 总共4部分 第二部分
Linux命令、编辑器与Shell编程 第三部分 共三部分
LINUX命令、编辑器与SHELL编程.part1 (共三部分) 清晰版 带书签
LINUX命令、编辑器与SHELL编程.part3 (共三部分)
2.知名Linux专家MarkSobell编写的这《Linux命令、编辑器与Shell编程》,为系统管理员、开发人员和高级用户提供了最需要的全面的深入指导,同时还是一本卓越的日常参考手册。 3.一本值得每一位Linux管理人员、开发...
本资料为高清版,共163M,分享给少分朋友。分为含以下2附件: LINUX命令、编辑器与...请先下载“LINUX命令、编辑器与SHELL编程.zip.001”后(资源分1),再下载“LINUX命令、编辑器与SHELL编程.zip.002”(资源分0)