从命令行参数使用 bash 脚本复制多个文件



我想创建一个脚本,允许我从命令行输入多个文件名,并让脚本将这些文件复制到另一个目录。这就是我正在尝试的,但我不断收到错误

第 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

在 $@ 周围使用引号来保留原始参数中的空格

相关内容

  • 没有找到相关文章

最新更新