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