shell腳本程序設計(一)

(一)要求:1、在SHELL語句中加入必一要的註釋,以便以後閱讀和維護,註釋以”#”開頭。   2、對變量和函數命名時最好能使用有含義且容易理解的名字。 

(二)內容:1、創建以下菜單程序:

 HOST: ********     USER: ****      DATE: **/**/20**

A: 創建子目錄並複製文件

B: 文件權限測試

C: 文件字符轉換

D: 文件總數及文本行數統計

E: 文件查找

Q: 退出系統

———————————————————————————————

  A:在用戶家目錄下創建名字爲本人姓名的子目錄,其存取權限爲(drwxr-xr-x)。測試目錄確實存在後,將ls -l / 的結果的前5行寫入file1文件並排序,將ls -l / 的結果的第3、4、5行寫入file2文件並排序,比較兩個文件將共有行寫入file3文件,將file1、file2兩文件拷入子目錄中,最後file2文件截斷爲大小爲0的空文件。

  B:測試當前用戶對file1文件是否有r、w、x的權限,輸出測試結果。

  C:將file1文件中的小寫字符轉換爲大寫寫入新文件newfile1,將file3文件中的字符“-”轉換爲“w”,再將“x”字符刪掉,寫入新文件newfile3。判斷上述操作成功後分別顯示新文件newfile1和newfile3的內容。

  D:統計/dev目錄下目錄文件和符號鏈接文件的數目;在file1中增加兩個空行,再統計file1中空行的行數;顯示當前系統中所有環境變量。

  E:在/dev目錄下查找由s開頭且文件名由5個字符組成的文件,找到後用file命令顯示其文件類型。

(三)設計答案:

 

MYDATE=`date +%Y-%m-%d`

THIS_HOST=`hostname -s`

USER=`whoami`

while :

do

       tput clear        #  清屏

       cat  <<SYM     #  從標準輸入中讀,知道遇到SYM

---------------------------------------------------

HOST:$THIS_HOST    USER:$USER     Date:$MYDATE

----------------------------------------------------

                 A:創建子目錄並複製文件

                 B:文件權限測試

                 C:文件字符轉換

                 D:文件總數及文本行數統計

                 E:文件查找

                 Q:退出系統

----------------------------------------------------

SYM

echo -e -n "\t Your choice[A,B,C,D,E,Q] >"

read choice

       case $choice in

                A|a) echo -n -e  "輸入你的名字(英文):";

                   read name;

                   mkdir /home/$name

                   chmod 755 /home/$name

                   if [ -d  /home/$name  ]

                     then

                     echo -n -e  "目錄存在:"

                     ls -l / |awk'NR<=5{print}' >/home/$name/file1

                     ls -l / |awk'FNR>=3&&FNR<=5{print}' >/home/$name/file2

                     awk '{if(ARGIND==1)       #ARGIND==1 判斷是否正在處理第一個文件file1

                             { val[$0]  } #val[$0]初始化val[$0]

                          else    #處理第二個文件

                            {if($0 in val) #判斷第二個文件在第一個文件的內容

                               print $0    #打印相同的內容

                             }

                           }' /home/$name/file1/home/$name/file2 >/home/$name/file3

                     #awk '{if(ARGIND==1){val[$0]}else{if($0 in val) print $0}}' file1 file2

                     >file2

                     else

                     echo -n -e "目錄不存在"

                   fi

                        ;;

                B|b) echo "測試結果:"

                        if [ -r/home/$name/file1 ]

                        then

                           echo -n -e "有讀的權限\n"

                        else

                           echo -n -e "沒有讀的權限\n"

                        fi

                        if [ -w/home/$name/file1 ];then

                           echo -n -e "有寫的權限\n"

                        else

                           echo -n -e "沒有寫的權限\n"

                        fi

                        if [ -x/home/$name/file1 ];then

                           echo -n -e "有執行的權限\n"

                        else

                           echo -n -e "沒有執行的權限\n"

                        fi

                            ;;

                C|c) awk '{print toupper($0)}'/home/$name/file1 > /home/$name/newfile1

                   awk'gsub(/-/,"w")' /home/$name/file3 |sed  's/x//g' >/home/$name/newfile3

                   if [ !$? ] ;then

                       echo -n -e "轉換創建成功\n"

                       cat/home/$name/newfile1 /home/$name/newfile3

                   fi

                        ;;

                D|d) echo -n -e "/dev目錄下目錄數目:"

                    ls -l /dev |grep ^d|wc -l

                 echo -n -e "/dev目錄下軟鏈接數目:"

                     ls -l /dev | grep ^l | wc-l

                 echo -n -e "file1下面的空行數目:"

                 sed  '1,2i\\' /home/$name/file1 | awk '/^$/{x++}END{print  x}'

                 echo -n -e "環境變量表\n"

                 env

                 ;;

                E|e)

                find /dev -name"s[a-z][a-z][a-z][a-z]">4

                var=$(cat 4)

                echo $var

                file -b $var

                  ;;

                Q|q) exit 0

                        ;;

                *) echo -e "\t\007unknownuser response"

                        ;;

       esac #配對case

echo -e -n "\tHit the return key tocontinue"

read DUMMY

done

 

 

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