我需要创建一个脚本来解除/绑定一台Linux机器上的所有USB。AWK错误 - 在grep或grep附近的语法错误
为此,我需要运行:
-t的lsusb至极的回报:
[email protected]:~# lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/10p, 12M
|__ Port 4: Dev 2, If 0, Class=vend., Driver=ftdi_sio, 12M
|__ Port 6: Dev 4, If 0, Class=HID, Driver=usbhid, 1.5M
|__ Port 6: Dev 4, If 1, Class=HID, Driver=usbhid, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/10p, 480M
现在,在这个例子中,我需要运行:
// disable the bus 1, port 1
echo '2-4' | tee /sys/bus/usb/drivers/usb/unbind
// disable the bus 1, port 2
echo '2-6' | tee /sys/bus/usb/drivers/usb/unbind
// enable the bus 1, port 1
echo '2-4' | tee /sys/bus/usb/drivers/usb/bind
// enable the bus 1, port 2
echo '2-6' | tee /sys/bus/usb/drivers/usb/bind
为了实现这一目标通过创建脚本(我对Linux非常新颖),我做了以下操作:
#!/bin/bash
lsusb -t | awk '{
bus="";
if($1=="|__")
print "Child USB Port: ",$3;
else if ($1=="/:") {
print $3;
var= $(echo $3 | grep -o "[1-9]");
echo $var;
}
}'
var=`echo "02.Port" | grep -o "[1-9]"`;
echo $var;
var=`echo "02.Port" | grep -o "[0-9]\{2\}"`;
echo $var;
我尝试了所有可能的组合,以便设置var。我总是得到一个错误。
awk: line 8: syntax error at or near grep
任何人都可以提出解决方案或其他方法吗?
感谢您的阅读。
----------------------更新
感谢埃德莫顿,输入是命令的结果-t的lsusb(在我结束)
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/10p, 12M
|__ Port 4: Dev 2, If 0, Class=vend., Driver=ftdi_sio, 12M
|__ Port 6: Dev 4, If 0, Class=HID, Driver=usbhid, 1.5M
|__ Port 6: Dev 4, If 1, Class=HID, Driver=usbhid, 1.5M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/10p, 480M
而我想解析这些信息以获得总线号和端口号。所以输出应该是:
2-1
2-4
2-6
2-6
1-1
但是,我只需要在“儿童”的端口,所以我需要以下的输出:再次
2-4
2-6
2-6
谢谢!
你有awk与shell脚本混淆在这里。几乎没有一个“awk脚本”实际上是一个有效的awk脚本。 – 2014-11-04 16:00:12
也不宜用陈旧过时的背抽动,这样使用括号:'VAR = $(回声“02.Port” | grep的-o“[1-9]”);' – Jotne 2014-11-04 16:02:17
感谢您的意见!我将开始使用$(),而不是背抽动 – Juano7894 2014-11-04 17:16:53