Linux開發環境及其應用 《第9周單元測驗》及其解析

1、 bash通過“替換”提供靈活性,下述哪個不屬於基本bash替換

A.別名替換 B.歷史替換 C.命令替換 D. 正則表達式替換

bash替換不包括正則表達式替換,是在grep下的替換,bash是在終端上的替換
別名替換相關命令:num=123 echo $name
歷史替換相關命令:history !v
命令替換相關命令:使用一些通配符

2、下列哪個字符不屬於bash的元字符

A.$ B.\ C., D&

3、下列哪個字符不屬於bash的元字符

A.| B.* C.. D.;

元字符有 空格 製表符 回車 < > | ; $ & ` * [ ] ? \ ( )

4、系統管理員以root身份維護系統,bash下執行set | grep BASE的顯示只有一行,內容爲:

DATABASE=/opt/data/puma

目前開發測試階段已經結束,正式的軟件已經部署完畢,在系統正式運營之前,需要將當前數據庫文件夾中測試數據文件清空,然後再執行初始化建庫命令。爲此,執行下列命令:

rm -rf $DATEBASE/*

命令執行結果爲:

A. 如果上述命令執行結束,那麼系統將無法運行已安裝好的軟件中的建庫命令
B. 由於權限限制,/opt/data/puma目錄下部分文件可能無法刪除,即使有-f選項執行強制刪除也是刪不掉的
C. 數據庫中的文件被刪除,執行相應建庫命令後,可以啓動正常運營
D. 命令只能刪除不帶擴展名的文件,如果文件名自帶擴展名,則文件無法被刪除,應修改爲:
rm -rf $DATABASE/*.*

如果你是執行這個命令的操作員,估計你馬上就心情不好了。由於拼錯了單詞,把DATABASE不小心寫成了DATEBASE,災難來了。未命名的變量被bash替換爲空字符串,實際上你以root身份執行了最邪惡的一條命令:
rm -rf /*
永遠不要盲目自信,誰也保證不了自己不會犯錯誤,怎麼才能避免這樣的悲劇發生?各位同學自己思考。我的幾個建議:1.儘量不要以root身份登錄,2.bash有選項,引用未定義的變量會出錯而不是替換爲空字符串,可以打開這個選項。早期的編程語言把引用的未定義過的變量自動加上定義,這種做法實際上太糟糕,最早的FORTRAN語言就這種做法,據說曾因此導致一次太空任務失敗。3.在設計你自己的系統時,建庫命令能夠從目錄名開始建庫,就是說要求建庫之前/opt/data下不需要存在目錄puma,而不是要求建庫之前/opt/data有個空目錄puma,這樣的話,你的命令變成了 rm -rf $DATEBASE,因爲你的失誤,會導致rm命令抱怨缺少參數而什麼都不做,這個結果可以接受。

5、bash中的變量跟C語言中的變量不同,變量賦值和使用之前不需要變量類型定義,變量存儲的內容只是字符串,字符串長度不定。

6、bash變量有環境變量和局部變量兩種類型,環境變量與全局變量一樣,在其生命期內,某個進程對環境變量的修改結果其他進程可見。

×

7、無論是C語言編寫的源程序經編譯鏈接得到的可執行文件還是bash腳本,都能訪問環境變量得到其取值,而環境變量的創建與賦值可以一直推遲到相關的可執行程序運行之前由操作員完成。

8、環境變量PATH的值有特別的含義,一般不會把當前目錄.或者上一級目錄…作爲PATH的分量,主要是出於多用戶環境下的安全考慮。

9、bash腳本程序的後綴必須是.sh,否則即使把文件權限設置爲“可執行”,也無法正常運行。

×

10、單引號與雙引號的區別在於,雙引號括起來的這部分文字中取消了所有元字符的特殊含義只維持其字面值,而單引號與雙引號類似,但保留了少數幾個元字符維持其特殊含義,以便於保持靈活的替換。

x

說反了,單引號是取消所有元字符,雙引號取消了大多數元字符,保留了$和`

11、echo /*和echo '*'以及echo "*"三個命令的執行結果是一樣的,echo命令根本無法區別操作員輸入的是這三個命令中的哪一個。

這個很好理解,你可以打開選項set -x,其實shell層面先對命令做了處理,然後在傳給相關程序執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章