bash:如何解析一个命令的结果以用作另一个命令的匹配

时间:2015-08-05 18:38:33

标签: bash grep

我的脚本的目的是寻找USB打印机,并确保根据连接的内容填充属性文件。

我目前正在做的是:

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'。如果两者都匹配,则输出'OK,否则输出缺少的打印机

2 个答案:

答案 0 :(得分: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 :(得分:1)

您可以使用此脚本:

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

[[ $(grep -cFf <(printf "/dev/usb/%s\n" "${arr[@]}") pos.properties) -eq ${#arr[@]} ]] && 
    echo "OK" || echo "missing printer(s)"