【发布时间】:2014-11-03 13:53:58
【问题描述】:
我正在尝试编写一个 bash 脚本来读取两个参数...一个目录或一个文件和一个输出文件。我需要比较两者以确保它们不同。如果第一个参数是一个目录,那么我需要将该目录中的文件存储到输出文件中。如果第一个参数是一个文件,那么我需要将该文件存储在输出文件中。此外,第一个参数可以包含中间的空格以及该目录中的任何文件。以下是我到目前为止所拥有的。我能够打印出目录中的所有文件,但是,我遇到了空白以及将目录中的文件或文件本身存储到输出文件中的问题。我该怎么做?
#!/bin/bash
INPUT="$1"
OUTPUT="$2"
# Check that there are two arguments
if [ "$#" -ne 2]
then
echo "Usage: $0 {dir-name}"
exit 1
fi
# Check that INPUT is different from OUTPUT
if [ "$INPUT" = "$OUTPUT" ]
then
echo "$INPUT must be different from $OUTPUT!"
exit 1
fi
# Check if INPUT is a directory
if [ -d "$INPUT" ]
then
# Store all files from directory into OUTPUT file
echo "$INPUT directory exists!"
for name in `ls "$INPUT"`; do
echo "File -> $name"
mv "$name" "$OUTPUT"
done
fi
# Check if INPUT is a file
if [ -f "$INPUT" ]
then
# Move INPUT into OUTPUT file
echo "$INPUT file exists!"
mv "$INPUT" "$OUTPUT"
exit 1
else
echo "$INPUT is not a file!"
exit 1
fi
【问题讨论】:
-
Don't parse
ls,使用全局... -
看来你正在破坏你的
$OUTPUT,将每个文件移动到它上面。也许看看cat和>>? -
当
echo "$INPUT is not a file!"是一个目录时,您似乎也会点击它。也许exit来自if[ -d "$INPUT" ]或将文件检查嵌套在else中,然后您可以说“$INPUT 既不是常规文件也不是目录”。 -
您能否提供一个您所面临的空白问题的示例,例如您传递给脚本的参数类型?
标签: bash