问题是我想回显一个字符串“你还没有输入文件”。
简单地说,如果用户在调用Unix脚本后没有输入任何内容,他们将收到该错误消息。
这是我的代码
for var in "$@"
do
file=$var
if [ $# -eq 0 ]
then
echo "You have not entered a file"
elif [ -d $file ]
then
echo "Your file is a directory"
elif [ -e $file ]
then
sendToBin
else
echo "Your file $file does not exist"
fi
done
我无法弄清楚到底出了什么问题,我相信这是我的第一个if语句
答案 0 :(得分:3)
如果用户没有输入任何参数,那么$@
将为空 - 换句话说,你的循环运行0次。该检查需要在循环外进行。
此外,使用-d
和-e
检查,您应引用"$file"
,否则如果用户输入空字符串作为arg,您将获得意外行为(它将是好像没有通过arg,在这种情况下,-d
和-e
实际上最终会返回 true )。
答案 1 :(得分:1)
作为FatalError suggests,问题是当没有参数时,你永远不会进入for
循环。
因此,您需要更多类似的内容:
if [ $# -eq 0 ]
then echo "You have not entered a file"
else
for file in "$@"
do
if [ -d "$file" ]
then echo "$file is a directory"
elif [ -e "$file" ]
then sendToBin # Does this need $file as an argument? Why not?
else echo "File $file does not exist"
fi
done
fi
您可以决定错误消息是否应该以脚本名称为前缀($(basename $0 .sh)
是我通常使用的),以及是否应将它们发送到标准错误(>&2
)。