《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
#?
脚本实现如下:文章来源:https://www.toymoban.com/news/detail-467871.html
#!/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模板网!