Linux编程基础:第4章Shell编程 课后习题

这篇具有很好参考价值的文章主要介绍了Linux编程基础:第4章Shell编程 课后习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

《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中的运算一般通过两个命令:letexpr实现。

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"
do
    break
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}; do
    username=$user$i
    if useradd $username > /dev/null; then
        echo "$username" | passwd --stdin $username
        if [ $? -eq 0 ]; then
            echo "add $username successful"
        else
            echo "$username added, change password failure "
        fi  
    else
        echo "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}; do
    username=$user$i
    userdel -r $username
    if [ $? -eq 0 ]; then
        echo "del $username successful"
    else
        echo "del $username failure"
    fi  
done
exit

脚本执行结果如下:文章来源地址https://www.toymoban.com/news/detail-467871.html

------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编程 课后习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux:课后习题及其答案

    Linux服务器、嵌入式Linux系统、软件开发平台、桌面应用 开放性、多用户、多任务、良好的用户界面、设备独立性、丰富的网络功能、可靠的系统安全、良好的可移植性 内核、Shell、文件系统、应用程序 内核是操作系统的核心,具有很多最基本的功能,如虚拟内存、多任务、

    2024年02月09日
    浏览(36)
  • Linux实验4 shell脚本编程基础

    1.假设在/tmp下有以当前用户的帐号命名的目录,请在命令行中临时修改环境变量PATH的值,要求该目录的路径附加到该变量的最后。 2.请在命令行中临时设置命令输入提示行格式为:“当前系统时间-用户#”。 3.在命令行定义一个字符串变量str,并且赋值为“test for shell”,然

    2024年04月17日
    浏览(52)
  • 《python语言程序设计基础》(第二版)第六章课后习题参考答案

    第六章 组合数据类型 6.1 随机密码生成 6.2 重复元素判定 6.3 重复元素判定续 6.4 文本字符分析 6.5 生日悖论分析 6.6 《红楼梦》人物统计 注:上述代码仅供参考,若有问题可在评论区留言! 《红楼梦》及人物名单TXT (百度云链接失效可在评论区留言) 链接:https://pan.baidu.c

    2024年02月05日
    浏览(56)
  • 《python语言程序设计基础》(第二版)第二章课后习题参考答案

    第二章 Python程序实例解析 2.1 温度转换 2.2 汇率兑换 优化: 优化的主要改动: 将货币符号和金额分离出来,使代码更加清晰易读。 将条件判断改为根据货币符号进行判断,避免重复判断。 2.3 绘制彩色蟒蛇 2.4 等边三角形的绘制 代码一: 代码二: 2.5 叠加等边三角形的绘制

    2024年03月19日
    浏览(60)
  • 《python语言程序设计基础》(第二版)第五章课后习题参考答案

    第五章 函数和代码的复用 5.1 改造练习题3.5,输出更大的田字格 5.2 实现isOdd函数 5.3 实现isNum函数 5.4 实现multi函数 5.5 实现isPrime函数 5.6 输出10种生日日期格式 代码一: 代码二: 5.7 汉诺塔 注:上述代码仅供参考,若有问题可在评论区留言!

    2024年02月01日
    浏览(51)
  • 【Linux】shell编程基础(超详细,入门看这一篇就够了)

    🥇🥇【Liunx学习记录篇】🥇🥇 篇一:【Linux】VMware安装unbuntu18.04虚拟机-超详细步骤(附镜像文件) 篇二:【Linux】ubuntu18.04系统基础配置及操作 篇三:【Linux】用户与组的操作详细介绍 篇四:【Linux】管理Linux文件权限属性介绍 篇五:【Linux】使用数字表示法和文件表示法修

    2024年02月04日
    浏览(48)
  • 微信小程序开发教程:项目二微信小程序开发基础 课后习题

    《微信小程序开发教程》主编/黄寿孟 易芳 陶延涛 湖南大学出版社 目录 一、单选题 二、多选题 三、判断题 四、填空题 五、简答题 1.请简单描述页面样式的单位rpx与px的关系。 2.简单地介绍开发常用页面组件。 六、编程题 1.请编写一个商品列表页面,展示商品名称和价格。

    2024年02月09日
    浏览(54)
  • JAVA面向对象练习题,课后编程题。题目为:公司员工分为5类,每类员工都有相应的封装类。

    某公司的员工分为5类,每类员工都有相应的封装类,这5个类的信息如下 (1)Employee:这是所有员工的父类。 ①属性:员工的姓名、员工的生日月份。 )方法:getSalary(int month)根据参数月份确定工资。如果该月员工过生日,则公司会额外发放100元。 (2)SalariedEmployee:Employee 

    2024年02月05日
    浏览(53)
  • 【Linux命令行与Shell脚本编程】第十八章 文本处理与编辑器基础

    文本处理 学习sed编辑器 sed编辑器基础命令 gawk编辑器入门 sed编辑器基础 shell脚本可以将文本文件中各种数据的日常处理任务自动化Linux中的sed和gawk两款工具能够极大地简化数据处理任务。 想要即时处理文本文件中的文本,有一个可以自动格式化、插入、修改或删除文本元素

    2024年02月13日
    浏览(53)
  • Linux-03shell语法复习与习题

    2024年02月04日
    浏览(85)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包