Разработайте сценарий bash с использованием переменных

Вообще-то я понял, что на MikroTik v6.25 отключен PPTP, т.е. IP-адрес 172.16.100.2, поэтому я не мог подключиться к VPN-серверу.

После включения PPTP на MikroTik я могу подключиться к серверу следующим образом:

me@linux-box:~> sudo pppd call TUNNEL debug nodetach
using channel 15
Using interface ppp0
Connect: ppp0 <--> /dev/pts/5
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa905bd9b> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa905bd9b> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa905bd9b> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa905bd9b> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa905bd9b> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xa905bd9b> <pcomp> <accomp>]
0
01.11.2018, 15:27
3 ответа

Проблема, вероятно, заключается в специфическом форматировании вывода lsusb:

% usbid=1d6b:0001
% lsusb -d $usbid | awk '{ print "/dev/bus/usb/" $2 "/" $4 }'
/dev/bus/usb/001/001:

Обратите внимание на дополнительное двоеточие в конце. К счастью, вы можете легко удалить его как в awk, так и в оболочке, вот пример awk:

% usbid=1d6b:0001
% lsusb -d $usbid | awk '{ a = $4; sub(/:$/, "", a); print "/dev/bus/usb/" $2 "/" a }'
/dev/bus/usb/001/001
1
28.01.2020, 02:25

Похоже, это должно работать, за исключением того, что вывод lsusbсодержит двоеточие после номера устройства:

$ lsusb -d 1d6b:0002
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Таким образом, переменная devisбудет содержать это, и в конечном результате вы попытаетесь получить доступ к /dev/bus/usb/001/001:с двоеточием.

Вы можете избавиться от завершающего двоеточия с суффиксом -, удалив расширение, например:

devis=${devis%:}

Другой способ сделать это только в оболочке (безawk)— просто readвывести lsusb. Это берет только первую строку выходов lsusb, их может быть больше, если есть более одного совпадающего устройства.

В оболочках с заменой процесса:

read x buss x devis x < <(lsusb -d 04f9:0272)
devis=${devis%:}
chmod +w "/dev/bus/usb/$buss/$devis"

Или с трубой:

lsusb -d 04f9:0272 | {
   read x buss x devis x
   devis=${devis%:}
   chmod +w "/dev/bus/usb/$buss/$devis"
}
1
28.01.2020, 02:25

В комментариях вы предоставляете вывод ls -lдля вашего устройства:

crw-rw-r-- 1 root lp 189, 1 Jul 24 18:48 /dev/bus/usb/001/002

Вы видите, что у пользователя и группы уже есть права на чтение/запись. Поэтому, если вы добавите своих пользователей в группу lp, ни один из этих скриптов не понадобится.

1
28.01.2020, 02:25

Теги

Похожие вопросы