The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
странное поведение конструкции  if  else  fi, !*! BlackBlock, 23-Фев-11, 20:56  [смотреть все]
сегодня столкнулся с такой проблемой, конструкция странно себя ведет

Синтаксис:

    if тестовые_команды; then
        команды-следствия;
    [elif сверхтестовые_команды; then
      сверхследcтвия;]
    [else альтернативные_следствия;]
    fi

сначала начал править скрипт, но вижу что он не так как надо работает
затем создал пробный скрипт чисто для проверки работы конструкции
его я и выложу для разбора полетов, сразу скажу что это лишь малая часть того что
я перепробовал (а пробовал я заключать аргументы оператора  if  и в круглые, и в квадратные и в фигурные скобки,
пробовал подставлять непосредственно числа которые сравнивал операторами = , !=
результат сложения, типа  if 2+3=5; then ...
строковые переменные, типа  if "text"="text"; then ...

вообщем что я ни пробовал, нифига не похоже на нормальную работу
запускал на CentOS 5.5 и на Mandriva 10.2
.... у меня уже голова идет кругом, так и свихнуться запросто можно -)))

вот собственно сам скрипт, если кто хочет, может сам проверить работу
.... и может кто наставит на путь истинный )))

#!/bin/bash

# создайте в своей домашней папке папку /pro
# туда поместите данный скрипт, что бы воочию убедиться как все работает

perem1=2
perem2=33
perem3="lalala"


if ($perem1=$perem2); then
  echo "resultate 1" > /home/$LOGNAME/pro/result_01;
else
#выводит это значение (вродебы как правильно)
  echo "resultate 2" > /home/$LOGNAME/pro/result_02;
fi

if ($perem1!=$perem2); then
  echo "resultate 3" > /home/$LOGNAME/pro/result_03;
else
#выводит это значение (неправильно)
  echo "resultate 4" > /home/$LOGNAME/pro/result_04;
fi
#можно подставлять любые значения perem1 perem2, чтобы они были равны или не равны
#результат будет всегда - команды за else
#----------------------------

if (perem1=perem2); then  #на эту команду не ругается
#выводит это значение (неправильно) все наоборот
  echo "resultate 5" > /home/$LOGNAME/pro/result_05;
else
  echo "resultate 6" > /home/$LOGNAME/pro/result_06;
fi

if (perem1!=perem2); then
  echo "resultate 7" > /home/$LOGNAME/pro/result_07;
else
#выводит это значение (неправильно) все наоборот
  echo "resultate 8" > /home/$LOGNAME/pro/result_08;
fi

if [$perem3="lalala"]; then
  echo "resultate 9" > /home/$LOGNAME/pro/result_09;
else
#выводит это значение (неправильно) все наоборот
  echo "resultate 10" > /home/$LOGNAME/pro/result_10;
fi

if ($perem3!="lalala"); then
  echo "resultate 11" > /home/$LOGNAME/pro/result_11;
else
#выводит это значение (вродебы как правильно) но пугает то что постоянно выполняет только команды за else
  echo "resultate 12" > /home/$LOGNAME/pro/result_12;
fi

#----------------------------------------------------------------

да и еще вывод консоли такой, нумерация строк немного не такая так как я удалил несколько строк комментариев, но не в этом суть
./proba2: line 20: 2=33: command not found
./proba2: line 27: 2!=33: command not found
./proba2: line 42: perem1!=perem2: command not found
./proba2: line 49: [lalala=lalala]: command not found
./proba2: line 56: lalala!=lalala: command not found
почему он результаты сравнения пытается принять за команды




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру