Linux Bash 脚本,单个命令但多行?

Linux Bash 脚本,单个命令但多行?

我通过搜索 Google 编写了以下脚本,它将我的 Linux 系统备份到档案中:

#!/bin/bash
# init

DATE=$(date +20%y%m%d)

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev --exclude=/share/Archive /

这可行,但我想知道我是否可以格式化脚本以在多行上显示命令,如下所示,以便以后轻松编辑:

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz 
--exclude=/proc 
--exclude=/lost+found 
--exclude=/sys 
--exclude=/mnt 
--exclude=/media 
--exclude=/dev 
--exclude=/share/Archive 
/

这样以后阅读和编辑起来就更容易了。可以用这种方式格式化 Bash 脚本吗?

答案1

您需要做的就是\在每行末尾添加一个(反斜杠)就可以了。

因此你的看起来将是这样的:

tar -cvpzf /share/Recovery/Snapshots/$(hostname)_$(date +%Y%m%d).tar.gz \
    --exclude=/proc \
    --exclude=/lost+found \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/media \ 
    --exclude=/dev \
    --exclude=/share/Archive \
    /

一些捷径

(根据您对设置 $HOSTNAME 的评论更新)

$HOSTNAME

有两个选项可以设置:

  1. 设置主机名

HOSTNAME=$(主机名)

  1. 使用命令替换(例如$(command)

所以它看起来就像上面那样。这只是在使用命令之前运行它。

$DATE

另一个可以轻松避免的变量是:

$(hostname)_$(date +%Y%m%d).tar.gz \

$ man date将具有日期选项的格式,上面是 YYYYmmdd

答案2

使用反斜杠在下一行继续命令:

tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz \
--exclude=/proc \
--exclude=/lost+found \
--exclude=/sys  \
--exclude=/mnt  \
--exclude=/media  \
--exclude=/dev \
--exclude=/share/Archive \
/

答案3

您可以在 bash 中使用它

PARAMS=(
    -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz 
    --exclude=`enter code here`/proc 
    --exclude=/lost+found 
    --exclude=/sys 
    --exclude=/mnt
    # this is a comment 
    --exclude=/media 
    --exclude=/dev 
    # --exclude=/something
    --exclude=/share/Archive 
    /
)
# the quotes are needed to preserve params with spaces
tar "${PARAMS[@]}"

答案4

阿克塞尔·海德提供了反斜杠的一个很好的替代方案。有两点需要注意:

  1. 该命令可以包含在列表中,并且
  2. 列表的使用应该用双引号引起来"${PARAMS[@]}",以便参数中的任何空格都会被保留。
/bin/bash #!/bin/bash

参数=(
    展示
    你好,
    世界
    “多词”

功能展示 {
    echo --- 显示 \""$@"\" 作为参数 ---
    对于我在“$@”中;做
        回显 i=$i
    完毕
}

${参数[@]}
“${params[@]}”

输出

$ bash 测试.sh
--- 显示“hello, world multi word”作为参数---
我=你好,
我=世界
i=多
我=单词
--- 显示“hello, world multi word”作为参数---
我=你好,
我=世界
i=多词

相关内容