我通过搜索 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
有两个选项可以设置:
- 设置主机名
HOSTNAME=$(主机名)
- 使用命令替换(例如
$(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
阿克塞尔·海德提供了反斜杠的一个很好的替代方案。有两点需要注意:
- 该命令可以包含在列表中,并且
- 列表的使用应该用双引号引起来
"${PARAMS[@]}"
,以便参数中的任何空格都会被保留。
/bin/bash #!/bin/bash 参数=( 展示 你好, 世界 “多词” ) 功能展示 { echo --- 显示 \""$@"\" 作为参数 --- 对于我在“$@”中;做 回显 i=$i 完毕 } ${参数[@]} “${params[@]}”
输出
$ bash 测试.sh --- 显示“hello, world multi word”作为参数--- 我=你好, 我=世界 i=多 我=单词 --- 显示“hello, world multi word”作为参数--- 我=你好, 我=世界 i=多词