2015-08-05 2 views
1

Цель моего скрипта - искать принтер usb и следить за тем, чтобы файл свойств был заполнен в соответствии с подключенным.bash: как разобрать результаты одной команды для использования в качестве соответствия для другой команды

То, что я сейчас делаю это:

ls -l /dev/usb | grep 'lp' 

возвращает что-то вроде:

crw-rw---- 1 root lp 180, 1 Aug 5 11:32 lp1 
crw-rw---- 1 root lp 180, 2 Aug 5 11:32 lp2 

, который я хотел бы принимать значения LP1 и LP2, и проверить мой файл pos.properties :

machine.printer=epson\:file,/dev/usb/lp2 
machine.printer.3=epson\:file,/dev/usb/lp4 
machine.printer.2=epson\:file,/dev/usb/lp1 

для строки '/ DEV/USB/lp1', '/ DEV/USB/LP2. Если оба матча, выход «ОК, в противном случае, выход отсутствует принтер (ы)

ответ

2
ok=1 
for printer in /dev/usb/lp*; do 
    if ! grep -wq "$printer" pos.properties; then 
     ok=0 
     echo "Missing $printer" 
     break 
    fi 
done 
((ok)) && echo "OK" 

В зависимости от формата pos.properties, возможно, потребуется более конкретную команду , например,

if ! grep -wq "$printer" <(cut -d, -f2 pos.properties); then 
1

Вы можете использовать этот скрипт:

cd /dev/usb/ 
arr=(lp*) 

[[ $(grep -cFf <(printf "/dev/usb/%s\n" "${arr[@]}") pos.properties) -eq ${#arr[@]} ]] && 
    echo "OK" || echo "missing printer(s)" 
Смежные вопросы