2011-03-31 62 views
0

Shell腳本新手在這裏。只是想在我的shell腳本上輸入一些內容。如果某個特定的目錄存在,我基本上想從shell腳本啓動一個perl腳本。unix編程邏輯檢查目錄

我的邏輯聲音?我的支票好嗎?

if [ $# != 2 ]; then 
    echo "USAGE: ./mytest.sh <host> <name>" 2>&1 
    echo "  ./mytest.sh foo101.test.in foo" 2>&1 
    exit 1 
fi 

#Directories 
DIRDATE=`date '+%Y%m%d'` 
BASE=/dumps 
STGDIR=$BASE/temp/$DIRDATE 

#Check if directory exists 
if [ -d "$STGDIR" ] then 
     echo "$STGDIR directory exists!" 
     perl foobar.pl -n $1 -d $STGDIR/ -s $2 
else 
     echo "$STGDIR directory not found! Create the directory" 
     mkdir $STGDIR || { echo 'mkdir command failed' ; exit 1;} 
     if [ -d "STGDIR" ] then 
       echo "$STGDIR directory exists!" 
       perl foobar.pl -n $1 -d $STGDIR/ -s $2 
fi 
+0

SO並不意味着成爲分佈式測試平臺。你應該在本地測試你的腳本,嘗試所有各種各樣的角落案例,如果遇到了一個你無法解決的問題,那麼* *會提出一個很好的問題。 – SiegeX 2011-03-31 04:22:18

+0

在http://codereview.stackexchange.com上可能會得到更多答案 – 2011-03-31 12:27:50

回答

1

沒有問題,但都可以簡化這樣的:

if [ $# != 2 ]; then 
    echo "USAGE: $0 <host> <name>" 2>&1 
    echo "  $0 foo101.test.in foo" 2>&1 
    exit 1 
fi 

#Directories 
DIRDATE=$(date '+%Y%m%d') 
BASE=/dumps 
STGDIR=$BASE/temp/$DIRDATE 

# create directory $STGDIR if needed 
[ ! -d "$STGDIR" ] && (mkdir "$STGDIR" || { echo 'mkdir command failed'; exit 1; }) 

# execute your perl script 
perl foobar.pl -n $1 -d $STGDIR/ -s $2 
+0

我會添加'$ 0'而不是硬編碼'mytest.sh' – SiegeX 2011-03-31 04:35:14

+0

謝謝所有!很多很棒的建議。我會接受任何這些答案。您的輸入已經記錄並將在未來使用。 – jdamae 2011-03-31 04:44:22

+0

謝謝@SiegeX,編輯我的答案以取代硬編碼。作爲一個旁註:我自己總是在我的腳本中使用'$ 0'來達到這個目的,但是從來沒有真正重命名任何腳本來充分利用非硬編碼的腳本名稱:) – anubhava 2011-03-31 12:28:48

0

不是真正的關鍵,但你可能要改變你的反引號來$()如果你的外殼支持的話。您在內部if離開了您的交易fi構建

+0

還有一些'then'之前忘了';'的 – SiegeX 2011-03-31 04:35:34

1
  • 好縮進
  • 良好的變量名
  • 良好的輸入檢查
    (在運行腳本之前,您可能需要檢查您的$ 1和$ 2輸入是否正確)如果您有錯誤的值,可能會炸燬腳本)
  • 良好的包裹在DBL引號瓦爾「$ DIR」

  • 不贊成採用背抽動命令替換的。使用$(CMD)

  • 消息應該是「試圖創建目錄...」在第一或simliar(但很次要的問題)
  • 如果塊,如果你不能創建目錄,然後退出
  • 這意味着爲什麼要在2個地方打電話給perl。將它移動到if/then/else塊之外,以便只在沒有退出上面的錯誤時才執行。這是重複的代碼,如果腳本變得更大,您可以修改該行的一個副本,而不是其他代碼。
  • 每久留美,缺少的網絡

我希望這有助於。

+0

很好的輸入。謝謝。是的,我肯定需要清理那些額外的perl調用並簡化它。 – jdamae 2011-03-31 04:43:11