Linux环境下编程解题思路,《Linux命令、编辑器与Shell编程》部分高级练习解题思路...

前言:

《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中执行命令实现对该列表的排序,并采用两列来显示"

8581b844a7dee91b3e27cd065687ec19.png

上面是执行命令前

20a1f2944235cf161a5ff3b4b3079ff5.png

上面是执行完"% !sort"后的效果,其中"%"代表整个工作缓冲区

"15. 使用哪些命令可以将所有行中的 hither 与 yon 单词交换,其中,两个单词间的字数不确定。"

解题思路:此题考虑使用正则表达式。

b82d1823573c8a72fb71009e5babb5d6.png

上面是执行替换命令前

249fd2bc9de58bbc2dbf8b08e2ded221.png

这是执行替换命令后

替换命令为:g/\(\\)\(.*\)\(\\)/s//\3\2\1/

其中"\"匹配单词"yon","\"匹配单词"hither",".*"匹配两个单词之间的任意字符。用一对圆括号()将这三个表达式括起来进行模块匹配。(注:在这里面使用圆括号需要用反斜杠(\)将其转义。)然后在替换模式中用\1来调用第一个识别的模块,\2调用第二个识别的模块,\3调用第三个识别的模块。

第八章 Bourne Again Shell 课后练习

"12. 将前一条命令的退出状态添加到提示符中,使其表现得如下所示:"

$ [0] ls xxx

ls: xxx: No sush file or directory

$ [1]

b86b599635d8cb3aa2376b38e5f661dc.png

这是我在命令行执行PS1="[\$?]之前

ecfbcdd8ce04ed8920782c8c7aa9dc9a.png

这是我执行PS1="[\$?]之后

8793fdcbf1abc23518029caf05cc1434.png

执行 PS1="[\u@\h \W]$ " 恢复默认

"13. dirname 工具将它的参数作为一个路径名,并将该路径前缀(不包含最后部分的整个串)写到标准输出:

$ dirname a/b/c/d

a/b/c

如果只给 dirname 一个简单的文件名(不包含字符/)作为参数,dirname 将写一个 . 字符到标准输出:

$ dirname simple

.

用一个bash函数实现 dirname 。要确保当参数为/之类的时,该函数也能正确处理"

1 #!/bin/bash

2

3 # my_dirname - this is a local command of dirname

4

5 IFS.OLD=$IFS #备份IFS

6 IFS=$'/' #把路径分隔符'/'设为IFS

7 if [ $# -ne 1 ]

8 then

9 echo "Usage: my_dirname.sh /home/wx"

10 else

11 length=0

12 for var in $*

13 do

14 param[$length]=$var #把路径名分别存储在数组param中

15 length=$[ $length + 1 ] #数组的长度,或者直接这样也行${#param[*]}

16 done

17

18 if [ $length -eq 1 ] #处理简单文件名(不包含/)

19 then

20 echo '.'

21 else

22 count=1

23 if [ -z ${param[0]} ] #处理 /a/b/c/d 绝对路径这种情况

24 then

25 length=$[$length - 1]

26 while [ $count -lt $length ]

27 do

28 echo -n "/${param[$count]}"

29 count=$[ $count + 1 ]

30 done

31 else #处理 a/b/c/d 相对路径这种情况

32 echo -n "${param[0]}"

33 length=$[$length - 1]

34 while [ $count -lt $length ]

35 do

36 echo -n "/${param[$count]}"

37 count=$[ $count + 1 ]

38 done

39 fi

40 echo

41 fi

42 fi

43 IFS=$IFS.OLD #恢复IFS

44 exit 0

测试如下图所示

78a4fe48cde381a32a4c039cd1f37b0b.png

结束语:以上只是一部分习题的解题思路,如读者在其他习题上遇到问题,可以一起探讨。由于本人水平所限,如有错误,还请指正。

版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值