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


97

我有以下通过搜索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脚本?

Answers:


129

您需要做的就是在每行末尾添加“ \”,这应该很好。

因此,您将看起来像:

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 = $(主机名)

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

    因此它看起来像上面。这只是使命令在使用之前运行。

$DATE

避免另一个变量很容易:

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

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


多谢你们。最后一件事。我的脚本的文件名部分似乎存在问题:$ HOSTNAME_ $ DATE.tar.gz现在运行脚本时,输出文件为:20121120.tar.gz
Jay LaCroix

如果您想将实际的“主机名”放回去号(制表符上方的波浪号“〜”键): /share/Recovery/Snapshots/`hostname`_$DATE.tar.gz
nerdwaller 2012年

随时@JayLaCroix-欢迎来到SU!
nerdwaller 2012年

1
这是推荐使用$(command)来代替`command`
andrybak

9

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

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 \
/

it @Paul!击败我:D
nerdwaller 2012年

@nerdwaller嘿,我以为你是第一个进入的!
保罗

我回去更新它以使其更有用并获得缩进。我总的来说爱SU。
nerdwaller 2012年

例如,这对我不起作用。在alias ub='source ~/.bash_aliases \ && source $HOME/.bash_aliases \ && echo "aliases updated."';
TheDefinitionist

1
@TheDefinitionist听起来与此问题不同。也许打开一个新问题?
保罗

5

相同的命令为:

tar -cvpzf /share/Recovery/Snapshots/$(hostname)_$(date +%Y%m%d).tar.gz `#first comment` \
    --exclude=/proc `#second comment` \
    --exclude=/lost+found `# and so on...` \
    --exclude=/sys \
    --exclude=/mnt \
    --exclude=/media \ 
    --exclude=/dev \
    --exclude=/share/Archive \
    /
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.