在日常网络维护中,经常需要快速处理路由器日志或扫描无线信号数据。这时候写个自动化ref="/tag/134/" style="color:#874873;font-weight:bold;">脚本比手动操作省事得多。比如用Perl写个小工具,读取WiFi信道扫描结果,自动分析干扰情况。而让这个脚本更灵活的关键,就是掌握Perl的命令行参数用法。
通过@ARGV获取输入参数
Perl脚本启动时,命令行上跟的参数会自动存进一个叫@ARGV的数组里。比如运行perl wifi_scan.pl 2.4G -v,那么$ARGV[0]就是"2.4G",$ARGV[1]就是"-v"。可以根据这些值决定脚本行为。
\#!/usr/bin/perl
my $band = $ARGV[0];
my $verbose = ($ARGV[1] eq '-v') ? 1 : 0;
if ($band eq '2.4G') {
print "开始扫描2.4GHz频段\n" if $verbose;
}
用Getopt::Long模块处理复杂选项
当参数变多,比如要设置超时时间、输出路径、是否后台运行,再靠数组下标判断就容易出错。这时候引入Getopt::Long模块会更清晰。它支持长选项,像--timeout=10、--output=log.txt这种写法,脚本也更容易被人看懂。
\#!/usr/bin/perl
use Getopt::Long;
my $channel = 6;
my $timeout = 5;
my $logfile;
GetOptions(
'channel=i' => \\&$channel,
'timeout=i' => \\&$timeout,
'log=s' => \\&$logfile,
);
print "使用信道:$channel,超时:$timeout秒\n";
结合实际场景:动态调整扫描策略
假设你在排查办公室WiFi卡顿问题,想定时采集不同区域的信号强度。可以写一个Perl脚本,通过命令行指定扫描频段、间隔时间和是否保存原始数据。跑的时候直接perl scan_signal.pl --band=5G --interval=30 --log=data.txt,不用每次改代码,效率高不少。
这类小脚本在处理批量任务时特别顺手。参数传得好,同一个程序能适应多种使用场景,既能在笔记本上临时跑,也能放进路由器的cron里定时执行。