自动WAN IP转发

时间:2017-11-30 16:32:03

标签: bash cron

我想cronjob我的脚本:

  1. 获取我的WAN地址并将其写入文件。
  2. 将现有文件与新文件进行比较。
  3. 如果新版本与旧版本不同,则应将其通过电子邮件发送给我。
  4. 如果它们不同,它应该用旧的覆盖旧的。
  5. 但它实际上不起作用,我不知道为什么。

    它通过电子邮件发送WAN2.txt文件,无论它是否相同,也不会覆盖它。

    #!/bin/bash                                                 
    
    wan1=/home/user/Scripts/wanip.txt                        
    wan2=/home/user/Scripts/wanip2.txt                       
    
    
    dig +short myip.opendns.com @resolver1.opendns.com>$wan2    
    
    if [ "$wan1" != "$wan2" ]                                   
    
    then                                                        
            /usr/bin/sendEmail -f showname@example.com -t sendto@example.com -u Wanip -m "hallo" -s smtp.example.com:587 -xu user -xp passwort -a $wan2
    
    elif [ "$wan1" != "$wan2" ]                                 
    
    then                                                        
            $wan2>$wan1                                         
    
    else exit                                                   
    
    fi                                                          
    

1 个答案:

答案 0 :(得分:1)

您正在比较变量,而不是文件的内容。

在您的情况下,变量$wan1永远不会与$wan2保持相同的值,因此您的脚本将始终向您发送电子邮件。使用cmpdiff等来比较文件。

此外,您的ifelif具有相同的条件,这意味着当if被触发时,您的elif不会。

$wan1 > $wan2也不正确,因为它会搜索名为/home/user/Scripts/wanip.txt程序并将输出重定向到/home/user/Scripts/wanip2.txt。使用cp覆盖或更改您的行cat "$wan2" > "$wan1"

#!/bin/bash                                                 

wan1=/home/user/Scripts/wanip.txt                        
wan2=/home/user/Scripts/wanip2.txt                       

dig +short myip.opendns.com @resolver1.opendns.com > "$wan2"    

if ! cmp --quiet "$wan1" "$wan2"; then                                                        
   /usr/bin/sendEmail -f showname@example.com -t sendto@example.com -u Wanip -m "hallo" -s smtp.example.com:587 -xu user -xp passwort -a "$wan2"  
   cp -f "$wan2" "$wan1"                                                                                         
fi