2014-09-19 148 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