2011-03-01 246 views
1

最近我在學校得到了一份作業,我們要在Bash腳本語言中編寫一個小程序。在shell腳本中運行shell腳本 - 好還是不好?

這個shell腳本應該接受一些位置參數或參數的命令行上。

現在,在if-else語句的幫助下,我檢查參數是否存在,如果參數存在,腳本執行它應該做的事情,但是如果參數不存在 - 我顯示錯誤消息,提示用戶輸入參數,並再次通過參數相同的shell腳本...

現在,我想知道,如果這種方法在bash編程範式好還是壞。我有點懷疑,這可能會在後臺運行太多任務保持打開或永不結束,並繼續消耗內存...請幫助。

這裏是一個小片段(假設腳本名稱是script1.bash):

#!/bin/bash 

if [ $# -gt 0 ]; then 
     read -p "Please enter your name: " name 
     script1.bash $name 
elif [ $# -eq 1 ]; then 
     echo "Your name is $1!" 
fi 
+1

您應該包括作業標籤,如果這是一所學校分配。 – BMitch 2011-03-01 03:43:07

+0

@B米奇 - 會照顧這個從明年開始時間.. – 2011-03-01 03:54:41

+0

shell腳本運行shell腳本里面?這是可憎的。 – mob 2011-03-01 14:29:40

回答

4

這......懷疑:-)

的主要問題是,你產卵子shell每次有人拒絕輸入他們的名字。

你會的喜歡的東西好:

#!/bin/bash 
name=$1 
while [[ -z "$name" ]] ; do 
    read -p "Please enter your name: " name 
done 
echo "Your name is $name!" 

其派生沒有子shell。

+0

謝謝paxdiablo,我已經嘗試使用頂級命令做一些becnhmarking,沒有顯示出他們......只是想知道? – 2011-03-01 03:39:38

+0

如果他使用exec執行遞歸調用,他的原始代碼是否可以工作? – 2011-03-01 03:43:50

+0

好,他原來的代碼工作_as-芸,(比其他事實,它應該是'$ 1',而不是在'elif'位'$ name'),除非你打ENTER這麼多次了系統運行的過程。 exec可以阻止這種情況的發生。我的回答更多的是隻根據需要做的事情。當你只需要啓動一個「while」循環時,啓動另一個進程(或者甚至用當前進程的內容替換'exec')是毫無意義的。 – paxdiablo 2011-03-01 03:47:27