Shell 脚本备份路由器

Shell 脚本备份路由器

下面是我编写的用于备份路由器和 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之前使用 ing wget
  • 您可以使用在没有 的情况tar -C ..下在执行操作之前转到父目录。tarcd
  • 为什么要创建目录文件名中是否包含日期?您只需要在 tarball 名称中添加日期指示符。这种事情的典型解决方案是

    tmp="$(mktemp -d)"
    trap -- 'rm -frv -- "$tmp"' EXIT
    cd -- "$tmp"
    

    并将临时文件存储在那里。这也消除了前两个技巧的需要。

  • 如果您只需要一次日期,则可以内联$date

相关内容