這是一個簡單了Shell執行個體。
下面是它的要求描述:
實驗五 UNIX Shell 程式設計
實驗內容:使用UNIX Shell程式設計語言,編寫UNIX Shell 應用程式。
實驗要求:按下列要求編寫Shell指令碼,把所學的各種UNIX命令串聯起來。
1.運行Shell指令碼,首先顯示類似如下的菜單:
What would you like to do:
List Directory **********************1
Change Directory*********************2
Edit file****************************3
Remove file**************************4
Add messages in a file***************5
Search keyword in a specified file***6
Exit Menu****************************7
Enter your choice:
2.輸入1:以長格式列出目前的目錄內容。
3.輸入2:改變工作目錄到自己指定的目標目錄中。(要求改變後可以用選項1查看該目錄中的內容)
4.輸入3:提示輸入一個檔案名稱(該檔案可能不存在),然後調用vi編輯器進行編輯。
5.輸入4:刪除一個指定的檔案。
6.輸入5: 提示輸入一個檔案名稱,然後將使用者在鍵盤上命令列方式下輸入的任何資訊都添加並儲存到這個檔案中,直到使用者輸入一個空行後才完成該項操作。
注意:該操作不能是只輸入一行後就停止,要能不斷輸入多行資訊;不能調用vi編輯器來輸入。
例如:一個名為”phone”的檔案,原有內容為(也可以是無內容的新檔案):
“ This is a phone list”
現在要在其後添加一些電話薄的欄位資訊,
選擇“5”後,顯示:Input the filename that you want to add messages:
然後從鍵盤輸入檔案名稱:phone
接著提示:輸入要添加的資訊,例如使用者要添加如下資訊:
David Brown (7771) 91101111 m@m.com …………
Emma Redd (6970) 22292222 in@o.com ………..
Tom Swanson (823) 44474444 ai@e.com ………..
Ming Li (0871) 3133333 bb@r.com ………..
……………. …… …….. ………… ………..
輸入完成後,當使用者輸入一個空行即完成該項添加資訊的操作,並退出該選項。該”phone”檔案添加後變為:(可以用選項3查看)
This is a phone list
David Brown (7771) 91101111 m@m.com …………
Emma Redd (6970) 22292222 in@o.com ………..
Tom Swanson (823) 44474444 ai@e.com ………..
Ming Li (0871) 3133333 bb@r.com ………..
……………. …… …….. ………… ………..
7. 輸入6:在指定的檔案中尋找某個關鍵字(該檔案,並顯示找到的關鍵字所在的行。
要求:尋找時忽略大小寫,並在每個找到的輸出行前顯示行號,要判斷輸入的名字是否為檔案而非目錄,若是檔案則進行尋找工作,若檔案不存在或是目錄則顯示出錯資訊。
8.輸入7:退出該指令碼程式,回到Shell提示符下。
9.在來源程式中加入適當的注釋。
注意:該菜單要能夠反覆顯示,即各項選完後要能再次返回菜單。
實驗報告:
1、將自己編製並調試好的程式,用到的各種檔案放在自己的使用者主目錄下。
2、抄寫自己的Shell來源程式(自己加紙寫)
3、寫出設計思想。
4、寫出上機體會與總結
5、回答問題:執行指令碼的方式有哪幾種,有何區別。
完成報告如下:
實驗五 UNIX Shell 程式設計
1. 原始碼如下:
#!/bin/bash
C="0"
#
# Do list directory
#
listDirectory()
{
ls -l ./
return
}
#
# Do change the directory
#
changeDirectory()
{
read -p "Input the New Directory Path : " CDI
# check out wether the directory is exist
if [ -d $CDI ]
then
cd $CDI
else
printf "the Directory is not Exist/n"
fi
return
}
#
# Do edit a file
#
editFile()
{
NFILE=""
read -p "Input the File Name to Edit : " NFILE
vi $NFILE
return
}
#
# Do remove a file
#
removeFile()
{
RFILE=""
read -p "Input the File Name to Remove : " RFILE
if [ -f $RFILE ]
then
rm $RFILE
else
printf "the File is not Exist/n"
fi
return
}
#
# Do input messages
#
addMessages()
{
MFILE=""
read -p "Input the File Name to Add Messages : " MFILE
# start to add new messanges
MMSG=""
read -p "Input the Messages : " MMSG
while [ "$MMSG" != "" ]
do
echo $MMSG >> $MFILE
MMSG=""
read -p "Input the Messages : " MMSG
done
printf "End of the file/n"
return
}