1

我想输出“您还没有输入文件”。

如果用户在调用 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 语句

4

2 回答 2

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 ...

  • 对于算术,我使用算术评估。该手册对所有这些都可以在哪里使用感到困惑,但是您可以这样做if (( ... ))并且也可以使用 C-style for (( i = 0; i < n; i++ ))

  • $file始终用引号括起任何变量: "$file". 如果文件名中有空格这样简单的东西,否则它将中断。

于 2013-04-18T04:22:30.623 回答
0

$#仅在对位置参数进行循环的 a 中运行检查for- 也就是说,由于循环,只有在非零[ $# -gt 0 ]时才会运行。$#尝试将检查移出循环。

(另外,你的大部分$files 应该被引用("$file")。)

于 2013-04-18T04:25:24.423 回答