shell脚本,如何根据选择运行不同的代码?

时间:2014-09-19 02:42:59

标签: bash shell unix ksh aix

我有一个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 OS上运行的实际脚本的剪辑。

我要做的是基于菜单上的用户选择,更改在set_logging()块中执行的部分(如果用户选择不同的菜单选项,我会注意到我想要运行的代码帮助这个例子)。

同样,这是一个保持简单的例子,所以我理解并可以在shell脚本的不同部分使用它。

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

我并不完全清楚某些细节。如果您将以下代码放在注释所在的顶部,那么它将无法正常工作,因为可能未设置$ 1。如果$ 1为空,它需要在测试后进行。对于您所描述的内容,您不需要像案例陈述那样复杂的东西。您可以使用if语句来执行此操作:

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

你想要$ 1内部报价。否则,如果未设置,$ 1将完全消失,语句将变为无效。与你拥有的if测试一样,你应该把$ 1放在双引号内。

您可以使用=或==取决于很多因素。通常=和==等同于一些例外(例如,非常老的bourne shell没有==等)。

最后[[ ! -n $1 ]]可能写得更好[[ -z "$1" ]]