我有以下通过搜索Google编写的脚本,它将我的Linux系统备份到了存档文件:该脚本可以在多行代码中显示命令,类似这样,因此以后可以轻松编辑:可以这样格式化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

设置两个选项:



设置主机名


主机名= $(主机名)



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

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


$DATE

避免另一个变量很容易:

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


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

评论


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

–杰伊·拉克鲁瓦(Jay LaCroix)
2012年11月21日在3:26



如果您想将实际的“主机名”放在反勾号(选项卡上方的波浪号“〜”键):/share/Recovery/Snapshots/`hostname`_$DATE.tar.gz

–nerdwaller
2012年11月21日在3:36



随时@JayLaCroix-欢迎来到SU!

–nerdwaller
2012年11月21日,3:40

建议使用$(command)代替`command`。

– andrybak
15年1月25日在10:46

使用withspaces作为分隔符。如果我在第一行使用ssh并在随后的几行使用命令,那么我认为除了反斜杠外,我还需要使用分号。

– Timo
20-11-22在8:23

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


评论


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

–nerdwaller
2012年11月21日,3:35

例如,这对我不起作用。在别名中ub ='source〜/ .bash_aliases \ && source $ HOME / .bash_aliases \ && echo“别名已更新”。

–TheDefinitionist
16-10-5在17:12



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

– Paul
16-10-6在2:58

我可以在右列中排列反斜杠吗?

– SDsolar
17年7月30日在23:45

@SDsolar可以使用空格和制表符将斜杠对齐。

– Paul
17年7月31日在0:53

#3 楼

相同的命令,但每行都有注释:

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


#4 楼

您可以在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 
    /
)
tar ${PARAMS[@]}