0

我正在 DD-WRT Web 界面中测试一个随机化路由器 MAC 地址的小脚本。该脚本使用 awk 进行随机化。该脚本在 awk不带shebang (#!/bin/bash) 时有效,反之亦然(不带 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 作业。可能是什么问题呢?

4

1 回答 1

1

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

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

于 2017-11-17T22:49:35.887 回答