shell编程文本处理求助
小弟最近搞无线,碰到一个脚本问题,需要把自定义的一个无线配置文件转换成wpa_supplicant需要的配置文件,苦于本人不熟悉shell编程,百般尝试都没有成功,特来oschina求助各位大神。
自定义的配置文件格式如下:
ESSID1 PASSWD1 TYPE1 ESSID2 PASSWD2 TYPE2 ......
每行记录一个无线网络,每个记录分3个字段,用空格(或tab)分隔,这3个字段为
ESSID :无线网络名 PASSWD :密码,如无密码,则为(NoPasswd), 含括号 TYPE :机密类型,5种,OPEN、WEP、WPA、WPA2、WPA/WPA2
转化后的文件格式为:
如果TYPE是WPA/WPA2 network={ ssid="SSID1" scan_ssid=1 key_mgmt=WPA-PSK WPA-EAP IEEE8021X auth_alg=OPEN SHARED pairwise=TKIP CCMP psk="PASSWORD1" } 如果TYPE是WEP network={ ssid="SSID1" scan_ssid=1 key_mgmt=NONE auth_alg=OPEN SHARED wep_key0="PASSWORD1" } 如果TYPE是OPEN或密码是(NoPasswd) network={ ssid="SSID1" scan_ssid=1 key_mgmt=NONE } 如上,不同的TYPE对应的生成结果不一样,原配置文件可能有多条记录,相应的生成多个network配置块,结果保存在名为wpa_supplicant.conf的文本文件中
附上本人用c语言写的代码供参考,求bash shell的实现方法
int create_wpasupp_conf(void) { struct netconf_t { char essid[48]; char passwd[48]; char enc[16]; }; FILE *fp_in = fopen(GLOBAL_NETCONF_FILE, "r"); FILE *fp_out = fopen(GLOBAL_WPASUPP_FILE, "w"); if(fp_in == NULL || fp_out == NULL){ printf("fopen errorn"); if(fp_in) fclose(fp_in); if(fp_out) fclose(fp_out); return -1; } fprintf(fp_out, "update_config=1nctrl_interface=/var/run/wpa_supplicantnap_scan=1nn"); while(1){ char buf[1024] = {0}; struct netconf_t conf; memset(&conf, 0, sizeof(conf)); if(fgets(buf, sizeof(buf)-1, fp_in) == NULL) break; if(sscanf(buf, "%s %s %s", conf.essid, conf.passwd, conf.enc) != 3) continue; if(!strcmp(conf.passwd, "(NoPasswd)") || strcasestr(conf.enc, "OPEN")){ /* if no passwd, force enc=OPEN */ fprintf(fp_out, "network={ntssid="%s"ntscan_ssid=1ntkey_mgmt=NONEn}nn", conf.essid); } else if(strcasestr(conf.enc, "WPA")){ /* WPA or WPA2 */ fprintf(fp_out, "network={ntssid="%s"ntscan_ssid=1ntkey_mgmt=WPA-PSK WPA-EAP IEEE8021Xntauth_alg=OPEN SHAREDntpairwise=TKIP CCMPntpsk="%s"n}nn", conf.essid, conf.passwd); } else if(strcasestr(conf.enc, "WEP")){ /* WEP */ fprintf(fp_out, "network={ntssid="%s"ntscan_ssid=1ntkey_mgmt=NONEntauth_alg=OPEN SHAREDntwep_key0="%s"n}nn", conf.essid, conf.passwd); } } if(fp_in) fclose(fp_in); if(fp_out) fclose(fp_out); return 0; }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
额,在百度知道上的问题有答案了,附个连接
http://zhidao.baidu.com/question/1667647570039799427.html?quesup2&oldq=1