1. 程式人生 > >Shell編程(2)

Shell編程(2)

標準 log 當前目錄 bsp 實現 移動 添加 who 所有

實驗四

1.shell變量基本用法及常用符號使用

(1)將主提示符改為用戶的主目錄名

技術分享圖片

(2)將字符串DOS file c:>$student*賦值給變量x,並顯示出來

技術分享圖片

(3)在 shell 命令終端輸入 likes=(cosmos galaxy moon); likes[6]=mars,然後使用 echo 分別顯示以下表達式 的值,並結合結果,寫出表達式的作用。

技術分享圖片

① ${likes[*]} likes中非空元素的值

② ${likes[@]} likes中非空元素的值

③ ${#likes[*]} likes中已經設置的元素個數

④ ${#likes[@]} likes中已經設置的元素個數

⑤ ${#likes} likes第一個元素的長度

⑥ ${#likes[0]} likes第一個元素的長度

(4)${name:-hello} 以及 unset name :

技術分享圖片

${name:-hello}

當name不為空時聲明此變量,若為空則聲明-之後的字符串

(5)${name%%.} 和 ${name%.}

技術分享圖片

作用分析: ${name%%.*}:對name從末尾開始與符號.進行匹配,刪除最多匹配的部分。

${name%.*}:對name從末尾開始與符號.進行匹配,刪除最少匹配的部分。

(6)${name#/} 和 ${name#/}

技術分享圖片

作用分析: ${name#*/}:對 name 從首位開始與符號/進行匹配,刪除最少匹配的部分。

${name##*/}:對 name 從首位開始與符號/進行匹配,刪除最多匹配的部分。

(7)已知某同學提交的博客文章頁面地址 address 如下: address=‘http://www.cnblogs.com/xyz/p/8569001.html‘ 通過字符串匹配,如何得到其博客主頁地址: homepage=‘http://www.cnblogs.com/xyz‘ 寫出由變量 address 得到變量 homepage 的 shell 命令實現。

技術分享圖片

2.shell腳本分析
(1)有ex1.sh腳本文件如圖

技術分享圖片

技術分享圖片

總結:

① 整個 shell 腳本的功能是什麽?

將參數倒序輸出

② 第 8 行、第 9 行、第 11 行的功能是什麽?

8:cmd是echo 的意思 \$$count表示最後一個字符 其中count=$#表示參數的個數

9:count所對應參數的個數減1

11:執行cmd中的命令

③ 每次運行時,腳本中的 while 循環分別執行幾次?

第一條0次,第二條2次,第三條3次

④ 運行. ex1.sh god bless u 時,while 循環體第 1 次被執行時,第 8 行執行後變量 cmd 的值為?{

echo $3

(2)使用 vim/gedit 編寫 shell 腳本文件 ex2.sh,如下圖:

技術分享圖片

技術分享圖片

技術分享圖片

① line6 中,who | grep “^$1”的功能?

判斷用戶是否存在

② line8~10 功能?

將hickeylu第一個參數重定向到Limitstring 並發送hello以及Limitstring

(3)使用 vim/gedit 編寫 shell 腳本文件 ex3.sh,其內容如下:

技術分享圖片

技術分享圖片

該腳本的功能: 復制當前目錄所有.sh 的文件並追加BACKUP--日期--時間。

(4)有ex4.sh腳本文件如圖

技術分享圖片

在 shell 命令終端分 3 次運行該腳本,觀察其運行結果。

① 第 1 次運行:. ex4.sh

技術分享圖片

② 第 2 次運行:. ex4.sh /etc/apt/sources.list

技術分享圖片

③ 第 3 次運行:. ex4.sh /etc/apt/sources.list ex4.sh

技術分享圖片

結合運行結果,分析 shell 腳本功能。回答:

① line4-10 中函數 NL 的功能?

將用戶輸入的參數保存到x中,添加行號輸出

② line14 中,條件測試滿足時,腳本執行的功能是?

執行函數NL

③ line17-line21,這部分腳本的功能是?

將$1這個參數傳遞給NL調用,調用完之後shift刪除這個參數,

接下來的參數左移一位,繼續傳遞。

3. shell 腳本編寫

此部分要求貼出實現相應要求的 shell 腳本程序,並截圖顯示腳本執行及結果

(1)編寫一個shell腳本,它把第二個位置參數以及其後的各個參數指定的文件復制到第一個位置參數指定的目錄中。

技術分享圖片

技術分享圖片

(2)打印給定目錄下的某些文件,由第一個參數指出文件所在的目錄,其余參數是要打印的文件名。

技術分享圖片

技術分享圖片

(3)利用for循環將當前目錄下的 .c文件移到指定的目錄下,並按文件大小排序,顯示移動後指定目錄的內容。

技術分享圖片

技術分享圖片

(4)設計一個程序cuts,它由標準輸入讀取數據,獲取由第一個參數n和第二個參數m所限定範圍的數據,n和m都是整數,即從輸入的字符串中抽取第n個字符至第m個字符之間的所有字符(包括這兩個字符)

技術分享圖片

技術分享圖片

(5)猜數字遊戲
具體要求如下:
①寫一個函數random0_100生成0~100之間的隨機數
②用戶從鍵盤輸入競猜數字,如果猜錯了,提示用戶所猜數字偏大或偏小,用戶繼續猜,直至猜對為止。
(提示:shell內部系統變量RANDOM生成0~32767之間的整數隨機數)

技術分享圖片

技術分享圖片

Shell編程(2)