Форум русскоязычного сообщества Ubuntu


Автор Тема: Bash goto  (Прочитано 1791 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Enelar

  • Автор темы
  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Bash goto
« : 23 Апреля 2011, 05:23:46 »
Возникла проблема заставить такой код работать. Единственное решение пришедшее в голову - goto.
a=1
b=2
while [1 -gt 0]; do
let b=$a+$b #допустим какое то выражение
cat $file | awk "{ if (\$1 > $b) print \$2 }"
done

При значении файла
1 Маша
3 Паша
5 Петя

Выведет
Паша
Петя
(тк в awk $b заменяется на значение до while равное 2)

Хотя должен
Петя
« Последнее редактирование: 23 Апреля 2011, 06:54:02 от Enelar »

Оффлайн AndyBW

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Bash goto
« Ответ #1 : 15 Июня 2015, 17:24:48 »
В bash goto не существует, но есть возможность его симулировать через функцию.


Скрипт создающий 3 вложенных директории или откатывающий действия при ошибке под катом
(Нажмите, чтобы показать/скрыть)


Функция rollback логически состоит из трех секций:
1) Именованные действия вызывающие последовательно предшествующие если таковые есть
2) return если вызов происходил без ошибки
3) exit если была ошибка

Пример вывода результата скрипта:
Step 1
/home/username:
Step 2
mkdir: cannot create directory ‘/home/username/1/2’: No such file or directory
Look at directory
ls: cannot access /home/username: No such file or directory
Its empty because rollback executed
Step 3
Before rollback
/home/username:
/home/username/1:
/home/username/1/2:
After rollback
ls: cannot access /home/username: No such file or directory

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Bash goto
« Ответ #2 : 15 Июня 2015, 20:13:58 »
Enelar,
Проблема не в том чтоб "заставлять работать" код, а выбирать правильный инструмент под конкретную задачу
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.099 секунд. Запросов: 25.