我有以下脚本,当用户调用sh <scriptName> <propertyfile>
时,它可以工作。当我在美元提示时提供此脚本时,它确实有效。但是,我对脚本有两个问题。
如果我只提供一个参数,即如果我这样做 - sh <scriptName>
,我会看到以下错误 -
my-llt-utvsg$ sh temp.sh
Usage temp.sh
当我做-help时,我看到以下错误 -
my-llt-utvsg$ sh tmp.sh -help
-help does not exist
我做错了什么?有人可以建议吗?我是一个很少需要编写shell脚本的软件开发人员,所以请放轻松我;)
#!/bin/bash
FILE="system.properties"
FILE=$1
if [ ! -f $FILE ];
then
echo "$FILE does not exist"
exit
fi
usage ()
{
echo "Usage $0 $FILE"
exit
}
if [ "$#" -ne 1 ]
then
usage
fi
if [ "$1" = "-help" ] ; then
echo ""
echo '############ HELP PROPERTIES ############ '
echo ""
echo 'Blah.'
exit
答案 0 :(得分:1)
你的原因
if [ "$1" = "-help" ] ; then
检查不起作用是它只检查$1
或第一个参数。
尝试改为:
for var in "$@"
do
if [ "$var" = "-help" ] ; then
echo ""
echo '############ HELP PROPERTIES ############ '
echo ""
echo 'Blah.'
fi
done
哪个循环遍历每个参数,因此如果其中任何参数都是-help就会运行。
答案 1 :(得分:1)
试试这个:
#!/bin/bash
FILES=()
function show_help_info_and_exit {
echo ""
echo '############ HELP PROPERTIES ############ '
echo ""
echo 'Blah.'
exit
}
function show_usage_and_exit {
echo "Usage: $0 file"
exit
}
for __; do
if [[ $__ == -help ]]; then
show_help_info_and_exit
elif [[ -f $__ ]]; then
FILES+=("$__")
else
echo "Invalid argument or file does not exist: $__"
show_usage_and_exit
fi
done
if [[ ${#FILES[@]} -ne 1 ]]; then
echo "Invalid number of file arguments."
show_usage_and_exit
fi
echo "$FILES"