1. shell 變量基本用法及經常使用符號使用
(1) 將主提示符改成用戶的主目錄名php
(2) 將字符串 DOS file c:>\$student\*賦值給變量 x,並顯示出來html
(3) 在 shell 命令終端輸入likes=(cosmos galaxy moon); likes[6]=mars,而後使用 echo 分別顯示如下表達式的值,並結合結果,寫出表達式的做用。shell
① ${likes[*]}vim
顯示數組likes中全部非空元素數組
② ${likes[@]}less
顯示數組likes中全部非空元素dom
③ ${#likes[*]}函數
顯示數組likes中元素的個數oop
④ ${#likes[@]}測試
顯示數組likes中元素的個數
⑤ ${#likes}
顯示數組likes中下標爲0的元素(第一個元素)的長度,省略了下標[0]
⑥ ${#likes[0]}
顯示數組likes中下標爲0的元素(第一個元素)的長度
(4) 在 shell 命令終端輸入name=Phoenix,而後使用 echo 顯示錶達式①,觀察結果;而後輸入命令unset name,再輸入表達式①觀察結果。結合兩次結果,寫出表達式的做用。
① ${name:-hello}
變量名name=Phoenix,不爲空,表達式1的結果爲name的值,即Phoenix
unset name是刪除變量的值,此時name值爲hello
(5) 在 shell 命令終端輸入name='/usr/share/doc/apg/php.tar.gz',而後使用 echo 分別顯示錶達式①和②的值,觀察結果。
修改 name 的值,讓 name='/etc/apt/sources.list.d',再次使用 echo 分別顯示錶達式①和②的值,觀察結果。結合結果,寫出表達式的做用。
① ${name%%.*} ② ${name%.*}
${name%%pattern},若是pattern與name值的末尾匹配,則表達式的值爲name中的值去掉匹配部分後的結果,去掉的部分是最多匹配的部分
${name%pattern}原理同上同樣,但去掉的部分是匹配最少的部分
(6) 在 shell 命令終端輸入name=/usr/bin/X11,而後使用 echo 分別顯示錶達式①和②的值,觀察結果。修改 name 的值,讓 name='/etc/apt/sources.list.d',再次使用 echo 分別顯示錶達式①和②的值,觀察結果。結合結果,寫出表達式的做用。
① ${name#*/} ② ${name##*/}
${name##pattern},,若是pattern與name值的開頭匹配,則表達式的值爲name中的值去掉匹配部分後的結果,去掉的部分是最多匹配的部分
${name#pattern}原理同上同樣,但去掉的部分是匹配最少的部分
(7) 已知某同窗提交的博客文章頁面地址 address 以下:
address='http://www.cnblogs.com/xyz/p/8569001.html' 經過字符串匹配,如何獲得其博客主頁地址: homepage='http://www.cnblogs.com/xyz'
寫出由變量 address 獲得變量 homepage 的 shell 命令實現
2. shell 腳本分析
(1) 使用 vim/gedit 編寫 shell 腳本文件 ex1.sh,其內容以下:
在 shell 命令終端分 3 次運行該腳本,觀察其運行結果。
結合 3 次運行結果,分析腳本代碼,在實驗報告中總結如下內容:
① 整個 shell 腳本的功能是什麼?
答:整個腳本的功能是將參數倒序輸出。參數有幾個,while就循環幾回。
② 第 8 行、第 9 行、第 11 行的功能是什麼?
答:第8行指將輸入參數個數給cmd,第9行指每循環一次,$count數減小1,第11行指運行cmd命令。
③ 每次運行時,腳本中的while 循環分別執行幾回?
答:有幾個參數,則while運行幾回,因此腳本中的while分別運行0,2,3次。
④ 運行.ex1.shgodblessu 時,while 循環體第 1 次被執行時,第 8 行執行後變量 cmd 的值爲?
答:while第一次被執行時,第8行執行後cmd的值爲echo $3。
(2) 使用 vim/gedit 編寫 shell 腳本文件 ex2.sh,其內容以下:
在命令終端輸入.ex2.shjsj,結合結果及幫助信息,回答下列問題。
① line6 中,who | grep 「^$1」的功能?
答:用於判斷用戶是否存在。
② line8~10 功能?
答:line8~10是將第一個參數重定向到LimitString中,向其發送Hello hadoop。
(3) 使用 vim/gedit 編寫 shell 腳本文件 ex3.sh,其內容以下:
在命令終端輸入.ex3.sh,結合結果及幫助信息,回答下列問題。
① 截圖顯示運行結果。
② 該腳本的功能是?
答:該腳本功能是將當前文件夾下的全部.sh格式的文件複製,新文件名爲爲原文件名加上後綴".BACKUP--日期--時間"。
(4)使用 vim/gedit 編寫 shell 腳本文件 ex4.sh,其內容以下:
在 shell 命令終端分 3 次運行該腳本,觀察其運行結果。
① 第 1 次運行:.ex4.sh
② 第 2 次運行:.ex4.sh/etc/apt/sources.list
③ 第 3 次運行:.ex4.sh/etc/apt/sources.listex4.sh
結合運行結果,分析 shell 腳本功能。回答:
① line4-10 中函數NL 的功能?
答:line4-10 中函數 NL的做用是將用戶輸入的值保存在變量x中,而後輸出行號和x的值。
② line14 中,條件測試知足時,腳本執行的功能是?
答:條件測試知足時,腳本執行函數NL的功能。
③ line17-line21,這部分腳本的功能是?
答:將參數傳遞給NL調用,再shift刪除這個參數,其他參數左移一位。
3. shell 腳本編寫
(1)編寫一個shell腳本,它把第二個位置參數以及其後的各個參數指定的文件複製到第一個位置參數指定的目錄中。
(2)打印給定目錄下的某些文件,由第一個參數指出文件所在的目錄,其他參數是要打印的文件名。
(3)利用for循環將當前目錄下的.c文件移到指定的目錄下,並按文件大小排序,顯示移動後指定目錄的內容。
(4)設計一個程序cuts,它由標準輸入讀取數據,獲取由第一個參數n和第二個參數m所限定範圍的數據,n和m都是整數,即從輸入的字符串中抽取第n個字符至第m個字符之間的全部字符(包括這兩個字符)。例如:
$cuts 11 14
this is a test of cuts program (輸入)
test (結果)
(5)猜數字遊戲,具體要求以下:
①寫一個函數random_100生成0~100之間的隨機數
②用戶從鍵盤輸入競猜數字,若是猜錯了,提示用戶所猜數字偏大或偏小,用戶繼續猜,直到猜對爲止。
總結與體會:寫了好久好久,遠不止倆小時了。。。寫的過程當中各類錯誤,有的命令還不熟悉,課後要花點時間看看。