《Linux編程基礎(chǔ)》黑馬程序員/編著?清華大學(xué)出版社
目錄
一、填空題
二、判斷題
三、單選題
四、簡(jiǎn)答題
1、分析以下腳本代碼:
2、寫(xiě)出shell腳本中while循環(huán)與until循環(huán)的基本格式,并簡(jiǎn)述這兩種循環(huán)結(jié)構(gòu)的區(qū)別。
五、編程題
1、編寫(xiě)shell腳本實(shí)現(xiàn)如下菜單界面:
2、編寫(xiě)shell腳本,實(shí)現(xiàn)批量添加用戶(hù)功能,要求如下:
①用戶(hù)名格式統(tǒng)一,為相同字符串加數(shù)字編號(hào),如qwe1~qwe9;
②用戶(hù)密碼與用戶(hù)名相同。
3、編寫(xiě)shell腳本,實(shí)現(xiàn)批量刪除用戶(hù)功能,其中用戶(hù)的用戶(hù)名格式統(tǒng)一(如qwe1~qwe9)。
一、填空題
1、Linux系統(tǒng)中的輸入輸出分為三類(lèi),分別為:(標(biāo)準(zhǔn)輸入)、標(biāo)準(zhǔn)輸出和(標(biāo)準(zhǔn)錯(cuò)誤)。
2、當(dāng)執(zhí)行g(shù)cc –c hello.c 2 > file命令時(shí),系統(tǒng)會(huì)將執(zhí)行命令時(shí)的(錯(cuò)誤信息)輸出到文件file中。
【解析】Linux系統(tǒng)為其中的輸入輸出文件設(shè)置了默認(rèn)編號(hào):標(biāo)準(zhǔn)輸入文件的編號(hào)是0,標(biāo)準(zhǔn)輸出文件的編號(hào)是1,標(biāo)準(zhǔn)錯(cuò)誤文件的編號(hào)是2。因此本題目中的“2 > file”是將執(zhí)行命令時(shí)的錯(cuò)誤信息重定向到文件file中。
3、執(zhí)行shell腳本的方法有兩種,假設(shè)現(xiàn)有一腳本文件test.sh,則執(zhí)行該腳本的方式分別為:(chmod +x test.sh;./test.sh)和(sh test.sh)。
【解析】執(zhí)行該腳本的方法有兩種:一種是將腳本本身作為一個(gè)可執(zhí)行文件,若想執(zhí)行該腳本程序,需要確保該文件可執(zhí)行,但創(chuàng)建的文件一般默認(rèn)沒(méi)有可執(zhí)行權(quán)限,因此需要先使用chmod命令,來(lái)修改文件的權(quán)限;另一種方法是將該腳本文件作為一個(gè)參數(shù),通過(guò)Shell解釋器對(duì)其進(jìn)行解析。
4、Shell中變量沒(méi)有明確的類(lèi)型,變量值都以字符串的形式存儲(chǔ),但Shell中也可能進(jìn)行一些算術(shù)運(yùn)算。Shell中的運(yùn)算一般通過(guò)兩個(gè)命令:(let)和(expr)實(shí)現(xiàn)。
5、條件判斷是條件語(yǔ)句的核心,Shell中通常使用(test)命令或([)命令對(duì)條件進(jìn)行判斷,這兩個(gè)命令判斷的條件可以是命令或腳本。
6、Shell腳本中常用的條件語(yǔ)句有三種,分別為:(if條件)語(yǔ)句、(select)語(yǔ)句和(case)語(yǔ)句。
二、判斷題
1、cat < file命令的功能是將cat命令打印的結(jié)果重定向到文件file中。 ??(×)
【解析】<為輸入重定向,因此cat < file命令的功能為將file文件的內(nèi)容作為cat命令的輸入,即打印文件file中的內(nèi)容,等同于cat file。
2、Shell的原意為“殼”,它包裹在內(nèi)核之外,處于硬件與內(nèi)核之間其主要功能為接收用戶(hù)輸入的命令,找到命令所在位置,并加以執(zhí)行。 ??(×)
【解析】Shell位于用戶(hù)與內(nèi)核之間,而非硬件與內(nèi)核之間。
3、Shell最重要的功能是命令解釋器,Linux系統(tǒng)中的所有可執(zhí)行文件都可以作為Shell命令來(lái)執(zhí)行。 ??(√)
4、使用“&”連接符連接的命令,其前后命令的執(zhí)行遵循邏輯與關(guān)系,只有該連接符之前的命令執(zhí)行成功時(shí),后面的命令才會(huì)被執(zhí)行。 ??(×)
【解析】Shell中的邏輯與連接符為“&&”而非“&”。
5、在Shell編程中,使用echo命令可打印字符串。若當(dāng)前腳本中定義了變量var=”hello itheima”,則語(yǔ)句echo ‘$var’打印的結(jié)果為hello itheima。 ??(×)
【解析】在Shell腳本中,若由雙引號(hào)引起的字符串中有變量的引用,則會(huì)輸出變量中存儲(chǔ)的值;由單引號(hào)引起來(lái)的字符串中有變量的引用,則會(huì)原樣輸出。因此該習(xí)題中echo語(yǔ)句打印的結(jié)果應(yīng)為$var。
三、單選題
1、分析以下腳本代碼:
#!/bin/sh
var="hello itheima"
echo "$var"
echo '$var'
exit 0
從以下選項(xiàng)中選出正確的執(zhí)行結(jié)果。 ??(B)
A、 |
hello itheima hello itheima |
B、 |
hello itheima $var |
C、 |
$var hello itheima |
D、 |
$var $var |
【解析】在Shell腳本中,若由雙引號(hào)引起的字符串中有變量的引用,則會(huì)輸出變量中存儲(chǔ)的值;由單引號(hào)引起來(lái)的字符串中有變量的引用,則會(huì)原樣輸出。因此正確選項(xiàng)為B。
2、從以下四個(gè)選項(xiàng)中,選出能成功將標(biāo)準(zhǔn)錯(cuò)誤重定向到file文件中的選項(xiàng)。 ??(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
【解析】標(biāo)準(zhǔn)錯(cuò)誤輸出文件編號(hào)為2,;錯(cuò)誤重定向符號(hào)與輸出重定向符號(hào)相同,即都為“>”和“>>”,使用“>”將以覆蓋的方式將錯(cuò)誤信息寫(xiě)到file文件;使用“>>”將以追加的方式將錯(cuò)誤信息寫(xiě)到file文件。因此正確選項(xiàng)為D。
3、若需要在當(dāng)前終端上順序執(zhí)行命令,則應(yīng)使用下列哪個(gè)符號(hào)連接? ??(A)
A、;
B、|
C、&&
D、||
【解析】連接命令,并使命令順序執(zhí)行的連接符為“;”。此外,“|”是管道連接符,該命令的功能是將一個(gè)命令的輸出作為另外一個(gè)命令的輸入;“&&”是邏輯與連接符,連接符兩邊的命令執(zhí)行有邏輯與關(guān)系,只有前一個(gè)命令執(zhí)行成功時(shí),后面的命令才會(huì)執(zhí)行;“||”是邏輯或連接符,只有前一個(gè)命令執(zhí)行失敗時(shí),后面的命令才會(huì)執(zhí)行。
四、簡(jiǎn)答題
1、分析以下腳本代碼:
#!/bin/bash
sum=1
for(( i=1; i <= 10; i++ ))
do
sum=`expr $sum + $i`
echo $sum
done
echo "sum1~10=$sum"
寫(xiě)出此腳本的執(zhí)行結(jié)果。
該腳本的功能為計(jì)算1~10這十個(gè)整數(shù)的和。腳本執(zhí)行結(jié)果如下:
3
6
10
15
21
28
36
45
55
sum1~10=55
2、寫(xiě)出shell腳本中while循環(huán)與until循環(huán)的基本格式,并簡(jiǎn)述這兩種循環(huán)結(jié)構(gòu)的區(qū)別。
while循環(huán)的語(yǔ)法格式為:
while [ 表達(dá)式 ]
do
…
done
until循環(huán)的語(yǔ)法格式為:
until [ 表達(dá)式 ]
do
…
done
while和until的區(qū)別在于:while會(huì)先進(jìn)行表達(dá)式判斷,若表達(dá)式滿(mǎn)足,才執(zhí)行循環(huán)體,直到表達(dá)式不滿(mǎn)足為止;而until則會(huì)先執(zhí)行循環(huán)體,再進(jìn)行表達(dá)式判斷,直到表達(dá)式不成立時(shí),才結(jié)束循環(huán)。until循環(huán)至少會(huì)執(zhí)行一次。
五、編程題
1、編寫(xiě)shell腳本實(shí)現(xiàn)如下菜單界面:
Menu
1) exit
2) edit file
3) date
4) calc
#?
腳本實(shí)現(xiàn)如下:文章來(lái)源:http://www.zghlxwxcb.cn/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、編寫(xiě)shell腳本,實(shí)現(xiàn)批量添加用戶(hù)功能,要求如下:
①用戶(hù)名格式統(tǒng)一,為相同字符串加數(shù)字編號(hào),如qwe1~qwe9;
②用戶(hù)密碼與用戶(hù)名相同。
分析題目:
由于添加的用戶(hù)名采用統(tǒng)一格式,因此可使用“user00+數(shù)字”的方式實(shí)現(xiàn),其中前綴user00由用戶(hù)手動(dòng)輸入,后綴的數(shù)字可通過(guò)循環(huán)逐次遞增;因?yàn)橛脩?hù)名和密碼相同,可在創(chuàng)建用戶(hù)后,使用代表用戶(hù)名的變量為用戶(hù)設(shè)置密碼;此外需對(duì)命令的執(zhí)行情況進(jìn)行判斷,若密碼設(shè)置失敗,應(yīng)給出提示。
腳本實(shí)現(xiàn)如下:
#!/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
執(zhí)行腳本,腳本的執(zhí)行結(jié)果如下,其中輸入的前綴為qwe:
-----add 9 users-----
please input a string:
qwe
更改用戶(hù) qwe1 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe1 successful
更改用戶(hù) qwe2 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe2 successful
更改用戶(hù) qwe3 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe3 successful
更改用戶(hù) qwe4 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe4 successful
更改用戶(hù) qwe5 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe5 successful
更改用戶(hù) qwe6 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe6 successful
更改用戶(hù) qwe7 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe7 successful
更改用戶(hù) qwe8 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe8 successful
更改用戶(hù) qwe9 的密碼 。
passwd: 所有的身份驗(yàn)證令牌已經(jīng)成功更新。
add qwe9 successful
附:shell腳本中對(duì)空格要求比較嚴(yán)格,若腳本運(yùn)行失敗,可先檢測(cè)代碼中是否有多余空格。
3、編寫(xiě)shell腳本,實(shí)現(xiàn)批量刪除用戶(hù)功能,其中用戶(hù)的用戶(hù)名格式統(tǒng)一(如qwe1~qwe9)。
分析題目:
刪除的用戶(hù)名采用統(tǒng)一格式,因此可使用“user00+數(shù)字”的方式實(shí)現(xiàn),其中前綴由用戶(hù)手動(dòng)輸入,后綴的數(shù)字可通過(guò)循環(huán)逐次遞增。
腳本實(shí)現(xiàn)如下:
#!/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
腳本執(zhí)行結(jié)果如下:文章來(lái)源地址http://www.zghlxwxcb.cn/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
到了這里,關(guān)于Linux編程基礎(chǔ):第4章Shell編程 課后習(xí)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!