我有一个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脚本的不同部分使用它。
任何人都可以提供帮助吗?
答案 0 :(得分:0)
我并不完全清楚某些细节。如果您将以下代码放在注释所在的顶部,那么它将无法正常工作,因为可能未设置$ 1。如果$ 1为空,它需要在测试后进行。对于您所描述的内容,您不需要像案例陈述那样复杂的东西。您可以使用if语句来执行此操作:
if [[ "$1" = "dry" ]] ; then
exec something
exec somethingelse
fi
你想要$ 1内部报价。否则,如果未设置,$ 1将完全消失,语句将变为无效。与你拥有的if测试一样,你应该把$ 1放在双引号内。
您可以使用=或==取决于很多因素。通常=和==等同于一些例外(例如,非常老的bourne shell没有==等)。
最后[[ ! -n $1 ]]
可能写得更好[[ -z "$1" ]]