URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8263
[ Назад ]

Исходное сообщение
"Помогите доработать (парсинг)"

Отправлено Amiri , 14-Май-09 10:22 
Суть в следующем хочется сделать скрипт чтобы он проверял в файле один параметр например слово UP и выполнял какое нибудь действие
если слова UP нету  то ничего не выполнять
соответственно написал такой скриптик

#!/bin/sh
cat run.pid| grep -v '^ *#'| while read text; do
if [ $text = "UP" ];then
echo "yes"
else
echo "no"
fi
done

но получаеться что если перед UP поставить пробел то скрипт не отрабатывает или если несколько пробелов и завершаеться такой вот ерундой
./to.sh: test: argument expected
пример файла run.pid
-
cat run.pid

   1

  UP

   0

-
посоветуйте что я не так делаю


Содержание

Сообщения в этом обсуждении
"Помогите доработать (парсинг)"
Отправлено Pahanivo , 14-Май-09 12:18 
вы все делаете не так
man sh
man grep


"Помогите доработать (парсинг)"
Отправлено phpcoder , 15-Май-09 11:11 
>#!/bin/sh
>cat run.pid| grep -v '^ *#'| while read text; do
>if [ $text = "UP" ];then
>echo "yes"
>else
>echo "no"
>fi
>done

Можно проще:

if fgrep -qs 'UP' run.pid; then
  echo 'yes'
else
  echo 'no'
fi

>но получаеться что если перед UP поставить пробел то скрипт не отрабатывает
>или если несколько пробелов и завершаеться такой вот ерундой
>./to.sh: test: argument expected

Потому что в этом случае $text является пустым и ваш if выглядит так:

if [ = "UP" ];then

что неверно. Нужно взять $text в кавычки:

if [ "$text" = "UP" ];then

Советую привыкать "кавычить" переменные.