1. 程式人生 > >shell指令碼程式設計(一)

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