Народ помогите!
делаю так:
#!/bin/sh
read z
if [ "$z" = "Y" ]; then
echo "Yes"
else
echo "No"
fi
Все время выводит "Yes" и неважно, что ввожу я
По идее должно быть так:if [ "$z" == "Y" ];
>По идее должно быть так:
>
>if [ "$z" == "Y" ];
>
Но это же не C++!!!
Ну в bash у меня и оригинал работал нормально :))
Между прочим, "!=" - тоже сишная конструкция :))
Чудак ты! :)
Не надо проверять сходство строк такими операторами!!!
Это опасно! Надо делать так:
==========================================
# 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
# :)))
Спасибо , помогли!
В if надо было что-то одно оставить без апострофов. И все. Кстати: bash наследник sh, но не более того.
>В if надо было что-то одно
>оставить без апострофов. И все.
>Кстати: bash наследник sh, но
>не более того.Пробовал я так ставить - не получилось
Ну вопрошающий не сказал, в какой системе это пишется, а в большинстве линухов делается симлинк /bin/sh на /bin/bash.
А оригинал у меня все равно работал без изменений :))
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 соляре исходный вариант (без изменений) работает как показано выше. Судя по всему линуксоиды в очередной раз хотели сделать как лучше, а сляпали как в России. Увы.
система FreeBSD 4.4 и получилось у меня только с case вариантом
Будем знать, что у бсдюков тоже рыльце в ...
Хотя case в шеллах есть ни что иное, как операция ==, которая вообще-то валидна в отношении строк с большими допущениями. И не с проста в джяве, например, операция == по отношению к строкам это не тоже самое, что в отношении скажем int. Строки там в switch в качестве аргумента недопустимы, а гарантированное сравнение строк возможно только через метод...
Лирика, впрочем, все это, обеденный перерыв так сказать.
>система FreeBSD 4.4 и получилось у меня только с case вариантомну так во freebsd sh это на самом деле ash, у которого свои заморочки.
Ну это ты зря :))
Я ж как раз на линухе, причем российском, (ASP Linux 7.2), и проверял :))
Чего зря ? Не надо мух с котлетами ))
Есть шелл называемый sh. Bourne который. Это своего рода шелл-стандарт для *никсов. Наравне с csh. От него родился bash, ksh и еще куча других. Даже Х-овый есть. Но это все ДРУГИЕ шеллы. Также как java 1.1 и java 1.2 или С и С++. Ну представь себе софтлинк отправляющий из плюсового С в K&R. Это как ?
ИМХО: дурное дело затеяли народу мозги пудрить. Сделай lsh какой-нить и живи в шоколаде, а "святое незамай" :))
Дело личное, ессно, но "баба яга против" )) хотя это ничего не меняет.
ЗЫ: Тут на днях tomcat ставил, так апачи завернули его гнутым таром и сановский его просматривает, а развернуть - ... по всей морде. Пришлось доставлять гнутого тож. Правда у апачей на сайте предупреждение есть.
Катится *никсы к виндоподобному зоопарку...
Мы друг друга не поняли :))
Я по поводу "наезда":
"линуксоиды в очередной раз хотели сделать как лучше, а сляпали как в России"Как ни странно, на российском линухе оно работает так же, как у тебя на соляре - без изменений :))
Пардон.
Я, увы, только слышал про наш линух и кроме мандрейка и 62-й шапки ничего линуксового руками не трогал.
А про Россию я говорил в смысле "как всегда", а не про качество программ.
Да все понятно...
Ладно, по-прикалывались и хватит :))
Прошу прощенье за настойчивость, но все таки хотелось бы знать почему не работатет во фре такая конструкция:
---------
#!/bin/sh
read z
if [ "$z" = "Y" ]; then
echo "Yes"
else
echo "No"
fi
---------
,и что надо сделать, чтобы она заработала
>Прошу прощенье за настойчивость, но все
>таки хотелось бы знать почемуна такой вопрос наверное только автор может ответить
>не работатет во фре такая
>конструкция:
>---------
>#!/bin/ksh
^^^^^^^^^^^^^^^
ТАК попробуй. Может корн возьмет.>read z
>if [ "$z" = "Y" ];
>then
>
>echo "Yes"
>else
>
>echo "No"
>fi
>---------
>,и что надо сделать, чтобы она
>заработала
>>---------
>>#!/bin/ksh
>^^^^^^^^^^^^^^^
>ТАК попробуй. Может корн возьмет.ну ненужен мне корн!!!
>>>---------
>>>#!/bin/ksh
>>^^^^^^^^^^^^^^^
>>ТАК попробуй. Может корн возьмет.
>
>ну ненужен мне корн!!!
очень странно :)) только что проверял у меня работает FreeBSD 4.3
>>>>---------
>>>>#!/bin/ksh
>>>^^^^^^^^^^^^^^^
>>>ТАК попробуй. Может корн возьмет.
>>
>>ну ненужен мне корн!!!
>
>
>очень странно :)) только что проверял
>у меня работает FreeBSD 4.3
>
только что проверял у меня работает FreeBSD 4.4
>>>>>---------
>>>>>#!/bin/ksh
>>>>^^^^^^^^^^^^^^^
>>>>ТАК попробуй. Может корн возьмет.
>>>
>>>ну ненужен мне корн!!!
>>
>>
>>очень странно :)) только что проверял
>>у меня работает FreeBSD 4.3
>>
>только что проверял у меня работает
>FreeBSD 4.4
Ладно издеваться :)) Хорошо, был не прав, исправляюсь :))
Только что проверял, у меня работает. ОС FreeBSD 4.3
Попробуй так:#!/bin/sh
read z
if [ "$z" = "Y" ]
then
echo Y
else
echo N
fiИ проверь, чтобы нигде в концах строк не стояло пробелов
>Попробуй так:
>
>#!/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=================================
"Работающий везде case" - лечение симптомов, а не болезни. Можно на перле, например, написать, csh, джяве или С.
Человек похоже хочет выяснить ПРИЧИНУ, а не избавиться от следствия. Он по-своему прав, ибо если синтаксис аннонсирован, он ОБЯЗАН работать, а как его обойти уже другой вопрос.
>"Работающий везде case" - лечение симптомов,
>а не болезни. Можно на
>перле, например, написать, csh, джяве
>или С.
>Человек похоже хочет выяснить ПРИЧИНУ, а
>не избавиться от следствия. Он
>по-своему прав, ибо если синтаксис
>аннонсирован, он ОБЯЗАН работать, а
>как его обойти уже другой
>вопрос.ВОТ ИМЕННО!!!
>Народ помогите!
>делаю так:
>#!/bin/sh
>read z
>if [ "$z" = "Y" ]; then
> echo "Yes"
>else
> echo "No"
>fi
>Все время выводит "Yes" и неважно, что ввожу яНе бери в кавычки $z
Бери в одинарные кавыки 'Y'И все будет ОК!
Будут типа вопросы, пиши мне на мыло YOSNAIL@ukr.netC уважением Владислав Лазаренко ! :)))
>>Народ помогите!
>>делаю так:
>>#!/bin/sh
>>read z
>>if [ "$z" = "Y" ]; then
>> echo "Yes"
>>else
>> echo "No"
>>fi
>>Все время выводит "Yes" и неважно, что ввожу я
>
>Не бери в кавычки $z
А если будет нажат ENTER ?
>Бери в одинарные кавыки 'Y'
Можно и без кавычек
>
>И все будет ОК!
May be ...
>Будут типа вопросы, пиши мне на мыло YOSNAIL@ukr.net
>
>C уважением Владислав Лазаренко ! :)))
У меня изначальный пример работал на SCO...