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

Исходное сообщение
"Непонятный sh"

Отправлено denb , 18-Май-02 12:00 
Народ помогите!
делаю так:
#!/bin/sh
read z
if [ "$z" = "Y" ]; then
      echo "Yes"
else
      echo "No"
fi
Все время выводит "Yes" и неважно, что ввожу я

Содержание

Сообщения в этом обсуждении
"RE: Непонятный sh"
Отправлено XMan , 18-Май-02 14:31 
По идее должно быть так:

if [ "$z" == "Y" ];


"RE: Непонятный sh"
Отправлено Vladislav , 18-Май-02 15:56 
>По идее должно быть так:
>
>if [ "$z" == "Y" ];
>
Но это же не C++!!!


"RE: Непонятный sh"
Отправлено XMan , 18-Май-02 17:38 
Ну в bash у меня и оригинал работал нормально :))
Между прочим, "!=" - тоже сишная конструкция :))

"RE: Непонятный sh"
Отправлено Vladislav , 18-Май-02 15:53 
Чудак ты! :)
Не надо проверять сходство строк такими операторами!!!
Это опасно! Надо делать так:
==========================================
# My first shell program
#!/bin/sh
trap "" 2 3 # :) Класная тема, попробуй!!!
echo -n "Select variable : "
read ANS_
test $ANS_
if [ $? != 0 ]; then
exit 1
fi
case $ANS_ in
       y)
         echo 'You put "y"!'
       ;;
       n)
         echo 'You put "n"!'
       ;;
       *)
         echo 'I do not know, what you put!'
       ;;
esac
#
# А вообще набери
man sh
# Либо внимательно рассмотри /etc/rc
# Удачи тебе!
# Будут еще вопросы, пиши мне на мыло
# Snail_Unix@ukr.net
# :)))

"RE: Непонятный sh"
Отправлено denb , 18-Май-02 15:56 
Спасибо , помогли!

"RE: Ну нагородили !"
Отправлено Арлекин , 19-Май-02 11:35 
В if надо было что-то одно оставить без апострофов. И все. Кстати: bash наследник sh, но не более того.

"RE: Ну нагородили !"
Отправлено denb , 24-Май-02 10:31 
>В if надо было что-то одно
>оставить без апострофов. И все.
>Кстати: bash наследник sh, но
>не более того.

Пробовал я так ставить  - не получилось


"RE: Ну нагородили !"
Отправлено XMan , 24-Май-02 13:07 
Ну вопрошающий не сказал, в какой системе это пишется, а в большинстве линухов делается симлинк /bin/sh на /bin/bash.
А оригинал у меня все равно работал без изменений :))

"RE: Непонятный sh"
Отправлено Арлекин , 28-Май-02 08:46 
08:42:22 @newgoblin:Test >./t.sh
Y
Yes
08:42:29 @newgoblin:Test >./t.sh
N
No
08:42:33 @newgoblin:Test >
Xman прав.
В 6 соляре исходный вариант (без изменений) работает как показано выше. Судя по всему линуксоиды в очередной раз хотели сделать как лучше, а сляпали как в России. Увы.

"RE: Непонятный sh"
Отправлено denb , 29-Май-02 10:51 
система FreeBSD 4.4 и получилось у меня только с case вариантом


"RE: Непонятный sh"
Отправлено Арлекин , 29-Май-02 12:28 
Будем знать, что у бсдюков тоже рыльце в ...
Хотя case в шеллах есть ни что иное, как операция ==, которая вообще-то валидна в отношении строк с большими допущениями.  И не с проста в джяве, например, операция == по отношению к строкам это не тоже самое, что в отношении скажем int. Строки там в switch в качестве аргумента недопустимы, а гарантированное сравнение строк возможно только через метод...
Лирика, впрочем, все это, обеденный перерыв так сказать.

"RE: Непонятный sh"
Отправлено J , 02-Июл-02 15:13 
>система FreeBSD 4.4 и получилось у меня только с case вариантом

ну так во freebsd sh это на самом деле ash, у которого свои заморочки.



"RE: Непонятный sh"
Отправлено XMan , 29-Май-02 14:37 
Ну это ты зря :))
Я ж как раз на линухе, причем российском, (ASP Linux 7.2), и проверял :))

"RE: Непонятный sh"
Отправлено Арлекин , 29-Май-02 15:41 
Чего зря ? Не надо мух с котлетами ))
Есть шелл называемый sh. Bourne который. Это своего рода шелл-стандарт для *никсов. Наравне с csh. От него родился bash, ksh и еще куча других. Даже  Х-овый есть. Но это все ДРУГИЕ шеллы. Также как java 1.1 и java 1.2 или С и С++. Ну представь себе софтлинк отправляющий из плюсового С в K&R. Это как ?
ИМХО: дурное дело затеяли народу мозги пудрить. Сделай lsh какой-нить и живи в шоколаде, а "святое незамай" :))
Дело личное, ессно, но "баба яга против" )) хотя это ничего не меняет.
ЗЫ: Тут на днях tomcat ставил, так апачи завернули его гнутым таром и сановский его просматривает, а развернуть - ... по всей морде. Пришлось доставлять гнутого тож. Правда у апачей на сайте предупреждение есть.
Катится *никсы к виндоподобному зоопарку...

"RE: Непонятный sh"
Отправлено XMan , 29-Май-02 16:02 
Мы друг друга не поняли :))
Я по поводу "наезда":
"линуксоиды в очередной раз хотели сделать как лучше, а сляпали как в России"

Как ни странно, на российском линухе оно работает так же, как у тебя на соляре - без изменений :))


"RE: давай завязывать ))"
Отправлено Арлекин , 29-Май-02 16:11 
Пардон.
Я, увы, только слышал про наш линух и кроме мандрейка и 62-й шапки ничего линуксового руками не трогал.
А про Россию я говорил в смысле "как всегда", а не про качество программ.

"RE: давай завязывать ))"
Отправлено XMan , 29-Май-02 16:47 
Да все понятно...
Ладно, по-прикалывались и хватит :))

"RE: давайте, давайте"
Отправлено denb , 29-Май-02 17:14 
Прошу прощенье за настойчивость, но все таки хотелось бы знать почему не работатет во фре такая конструкция:
---------
#!/bin/sh
read z
if [ "$z" = "Y" ]; then
      echo "Yes"
else
      echo "No"
fi
---------
,и что надо сделать, чтобы она заработала

"RE: давайте, давайте"
Отправлено Арлекин , 29-Май-02 17:31 
>Прошу прощенье за настойчивость, но все
>таки хотелось бы знать почему

на такой вопрос наверное только автор может ответить

>не работатет во фре такая
>конструкция:
>---------
>#!/bin/ksh
^^^^^^^^^^^^^^^
ТАК попробуй. Может корн возьмет.

>read z
>if [ "$z" = "Y" ];
>then
>      
>echo "Yes"
>else
>      
>echo "No"
>fi
>---------
>,и что надо сделать, чтобы она
>заработала



"RE: давайте, давайте"
Отправлено denb , 29-Май-02 17:45 
>>---------
>>#!/bin/ksh
>^^^^^^^^^^^^^^^
>ТАК попробуй. Может корн возьмет.

ну ненужен мне корн!!!


"RE: давайте, давайте"
Отправлено mezantrop , 29-Май-02 17:55 
>>>---------
>>>#!/bin/ksh
>>^^^^^^^^^^^^^^^
>>ТАК попробуй. Может корн возьмет.
>
>ну ненужен мне корн!!!


очень странно :)) только что проверял у меня работает FreeBSD 4.3


"RE: давайте, давайте"
Отправлено crash , 30-Май-02 03:15 
>>>>---------
>>>>#!/bin/ksh
>>>^^^^^^^^^^^^^^^
>>>ТАК попробуй. Может корн возьмет.
>>
>>ну ненужен мне корн!!!
>
>
>очень странно :)) только что проверял
>у меня работает FreeBSD 4.3
>
только что проверял у меня работает FreeBSD 4.4



"RE: давайте, давайте"
Отправлено mezantrop , 30-Май-02 09:30 
>>>>>---------
>>>>>#!/bin/ksh
>>>>^^^^^^^^^^^^^^^
>>>>ТАК попробуй. Может корн возьмет.
>>>
>>>ну ненужен мне корн!!!
>>
>>
>>очень странно :)) только что проверял
>>у меня работает FreeBSD 4.3
>>
>только что проверял у меня работает
>FreeBSD 4.4
Ладно издеваться :)) Хорошо, был не прав, исправляюсь :))
Только что проверял, у меня работает. ОС FreeBSD 4.3

"RE: давайте, давайте"
Отправлено Algr , 30-Май-02 09:51 
Попробуй так:

#!/bin/sh

read z
if [ "$z" = "Y" ]
then
echo Y
else
echo N
fi

И проверь, чтобы нигде в концах строк не стояло пробелов


"RE: давайте, давайте"
Отправлено YOSNAIL , 30-Май-02 18:30 
>Попробуй так:
>
>#!/bin/sh
>
>read z
>if [ "$z" = "Y" ]
>
>then
>echo Y
>else
>echo N
>fi
>
>И проверь, чтобы нигде в концах
>строк не стояло пробелов

Ну вы тут и замалаживаете! Если мой работающий везде CASE не устраивает ! Используйте оператор
TEST
Вот простейший пример! ( Лично тестировал на
FreeBSD от 4.0 до 5.0, на Linux REDHAT 7.1 7.2,
все отлично работает! )
==============
#!/bin/sh
# My second Bourn script
# Nickogda ne pishite ni na chem krome SH или CSH
# T.k. SH - standartniy iazik SHELL!
# A cho - to tipa Korn moget i ne bit!
# U menia tolko SH & CSH !!!
printf "INPUT : "
read ANS_
  test $ANS_
if [ $? != 0 ]
then
  printf "You don't answer! Good bye!\n\n"
  return 1
fi
if [ $ANS_ = 'Y' ] || [ $ANS_ = 'y' ]
then
  printf "YES\n\n"
  return 0
fi
if [ $ANS_ = 'N' ] || [ $ANS_ = 'n' ]
then
  printf "NO\n\n"
  exit 0
fi
printf "I don't know what is this!\n\n"
return 1

=================================


"RE: давайте, давайте"
Отправлено Арлекин , 31-Май-02 08:55 
"Работающий везде case" - лечение симптомов, а не болезни. Можно на перле, например, написать, csh, джяве или С.
Человек похоже хочет выяснить ПРИЧИНУ, а не избавиться от следствия. Он по-своему прав, ибо если синтаксис аннонсирован, он ОБЯЗАН работать, а как его обойти уже другой вопрос.

"RE: давайте, давайте"
Отправлено denb , 31-Май-02 09:26 
>"Работающий везде case" - лечение симптомов,
>а не болезни. Можно на
>перле, например, написать, csh, джяве
>или С.
>Человек похоже хочет выяснить ПРИЧИНУ, а
>не избавиться от следствия. Он
>по-своему прав, ибо если синтаксис
>аннонсирован, он ОБЯЗАН работать, а
>как его обойти уже другой
>вопрос.

ВОТ ИМЕННО!!!


"RE: Непонятный sh"
Отправлено YOSNAIL , 01-Июн-02 16:07 
>Народ помогите!
>делаю так:
>#!/bin/sh
>read z
>if [ "$z" = "Y" ]; then
>      echo "Yes"
>else
>      echo "No"
>fi
>Все время выводит "Yes" и неважно, что ввожу я

Не бери в кавычки $z
Бери в одинарные кавыки 'Y'

И все будет ОК!
Будут типа вопросы, пиши мне на мыло YOSNAIL@ukr.net

C уважением Владислав Лазаренко ! :)))


"RE: Непонятный sh"
Отправлено mike , 18-Июн-02 12:56 
>>Народ помогите!
>>делаю так:
>>#!/bin/sh
>>read z
>>if [ "$z" = "Y" ]; then
>>      echo "Yes"
>>else
>>      echo "No"
>>fi
>>Все время выводит "Yes" и неважно, что ввожу я
>
>Не бери в кавычки $z
  А если будет нажат ENTER ?
>Бери в одинарные кавыки 'Y'
  Можно и без кавычек
>
>И все будет ОК!
  May be ...
>Будут типа вопросы, пиши мне на мыло YOSNAIL@ukr.net
>
>C уважением Владислав Лазаренко ! :)))



"RE: Непонятный sh"
Отправлено Albert MW , 21-Июн-02 15:27 
У меня изначальный пример работал на SCO...