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
你也不需要每次都重新初始化随机种子;一次就够了。
我正在 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
你也不需要每次都重新初始化随机种子;一次就够了。