echo“你还没有输入文件”

时间:2013-04-18 03:44:11

标签: unix if-statement for-loop echo

问题是我想回显一个字符串“你还没有输入文件”。

简单地说,如果用户在调用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语句

2 个答案:

答案 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)。