今天寫第二個shell腳本,寫一下《私房菜》裏的課後題。該題需要寫一個檢查某一個名稱是否存在,不存在則創建一個文件;存在則需要判斷下該名稱是否文件,是文件則刪除後建一個同名目錄,如果是目錄則將此目錄刪除。
先設立一個基礎條件:操作目錄爲/tmp/test/(注:如果此目錄不存在則需要手動創建),需要建立的文件或目錄名稱爲logical。
下邊開始寫腳本。
#!/bin/bash #Program: # This program to check if a filename exists . #History #2016/04/08 MG First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/sbin:~/bin export PATH echo -e "正在檢查/tmp/test/logical是否存在,請稍後..." test -e "/tmp/test/logical" && state=0 || state=1 path="/tmp/test" filename="logical" case $state in "1") echo "該文件不存在,正在創建..." mkdir -p $path && touch "$path/$filename" echo "文件創建成功!" ;; *) test -d "$path/$filename" && statu=0 || statu=1 if [ "$statu" == "0" ];then echo "$filename 存在且爲目錄。" rm -rf "$path/$filename" echo "已將該目錄刪除!" else echo "$filename 存在且爲文件,正在刪除並建立同名目錄" rm -f "$path/$filename" && mkdir "$path/$filename" echo "正在創建請稍後..." echo "$filename 目錄已經建立!" fi ;; esac
簡單說明下,寫腳本的邏輯。通過test -e命令來判斷 "logical" 名是否存在,如果不存在狀態設爲"1",並根據題目創建文件。如果存在則通過test -d命令來判斷是否爲目錄,如果是目錄將其狀態設爲0,並將該目錄通過rm -rf 命令來刪除(注:如果不加-r參數無法刪除目錄,所以需要加入-r參數);如果是文件則通過rm -f 命令將文件刪除,通過mkdir 命令來創建同名目錄(注:“命令1 && 命令2”的寫法的意思是如果命令1執行成功才繼續執行命令2)。
該腳本功能還是相對簡單,會有些不足之處,繼續努力改進吧。