Bash 自动广域网IP转发

Bash 自动广域网IP转发,bash,cron,Bash,Cron,我想在我的脚本中添加以下内容: 获取我的WAN地址并将其写入文件。 将现有文件与新文件进行比较。 如果新的和旧的不一样,应该发邮件给我。 如果它们不同,它应该用新的覆盖旧的。 但它实际上不起作用,我也不知道为什么 它通过电子邮件将WAN2.txt文件发送给我,不管它是否相同,它也不会覆盖它 #!/bin/bash wan1=/home/user/Scripts/wanip.txt

我想在我的脚本中添加以下内容:

获取我的WAN地址并将其写入文件。 将现有文件与新文件进行比较。 如果新的和旧的不一样,应该发邮件给我。 如果它们不同,它应该用新的覆盖旧的。 但它实际上不起作用,我也不知道为什么

它通过电子邮件将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                                                          

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

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

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

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


它实际上不起作用你什么意思?你有错误吗?它说什么?你的脚本不工作或者你不能cron它?THX这一个为我工作。但首先,我没有设置变量,只是设置了完整路径,它不起作用。您不能使用[path!=path2]来比较文件。它比较字符串。并且文件路径在您的情况下是不同的,因此您的情况总是会被触发。您需要使用cmp等来比较文件。
#!/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