我需要創建一個腳本來解除/綁定一臺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