我试图理解这个非常基本的脚本中的逻辑。我正在尝试完成一些非常简单的事情。我正在尝试复制/var/log/messages
到一个名为的目录(在 下/
),backup
称为文件messages.txt
所以这是脚本:
#!/bin/bash
BACKP="$BACKDIR/$BACKFILE"
BACKDIR="/backup"
BACKFILE="messages.txt"
echo "Backing up files to $BACKP"
cp /var/log/messages $BACKP
这是我的输出:
Backing up files to /
此外,它将消息文件复制到根文件系统,这完全不是我想要的。我需要理顺我的逻辑,我完全不知道我做错了什么。
答案1
你必须定义事物前你使用它们:
BACKDIR="/backup"
BACKFILE="messages.txt"
BACKP="$BACKDIR/$BACKFILE"
...
稍微扩展一下这一点,如果 shell 遇到这种情况:
BACKP="$BACKDIR/$BACKFILE"
它获取 的值BACKDIR
和 的值BACKFILE
并替换它们。在您的原始示例中,当 shell 遇到 BACKP 赋值时,这两个值都是未定义的。 shell程序中未定义变量的值被替换为空字符串,所以上面的赋值等价于
BACKP="/"
但是,如果您首先定义 BACKDIR 和 BACKFILE,并且然后对 BACKP 进行分配,就像我在本答案的第一部分中所做的那样,插入它们的值,最终得到相当于
BACKP="/backup/messages.txt"
这就是你想要的。