shell編程(2)

實驗四 shell 編程(2)
1、實驗步驟
1.shell 變量基本用法及經常使用符號使用
(1)將 主提示符改成 用戶的主目錄名
php

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

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

(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}原理同上同樣,但去掉的部分是匹配最少的部分
vim

(6) 在 shell 命令終端輸入name=/usr/bin/X11,而後使用 echo 分別顯示錶達式①和②的值,觀察結果。修改 name 的值,讓 name='/etc/apt/sources.list.d',再次使用 echo 分別顯示錶達式①和②的值,觀察結果。結合結果,寫出表達式的做用。
① ${name#/} ② ${name##/}
${name##pattern},,若是pattern與name值的開頭匹配,則表達式的值爲name中的值去掉匹配部分後的結果,去掉的部分是最多匹配的部分
${name#pattern}原理同上同樣,但去掉的部分是匹配最少的部分
less

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

  1. shell  腳本分析
    (1)使用 vim/gedit 編寫 shell 腳本文件 ex1.sh

在 shell 命令終端分 3 次運行該腳本,觀察其運行結果。
① 第 1 次運行:. ex1.sh
② 第 2 次運行:. ex1.sh best wishes
③ 第 3 次運行:. ex1.sh god bless u
函數

結合 3 次運行結果,分析腳本代碼,在實驗報告中總結如下內容:
① 整個 shell 腳本的功能是什麼?
答:將輸入全部參數逆序輸出。
② 第 8 行、第 9 行、第 11 行的功能是什麼?
答:第8行:在cmd的參數值'echo'後追加$符號(由\保護不被解析)+輸入的參數的編號(count=$#,這裏的$#是參數個數。)
第9行:參數個數-1,expr命令用以實現數值運算
第 11 行:執行cmd中的命令
③ 每次運行時,腳本中的 while 循環分別執行幾回?
答:第一次 0次,輸入參數爲0 不執行
第二次 2次,best wishes,兩個參數,count剛開始爲2,執行一次while變1,執行第二次變0,cmd爲 echo $2 $1
第三次 3次,god bless u 原理同上
④ 運行. ex1.sh god bless u 時,while 循環體第 1 次被執行時,第 8 行執行後變量 cmd 的值爲?
答:echo $3
(2)使用 vim/gedit 編寫 shell 腳本文件 ex2.sh,其內容以下:測試

在命令終端輸入. ex2.sh cy
this

回答下列問題。
① line6 中,who | grep 「^$1」的功能?
答:判斷存不存在和輸入參數匹配的用戶
② line8~10 功能?
答:將第一個參數cy重定向到Limitstring裏,向其發送hello cy
(3)使用 vim/gedit 編寫 shell 腳本文件 ex3.sh,其內容以下:

在命令終端輸入. ex3.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.list ex4.sh
 

結合運行結果,分析 shell 腳本功能。回答:
① line4-10 中函數 NL 的功能?
答:將用戶輸入的參數保存到x中,添加行號輸出
② line14 中,條件測試知足時,腳本執行的功能是?
答:執行函數 NL 
③ line17-line21,這部分腳本的功能是?
答:將參數傳遞給NL調用,再shift刪除這個參數,其他參數左移一位。

  1. shell 
    (1)第 4 章 思考題 4.9
    編寫一個shell腳本,它把第二個位置參數以及其後的各個參數指定的文件複製到第一個位置參數指定的目錄中。

(2)第 4 章 思考題 4.11
打印給定目錄下的某些文件,由第一個參數指出文件所在的目錄,其他參數是要打印的文件名。

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

(4)第 4 章 思考題 4.18
設計一個程序cuts,它由標準輸入讀取數據,獲取由第一個參數n和第二個參數m所限定範圍的數據,n和m都是整數,即從輸入的字符串中抽取第n個字符至第m個字符之間的全部字符(包括這兩個字符)。例如:
$cuts 11 14
this is a test of cuts program (輸入)
test (結果)

(5)猜數字遊戲
具體要求以下:
① 寫一個函數 random0_100 生成 0~100 之間的隨機數
② 用戶從鍵盤輸入競猜數字,若是猜錯了,提示用戶所猜數字偏大或偏小,用戶繼續猜,直至猜對爲止。

相關文章
相關標籤/搜索