2014-09-19 82 views
0

我有如下一個shell腳本...shell腳本,如何根據選擇運行不同的代碼?

#!/bin/ksh 

set_logging() { 
if [ -f "$LOG_FILE" ] 
then 
    mv $LOG_FILE $LOG_FILE.$SYNCDATE 
else 
    touch $LOG_FILE 
fi 
# set logging for stdout and stderr (run this if user selects start) 
exec >> $LOG_FILE 
exec 2>&1 

# run this if user selects dry 
#exec something else 
#exec something else 

} 

set_logging 

# menu 
if [[ ! -n $1 ]] ; then 
    clear 
    echo "" 
    echo "What are you trying to do?" 
    echo "start" 
    echo "dry" 
    echo "help" 
    echo "" 
    exit 99 
fi 

case "$1" in 
    start) run_tar;; 
    dry) nothing_here_yet;; 
    help) print_help;; 
    *) clear 
echo "Your syntax is incorrect!"; exit 99;; 
esac 

這是一個剪斷實際的腳本,在AIX 7.1 UNIX操作系統上運行。

我想要做的是基於菜單上的用戶選擇,更改set_logging()塊內執行的部分(如果用戶選擇不同的菜單選項,您會注意到我註釋了要運行的代碼以幫助這個例子)。

再次,這是一個簡單的例子,所以我理解並可以在我的shell腳本的不同部分使用它。

任何人都可以提供幫助嗎?

+2

你已經知道該怎麼做基於不同的事情一個變量的值。您可以在該代碼段的底部使用它。只需將其應用於'set_logging'內。您還需要將'「$ 1」'傳遞給函數。 – 2014-09-19 02:51:48

+0

@EtanReisner我認爲這就是他期待的答案,你可以在 – Ram 2014-09-19 03:57:27

回答

0

我不完全清楚一些細節。如果將以下代碼放在註釋的頂部,那麼它不會真正起作用,因爲可能不會設置$ 1。如果$ 1爲空,它需要經過測試。對於你所描述的,你不需要像案例陳述那樣複雜的東西。您可以使用if語句來執行此操作,例如:

if [[ "$1" = "dry" ]] ; then 
    exec something 
    exec somethingelse 
fi 

您希望在報價中加入1美元。否則,如果未設置,則$ 1會完全消失,並且該語句將變爲無效。同樣,如果您有測試,您應該將$ 1放在雙引號內。

您可以使用=或==取決於許多因素。一般=和==是等價的只有少數例外(如很舊的Bourne shell沒有==等)

[[ ! -n $1 ]]可能是更好的書面[[ -z "$1" ]]

+0

的答案部分中發佈它:[['沒有空格參數問題,'['因爲是句法而不是命令。 – 2014-09-19 09:47:11

+0

謝謝。我可能會把外殼變量放在雙引號中。我使用了很多語言和不同的平臺。如果我發現任何地方都有效,我會使用它。這使我不會嘗試記住所有平臺上所有語言的所有特例。其實。我傾向於在任何地方都使用「$ {x}」,但我認爲這不會增加用戶的理解。再次感謝。 – pedz 2014-09-19 12:35:29