《Linux编程基础》黑马程序员/编著 清华大学出版社

目录

一、填空题

二、判断题

三、单选题

四、简答题

1、分析以下脚本代码:

2、写出shell脚本中while循环与until循环的基本格式,并简述这两种循环结构的区别。

五、编程题

1、编写shell脚本实现如下菜单界面:

2、编写shell脚本,实现批量添加用户功能,要求如下:

①用户名格式统一,为相同字符串加数字编号,如qwe1~qwe9;

②用户密码与用户名相同。

3、编写shell脚本,实现批量删除用户功能,其中用户的用户名格式统一(如qwe1~qwe9)。


一、填空题

1、Linux系统中的输入输出分为三类,分别为:(标准输入)、标准输出和(标准错误)。

2、当执行gcc –c hello.c 2 > file命令时,系统会将执行命令时的(错误信息)输出到文件file中。

【解析】Linux系统为其中的输入输出文件设置了默认编号:标准输入文件的编号是0,标准输出文件的编号是1,标准错误文件的编号是2。因此本题目中的“2 > file”是将执行命令时的错误信息重定向到文件file中。

3、执行shell脚本的方法有两种,假设现有一脚本文件test.sh,则执行该脚本的方式分别为:(chmod +x test.sh;./test.sh)和(sh test.sh)。

【解析】执行该脚本的方法有两种:一种是将脚本本身作为一个可执行文件,若想执行该脚本程序,需要确保该文件可执行,但创建的文件一般默认没有可执行权限,因此需要先使用chmod命令,来修改文件的权限;另一种方法是将该脚本文件作为一个参数,通过Shell解释器对其进行解析。

4、Shell中变量没有明确的类型,变量值都以字符串的形式存储,但Shell中也可能进行一些算术运算。Shell中的运算一般通过两个命令:(let)和(expr)实现。

5、条件判断是条件语句的核心,Shell中通常使用(test)命令或([)命令对条件进行判断,这两个命令判断的条件可以是命令或脚本。

6、Shell脚本中常用的条件语句有三种,分别为:(if条件)语句、(select)语句和(case)语句。

二、判断题

1、cat < file命令的功能是将cat命令打印的结果重定向到文件file中。   (×)

【解析】<为输入重定向,因此cat < file命令的功能为将file文件的内容作为cat命令的输入,即打印文件file中的内容,等同于cat file。

2、Shell的原意为“壳”,它包裹在内核之外,处于硬件与内核之间其主要功能为接收用户输入的命令,找到命令所在位置,并加以执行。   (×)

【解析】Shell位于用户与内核之间,而非硬件与内核之间。

3、Shell最重要的功能是命令解释器,Linux系统中的所有可执行文件都可以作为Shell命令来执行。   (√)

4、使用“&”连接符连接的命令,其前后命令的执行遵循逻辑与关系,只有该连接符之前的命令执行成功时,后面的命令才会被执行。   (×)

【解析】Shell中的逻辑与连接符为“&&”而非“&”。

5、在Shell编程中,使用echo命令可打印字符串。若当前脚本中定义了变量var=”hello itheima”,则语句echo ‘$var’打印的结果为hello itheima。   (×)

【解析】在Shell脚本中,若由双引号引起的字符串中有变量的引用,则会输出变量中存储的值;由单引号引起来的字符串中有变量的引用,则会原样输出。因此该习题中echo语句打印的结果应为$var。

三、单选题

1、分析以下脚本代码:

#!/bin/sh
var="hello itheima"
echo "$var"
echo '$var'
exit 0

从以下选项中选出正确的执行结果。   (B)

A、

hello itheima

hello itheima

B、

hello itheima

$var

C、

$var

hello itheima

D、

$var

$var

【解析】在Shell脚本中,若由双引号引起的字符串中有变量的引用,则会输出变量中存储的值;由单引号引起来的字符串中有变量的引用,则会原样输出。因此正确选项为B。

2、从以下四个选项中,选出能成功将标准错误重定向到file文件中的选项。   (D)

A、gcc hello.c 2<file

B、gcc hello.c 1<file

C、gcc hello.c 2>file

D、gcc hello.c 2>>file

【解析】标准错误输出文件编号为2,;错误重定向符号与输出重定向符号相同,即都为“>”和“>>”,使用“>”将以覆盖的方式将错误信息写到file文件;使用“>>”将以追加的方式将错误信息写到file文件。因此正确选项为D。

3、若需要在当前终端上顺序执行命令,则应使用下列哪个符号连接?   (A)

A、;

B、|

C、&&

D、||

【解析】连接命令,并使命令顺序执行的连接符为“;”。此外,“|”是管道连接符,该命令的功能是将一个命令的输出作为另外一个命令的输入;“&&”是逻辑与连接符,连接符两边的命令执行有逻辑与关系,只有前一个命令执行成功时,后面的命令才会执行;“||”是逻辑或连接符,只有前一个命令执行失败时,后面的命令才会执行。

四、简答题

1、分析以下脚本代码:

#!/bin/bash
sum=1
for(( i=1; i <= 10; i++ ))do  sum=`expr $sum + $i`echo $sum
done
echo "sum1~10=$sum"

写出此脚本的执行结果。

该脚本的功能为计算1~10这十个整数的和。脚本执行结果如下:

3
6
10
15
21
28
36
45
55
sum1~10=55

2、写出shell脚本中while循环与until循环的基本格式,并简述这两种循环结构的区别。

while循环的语法格式为:

while [ 表达式 ]
do…
done

until循环的语法格式为:

until [ 表达式 ]
do…
done

while和until的区别在于:while会先进行表达式判断,若表达式满足,才执行循环体,直到表达式不满足为止;而until则会先执行循环体,再进行表达式判断,直到表达式不成立时,才结束循环。until循环至少会执行一次。

五、编程题

1、编写shell脚本实现如下菜单界面:

Menu
1) exit
2) edit file
3) date
4) calc
#?

脚本实现如下:

#!/bin/bash
echo "Menu"
select var in "exit" "edit file" "date" "calc"
dobreak
done
echo "your choose is $var."
exit

2、编写shell脚本,实现批量添加用户功能,要求如下:

①用户名格式统一,为相同字符串加数字编号,如qwe1~qwe9;

②用户密码与用户名相同。

分析题目:

由于添加的用户名采用统一格式,因此可使用“user00+数字”的方式实现,其中前缀user00由用户手动输入,后缀的数字可通过循环逐次递增;因为用户名和密码相同,可在创建用户后,使用代表用户名的变量为用户设置密码;此外需对命令的执行情况进行判断,若密码设置失败,应给出提示。

脚本实现如下:

#!/bin/bash
#addusers
echo "-----add 9 users-----"
echo "please input a string:"
read user
for i in {1..9}; dousername=$user$iif useradd $username > /dev/null; thenecho "$username" | passwd --stdin $usernameif [ $? -eq 0 ]; thenecho "add $username successful"elseecho "$username added, change password failure "fi  elseecho "add $username failure "fi
done

执行脚本,脚本的执行结果如下,其中输入的前缀为qwe:

-----add 9 users-----
please input a string:
qwe
更改用户 qwe1 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe1 successful
更改用户 qwe2 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe2 successful
更改用户 qwe3 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe3 successful
更改用户 qwe4 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe4 successful
更改用户 qwe5 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe5 successful
更改用户 qwe6 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe6 successful
更改用户 qwe7 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe7 successful
更改用户 qwe8 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe8 successful
更改用户 qwe9 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
add qwe9 successful

附:shell脚本中对空格要求比较严格,若脚本运行失败,可先检测代码中是否有多余空格。

3、编写shell脚本,实现批量删除用户功能,其中用户的用户名格式统一(如qwe1~qwe9)。

分析题目:

删除的用户名采用统一格式,因此可使用“user00+数字”的方式实现,其中前缀由用户手动输入,后缀的数字可通过循环逐次递增。

脚本实现如下:

#!/bin/bash
#delusers
echo "------del 9 users------"
echo "please input a string:"
read user
for i in {1..9}; dousername=$user$iuserdel -r $usernameif [ $? -eq 0 ]; thenecho "del $username successful"elseecho "del $username failure"fi
done
exit

脚本执行结果如下:

------del 9 users------
please input a string:
qwe
del qwe1 successful
del qwe2 successful
del qwe3 successful
del qwe4 successful
del qwe5 successful
del qwe6 successful
del qwe7 successful
del qwe8 successful
del qwe9 successful

Linux编程基础:第4章Shell编程 课后习题相关推荐

  1. 【shell编程基础0】bash shell编程的基本配置

    前面一篇"shell编程之变量篇"主要讲述下shell编程的变量的基本知识:设置变量的方式,自定义变量和环境变量的差别,变量的替换.删除.测试等. 这一篇主要是讲述在bash sh ...

  2. c语言将pwd结果赋给变量,《网络系统管理linux实训》全套PPT电子课件教案-第4章 shell编程.ppt...

    第4章shell编程 4 1shell编程简介4 2shell分类4 3shell基本语法4 4shell程序的变量和参数4 5shell的测试表达式4 6shell的控制结构4 7awk4 8sed ...

  3. linux 【完结篇】第六章 shell编程及自动化运维--三剑客

    linux 第六章 shell编程及自动化运维–三剑客 一.正则表达式 1.前言 名词解释: 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符.在大多数程序里,正则表达式都被置于2个正斜杠之间 ...

  4. Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)

    实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...

  5. 【CentOS Linux 7】实验4【Shell编程】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  6. 【CentOS Linux 7】实验2【Shell编程及应用】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  7. abd shell关闭所有程序_第十六章 Shell编程

    第十六章 Shell编程 16.1 shell脚本运行 所谓脚本,就是把众多命令写入一个文件中,让其按照一定的逻辑顺序执行,以完成一个具体的功能.而在Linux的shell编译环境下,shell编程与 ...

  8. 《Python编程快速上手——让繁琐工作自动化》——第一部分 Python编程基础 第1章 Python基础 1.1 在交互式环境中输入表达式...

    本节书摘来自异步社区<Python编程快速上手--让繁琐工作自动化>一书中的第1章,第1.1节,作者[美] Al Sweigart,王海鹏 译,更多章节内容可以访问云栖社区"异步 ...

  9. WPF编程基础入门 ——— 第二章 XAML

    XAML 简述 XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)是微软公司创建的一种新的描述性语言,用于搭建应用程序用户界面.XAML实 ...

  10. WSY2021 Linux第12次上机作业shell编程

    Linux第12次上机作业shell编程 作业1:利用until循环实现1–100的求和 #!/bin/bash i=1 sum=0 until [ $i -eq 101 ] dosum=$(( $s ...

最新文章

  1. 思科交换机vlan配置
  2. 如何用计算机猜数字,杭电2010计算机复试笔试题 2道acm简单题(2010):1.猜数字游戏;2.字符串提取数字并求和;...
  3. JS合并数组的几种方法及优劣比较
  4. 网工小课堂(part1)--计算机网络概论
  5. .NetCore跨域
  6. MATLAB常用算法与应用实例分享来袭!
  7. 细数Android开发者的艰辛历程,全网最新
  8. JS高级——深入剖析函数中的this指向问题
  9. vim 中代码的折叠和打开
  10. 面向站长和网站管理员的Web缓存加速指南[翻译]
  11. 计算机网络协议到底分几层,一次讲清楚
  12. Python输出异常信息(行号)
  13. eXosip注册函数与使用说明
  14. 【无人机驾照】无人机驾驶员考试题库选择题1060道(带答案)
  15. Android Beam 文件传输失败分析与解决
  16. mysql win10 USB网卡_win10系统更新后usb网卡不能正常工作的解决方法
  17. 正确认识使用Word模板
  18. TextView的setBounds()方法
  19. 快速渡河(贪心算法)
  20. 学大伟业Day解题报告

热门文章

  1. php strtotime,PHP strtotime()函数
  2. java strtotime_js模仿php中strtotime()与date()函数实现方法
  3. 3D的深入理解:空间几何的平面方程 Ax+By+Cz+D=0
  4. 数字福建物联网首批重点实验室建设启动 厦门两所高校入围
  5. 计算机网络教程网线制作,如何制作网线 进来看看你就会【图文教程】
  6. Java 获取文件大小
  7. 一文读懂信息安全中的恶意代码、病毒、木马、蠕虫......
  8. 信号与系统 实验二 连续时间LTI系统的时域分析
  9. HBuilder x 打包 生成app步骤
  10. Spring AOP 切点表达式args与@args区别