Bash 和 Awk 异常行为 (DD-WRT)

Bash and Awk Strange Behavior (DD-WRT)

我正在 DD-WRT Web 界面中测试一个小脚本,该脚本随机化路由器的 MAC 地址。该脚本使用 awk 进行随机化。当 没有 shebang (#!/bin/bash) 使用 awk 时,该脚本有效,反之亦然(没有 awk 但包括 shebang)。但是,当同时使用 shebang awk 时,该脚本不起作用。

有效(使用 awk,但没有 shebang):

nvram set mac_clone_enable=1;
nvram set def_hwaddr=$(awk 'function m(n){srand(systime()+n);return":"(10+int(rand()*99));}END{print "A4"m(1)m(2)m(3)m(4)m(5);}');
nvram commit;
rc restart;

也有效(有 shebang,但没有 awk):

#!/bin/bash

nvram set mac_clone_enable=1;
nvram set def_hwaddr="02:44:55:66:77:88";
nvram commit;
rc restart;

不起作用(shebang 和 awk):

#!/bin/bash

nvram set mac_clone_enable=1;
nvram set def_hwaddr=$(awk 'function m(n){srand(systime()+n);return":"(10+int(rand()*99));}END{print "A4"m(1)m(2)m(3)m(4)m(5);}');
nvram commit;
rc restart;

我需要脚本来使用 awk 和 shebang,以便它可以用于 cron 作业。可能是什么问题?

awk 需要一个输入文件。您可以使用 BEGIN

重写
awk 'function r() {return ":"(10+int(rand()*99))} 
     BEGIN{srand(); print "A4" r() r() r() r() r()}'

返回

A4:72:63:62:91:102

你也不需要每次都重新初始化随机种子;一次就够了。