加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

变量作为bash脚本中的命令

发布时间:2020-12-15 18:49:53 所属栏目:安全 来源:网络整理
导读:我正在编写一个非常简单的bash脚本,它可以对给定的目录进行加密,加密其输出,然后将生成的文件分解成多个较小的文件,因为备份介质不支持巨大的文件. 我没有很多bash脚本的经验.我相信我有正确引用我的变量的问题,以允许参数中的空格.脚本如下: #! /bin/bash#
我正在编写一个非常简单的bash脚本,它可以对给定的目录进行加密,加密其输出,然后将生成的文件分解成多个较小的文件,因为备份介质不支持巨大的文件.

我没有很多bash脚本的经验.我相信我有正确引用我的变量的问题,以允许参数中的空格.脚本如下:

#! /bin/bash

# This script tars the given directory,encrypts it,and transfers
# it to the given directory (likely a USB key).

if [ $# -ne 2 ]
then
    echo "Usage: `basename $0` DIRECTORY BACKUP_DIRECTORY"
    exit 1
fi

DIRECTORY=$1
BACKUP_DIRECTORY=$2
BACKUP_FILE="$BACKUP_DIRECTORY/`date +%Y-%m-%dT%H-%M-%S.backup`"

TAR_CMD="tar cv $DIRECTORY"
SPLIT_CMD="split -b 1024m - "$BACKUP_FILE""

ENCRYPT_CMD='openssl des3 -salt'

echo "$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD"

$TAR_CMD | $ENCRYPT_CMD | $SPLIT_CMD 

say "Done backing up"

运行此命令失败:

split: “foo/2009-04-27T14-32-04.backup”aa: No such file or directory

我可以通过删除$BACKUP_FILE周围的引号来修复它,其中我设置$SPLIT_CMD.但是,如果我的备份目录的名称空间不起作用.另外,如果我将“echo”命令的输出直接复制并粘贴到终端,那么工作正常.显然,我不了解Bash如何逃避事情.

简单的说,不要把整个命令放在变量中.尝试恢复引用的参数时会遇到很多麻烦.

也:

>避免在脚本中使用全资本变量名.轻松的方式来拍摄自己的脚.
>不要使用反引号,使用$(…)代替,它更好地嵌套.

#! /bin/bash

if [ $# -ne 2 ]
then
    echo "Usage: $(basename $0) DIRECTORY BACKUP_DIRECTORY"
    exit 1
fi

directory=$1
backup_directory=$2
current_date=$(date +%Y-%m-%dT%H-%M-%S)
backup_file="${backup_directory}/${current_date}.backup"

tar cv "$directory" | openssl des3 -salt | split -b 1024m - "$backup_file"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读