我使用以下shell脚本来获取路由器的代码和mac,但总是得到错误的结果。 mac参数放在url的前面,如下所示。
&安培; MAC = 00:50:56:2A:E6:20example代码= jd8do0q7
#!/bin/sh
route_code=$(cat /etc/code)
route_mac=`ifconfig eth0|grep eth0|awk '{print $5}'`
curl -o /tmp/updateip --dump-header - "http://example.com? code=${route_code}&mac=${route_code}"
update_res=`cat /tmp/updateip`
echo ${update_res}
答案 0 :(得分:2)
/ etc / code不是标准的Unix文件,但其内容与您的问题相关,并且您没有指定这些内容是什么。从你的问题来看,我猜它包含jd8do0q7后跟一个回车符(并且可能后面跟一个换行符,但是$()
结构无论如何都会被删除,所以我们可以忽略它),当你正在打印传递给curl的URL的值(但是你打印它),$ route_code拾取的回车符将光标移回到行的开头,所以剩下的就是文本会覆盖一些已经打印的文本,使得错误地显示& mac = 00:50:56:2A:E6:20文本已放置在URL的前面。
暂时忽略回车符,您的网址正在构建正确,但我不知道为什么?
和code=
之间似乎有很多空格,而您好像是因为mac=${route_code}
应该是mac=$route_mac
而导致错误(在这些情况下,括号也是可选的)。
您可以通过打印URL来测试是否存在回车符(您可以通过将其分配给变量来执行此操作,而不是在curl命令中将其构造为内联,然后回显它)并将其传递给{{ 1}},将不可打印的字符显示为可打印字符;回车将显示为cat -vet
,换行符为^M
。
要删除回车,你可以用文本编辑器(例如vim)手动编辑文件,通过sed或tr管道将其删除(例如$
),或使用任何dos-to- unix转换实用程序,例如Cygwin附带的dos2unix(但我不认为你在Cygwin上,因为Cygwin / Windows没有ifconfig;它有ipconfig)。
如果我的猜测是正确的,那么这应该有效:
tr -d '\r'