我想创建一个脚本,允许我从命令行输入多个文件名,并让脚本将这些文件复制到另一个目录。这就是我正在尝试的,但我不断收到错误
第 10 行:预期的二进制运算符
#!/bin/bash
DIRECTORY=/.test_files
FILE=$*
if [ -e $DIRECTORY/$FILE ]; then
echo "File already exists"
else
cp $FILE $DIRECTORY
fi
所以如果剧本被命名为 copfiles.sh,我正在写......
./copyfiles.sh doc1.txt doc2.txt
它将移动文件,但如果它们已存在,则不会读取错误消息。
此外,我收到"第 10 行:预期的二进制运算符"错误,无论文件是否存在。谁能告诉我我做错了什么?
作为一个可能的问题,如果你有一个带有空格的文件名或有多个参数 $* 会在其中有空格,所以[ -e $DIR/$FILE ]
会扩展为有很多单词,比如 [ -e /.test_files/First word and more ]
和 -e
期望它后面只有 1 个单词。 尝试将其放在引号中,例如
if [ -e "$DIRECTORY/$FILE" ]
当然,您可能只想存储 1 美元$FILE来获取第一个参数。
要测试所有参数,要遍历参数并使用类似的东西测试每个参数
for FILE in "$@"; do
if [ -e "$DIRECTORY/$FILE" ]; then
echo "$FILE already exists"
else
cp "$FILE" $DIRECTORY
fi
done
在 $@ 周围使用引号来保留原始参数中的空格