LINUX.ORG.RU

bash скрипт не отрабатывает условие

 , , ,


0

1

Добрый день! Ребят подскажите, что не так. Пишу простейший скрипт:

for x in `cat hosts`; do
state=$(sshpass -pPassword ssh -q $x ipmcget -d powerstate |grep Power |awk '{print$4}')
    if [ $state = Off ]; then
       echo $x
    fi;
done
Значения в самой переменной должны возвращаться либо On, либо Off.

Выполняя в терминале все работает, но в скрипте с использованием условия уже нет.


Вставтье в скрипт ″echo "|"$state"|"″ и приходите, когда будет выводится ″|Off|″, а условие не сработает.

mky ★★★★★ ()
Последнее исправление: mky (всего исправлений: 1)

Ещё замечание: grep|awk замени на awk '/Power/ { print $4 }'

beastie ★★★★★ ()

if [ $state = Off ]; then

Если у тебя действительно bash, то должно быть

if [ "$state"=="Off" ]; then
(т. е. с кавычками вокруг $state, == вместо = и без пробелов вокруг ==). А поскольку внутри условия всего одна команда, то можно даже так:
[ "$state"=="Off" ] && echo $x
.

dexpl ★★★★★ ()

for x in `cat hosts`

Ошибка номер один при написании программ на языке командной оболочки.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Да, насчет = и пробелов погорячился, но кавычки нужны.

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

А если $state пустая? Лучше уж по дедовски [«x$state»==«xOff»]

imul ★★★★★ ()
Ответ на: комментарий от imul

А если $state пустая?

Вот на этот случай кавычки и нужны — if [ "$state" = "Off" ]; then echo $x ; fi отработает при пустой $state нормально, а без кавычек скажет

bash: [: =: unary operator expected

dexpl ★★★★★ ()

Кавычки я ставил, они не помогают.

amkgi ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.