下面是我编写的用于备份路由器和 adsl 调制解调器的脚本,有什么方法可以将该脚本压缩为更少的行吗?
如您所见,每个路由器都有不同的结构。
#!/bin/sh
http_txt="10.0.0.59"
cgi="10.0.0.60"
http="10.0.0.66"
date="$(date +%d-%m-%y)"
dest="/home/yamash/"
archive_file="$dest$date.tgz"
local="$dest$date"
login="admin"
pass="PASSWORD"
mkdir $local
cd "$local"
echo "Iniciando Backup"
for http_txt_for in $http_txt; do
echo "$http_txt_for"
wget --auth-no-challenge --user=$login --password=$pass $http_txt_for/config.dat -O $http_txt_for.dat
done
for cgi_for in $cgi; do
echo "$cgi_for"
wget --user=$login --password=$pass $cgi_for/cgi-bin/export_settings.cgi -O $cgi_for.dat
done
for http_for in $http; do
echo "$http_for"
wget --user=$login --password=$pass $http_for/rom-0 -O $http_for
done
cd ..
tar czf $archive_file $local
#rm -R $archive_file $local
echo "Backup Finalizado"
答案1
一些可能性:
- 如果变量只有一个值,则不需要循环。
- 使用详细模式,而不是
echo
输入调试信息。echo
像这样的内容就像注释:它们不是代码,可能会过时。打印什么实际上继续进行对于调试更有用。 - 您可以使用
wget --output-document=/path/to/file
来避免在 tingcd
之前使用 ingwget
。 - 您可以使用在没有 的情况
tar -C ..
下在执行操作之前转到父目录。tar
cd
为什么要创建目录和文件名中是否包含日期?您只需要在 tarball 名称中添加日期指示符。这种事情的典型解决方案是
tmp="$(mktemp -d)" trap -- 'rm -frv -- "$tmp"' EXIT cd -- "$tmp"
并将临时文件存储在那里。这也消除了前两个技巧的需要。
- 如果您只需要一次日期,则可以内联
$date
。