显示文件是否存在 - 如果我使用1参数它可以工作但是当我使用多个时它显示错误

时间:2016-12-07 18:42:06

标签: bash unix git-bash nano

新手打击

任何人都知道这个问题似乎很容易解决,但我自己也搞不清楚了!

基本上我正在做的命令对用户输入的参数做了一些事情,这些参数是文件名[这是为了分配所以我不能讨论内容]让我们说它列出了文件,例如为了清酒

用户可以键入的文件数量没有限制 代码(有问题的主要原因)

if [ -e "$*" ]
then
    ls "$*"
    echo "your files are listed"
else
    echo "file does not exist"
exit 0
fi

基本上if语句由于某种原因不起作用

我想要它,以便用户可以输入任意数量的参数

并且if语句将检查是否存在所有参数(文件)

到目前为止,当我输入1个参数时,它会检查它是否存在

但是当我输入的数量超过1时,它弹出错误“参数太多” 以及它不存在的错误消息

帮助将受到赞赏:)

如果你觉得你会帮我作弊不要担心主要代码是好的它可以工作,但它只是这个验证位!

1 个答案:

答案 0 :(得分:1)

test -e期望单个文件成为下一个参数。相比之下,"$*"将您的所有参数合并为一个名称 - 因此,如果您有名为first file.txtsecond file.txt的文件,[ -e "$*" ]将查看是否有单个文件名为first file.txt second file.txt的名称(名称中包含空格和.txt个扩展名)存在。

for file in "$@"; do                      ## this could also be just "for file; do"
  if ! [ -e "$file" ]; then               ## note that we're checking one at a time
    echo "File $file does not exist" >&2
    exit 1
  fi
  ls "$file"  ## hopefully this is just for debugging
done

echo "Your files all exist" >&2
exit 0   ## typically unnecessary -- default exit status is that of the last command
         ## ...and echo is unlikely to fail.

请注意ls should not be used programatically,即使你 想要仅打印实际存在供人类消费的文件的名称(与脚本/程序化使用相反),它会更多有效地使用所有存在的名称调用ls一次,每个文件一次;然而,这并不是明确在所提问题的范围内。