Вывод команды синтаксического анализа в скрипте Bash - PullRequest
4 голосов
/ 25 ноября 2010

Я хочу запустить команду, которая выдаст следующий вывод, и проанализировать ее:

[VDB VIEW]
[VDB] vhctest
        [BACKEND] domain.computername: ENABLED:RW:CONSISTENT
        [BACKEND] domain.computername: ENABLED:RW:CONSISTENT
        ...

Меня интересуют только некоторые ключевые работы, такие как «ENABLED» и т. Д. Я не могу искать только ENABLED, поскольку мне нужно анализировать каждую строку за раз.

Это мой первый сценарий, и я хочу знать, может ли кто-нибудь мне помочь?

EDIT: Теперь у меня есть:

cmdout=`mycommand`

while read -r line
do
   #check for key words in $line
done < $cmdout

Я думал, что сделал то, что хотел, но всегда кажется, что перед выводом команды всегда выводится следующее.

. / Myscript.sh: 29: невозможно открыть ...: такого файла нет

Я не хочу писать в файл, чтобы добиться этого.

Вот псевдокод:

cmdout=`mycommand`

loop each line in $cmdout
   if line contains $1
       if line contains $2
            output 1
       else
            output 0

Ответы [ 3 ]

5 голосов
/ 25 ноября 2010

Причина ошибки в том, что

done < $cmdout

считает, что содержимое $cmdout является именем файла.

Вы можете сделать:

done <<< $cmdout

или

done <<EOF
$cmdout
EOF

или

done < <(mycommand)    # without using the variable at all

или

done <<< $(mycommand)

или

done <<EOF
$(mycommand)
EOF

или

mycommand | while
...
done

Однако последний создает подоболочку, и любые переменные, заданные в цикле, будут потеряны при выходе из цикла.

0 голосов
/ 25 ноября 2010
$ cat test.sh
#!/bin/bash
while read line ; do
if [ `echo $line|grep "$1" | wc -l` != 0 ]; then
    if [ `echo $line|grep "$2" | wc -l` != 0 ]; then
        echo "output 1"
    else
        echo "output 0"
    fi
fi

done

ИСПОЛЬЗОВАНИЕ

$ cat in.txt | ./test.sh ENABLED  RW
output 1
output 1

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...