试图返回一个简单的echo语句

时间:2013-04-18 04:11:19

标签: unix if-statement 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

我无法弄清楚到底出了什么问题,我相信这是我的第一个if语句

2 个答案:

答案 0 :(得分:0)

我会像这样改写:

#!/bin/bash

if (( $# == 0 )); then
    echo "You have not entered a file"
else
    for file in "$@"; do
        if [ -d "$file" ]; then
            echo "Your file is a directory"
        elif [ -e "$file" ]; then
            echo sendToBin "$file"
        else
            echo "Your file $file does not exist"
        fi
    done
fi

重点:

  • 您的脚本结构应首先检查是否传递了任何参数。如果没有,请打印相应的消息。否则处理每个参数。所以做一个if ... else for ...

  • 对于算术,我使用arithmetic evaluation。该手册令人困惑,可以使用所有这些,但你可以if (( ... ))和C风格for (( i = 0; i < n; i++ ))

  • 始终将$file之类的变量包装在引号中:"$file"。如果文件名中有空格这么简单,那么它就会破坏。

答案 1 :(得分:0)

$#的检查仅在循环位置参数的for内运行 - 也就是说,由于循环,[ $# -gt 0 ]只会在{{1}时运行非零。尝试在循环外移动支票。

(另外,您的大部分$#都应引用($file)。)