LINUX.ORG.RU

Как указать пробел в проверке условий?

 , ,


0

1
read -N1 -p "
1)- weed
2)- eat
3)- sleep
4)- fck
space)- back" var

if [ $var = " " ]; then
echo "Trying later!"
fi 

Хочу что бы при вводе пробела выводилось «Trying later!», но в проверке условия пробел не воспринимается, либо его не внимает переменная. Что можно придумать?

читай маны BASH про IFS переменую, оборачивай изменениями IFS=«@» #какой-нибудь неиспользуемый символ.

то, что указано в IFS = разделитель записей. если его поменять, то интерполироваться не будет

алсо, попробуй ’ ’ вместо " " чтобы отключить интерполяцию строк.

пример в каком-нибудь configure.sh про if "-$x" == "-" ; then ... fi тоже про это

anonymous
()

Кавычки не забывай ставить вокруг всех строк. Даже тех, которые переменные.

if [ "$var" = " " ]; then
firkax ★★★★★
()

либо его не внимает…

Не гадать, а точно и четко проверить, какое значение var при нажатии пробела. После этого думать. Как вариант, не «пробел», а «любое другое». На примере case вместо if:

case ${var} in
 [1-4]) ;;
 *) echo "Trying later!";;
esac

Легко трансформироавть, чтобы для 1-4 выводил персональные значения.

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

Сейчас быстренько за пол часа выучу английский+питон и перепишу как надо.

vachicul
() автор топика
Ответ на: комментарий от anonymous

Я вас не понимаю но этот пример попробую.

vachicul
() автор топика
Ответ на: комментарий от andytux

Я только недавно узнал что такое while until if for else, а тут ещё брат брата подъхал. Что ещё за case? Почему фигурные скобки? Почему я не пошёл на актёра. Долбанные иероглефы

vachicul
() автор топика
Ответ на: комментарий от vachicul

брат брата подъхал

Одна голова хорошо, а две лучше.

Что ещё за case?

Оператор. Как вариант замены «if ; then…». Можно и без фигурных скобок, но со скобками более «беспроблемный» вариант. Логика такая. Если в var значения «1, 2, 3, 4», то ничего не делает (можешь вставить любое действие). Если любое другое, то выведет сообщение «Trying later!»

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

брат брата подъхал

Брат хорошо, а брат брата ещё лучше.

Скажи мне, кто твой брат, и я скажу тебе, кто брат твоего брата.

anonymous
()
VAR=" " && if [ $VAR == " " ] ; then echo "!" ; fi
-bash: [: ==: ожидался унарный оператор
VAR=" " && if [ "$VAR" == " " ] ; then echo "!" ; fi
!
VAR=" " && if [[ "$VAR" == " " ]] ; then echo "!" ; fi
!
VAR=" " && if [[ $VAR == " " ]] ; then echo "!" ; fi
!

Ничего не поделаешь, это баш. Живи теперь с этим.

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

Замени VAR=" " на read var и введи туда пробел.

vachicul
() автор топика

Классика говношелла.

anonymous
()

Use the Java, Luke!

Хотя, для скриптов, Жаба - слишком мощно, там и Питона за глаза хватит…

QsUPt7S ★★
()
Последнее исправление: QsUPt7S (всего исправлений: 1)
Ответ на: комментарий от ashot

Задолбали свой пистон в каждую тему по шелл-скриптам тащить.

Что-то, хоть чуть-чуть сложное, для Шелл писать больно… На ЯП общего назначения много проще. Потому и тащим.

Мне вот больше Жаба заходит, но Питон, не погромистам, намного легче освоить, кому-то Сишечка больше нравится. Но вся соль в том, что скрипты на Шелл - это боль и содомия, если требуется хоть что-то, чуть более сложное, чем групповое переименование файлов. Потому, те кто с таким сталкивается, часто плюют и осваивают, хотя-бы на базовом уровне, нормальные ЯП, и советуют остальным делать то же самое. Так и вползает Питон в темы о шелл-скриптах…

QsUPt7S ★★
()
Последнее исправление: QsUPt7S (всего исправлений: 1)
Ответ на: комментарий от QsUPt7S

Надо со своими фантомными болями самостоятельно справляться, а не других заражать.

Во всех темах о шелл-скриптах задачи настолько элементарные, что языки программирования там в хрен не тарахтели.

А в темы срут неосиляторы, которым стыдно об этом признаться, даже самому себе.
«Яж пистон осилил, значит баш за пол-часа выучиваться должен. А если не выучивается, значит баш не такой, а не я долбоклюй.»

Так и вползает Питон в темы о шелл-скриптах…

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