Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308

Аналог goto или try в bash

15.12.2023, 13:11. Показов 1395. Ответов 6
Метки goto (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь сделать командой проверку условия подключения в серверу по SSH, и если сервер не отвечает, то завершить скрипт с сообщением, что сервер недоступен. Если всё ок, то продолжить работу.

Есть ли в bash возможность перейти к определённому участку кода типа goto, или проверить, что команда:
spawn ssh username@hostname завершилась с ошибкой?

Может для expect есть какое-то условие? Типа если не дождался нужной строки, то завершить работу.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2023, 13:11
Ответы с готовыми решениями:

Подскажите аналог goto в bash или как реализовать такой переход
Вот простой пример на CMD в windows If Что то goto 1 else goto 2 :1 Условия 1 :2 Условия 2 pause

Аналог GOTO
Добрый день! Сразу прошу прощения, что вопрос будет без примера кода, - доступ к студии в данный момент отсутствует. В свете того, что...

Аналог goto
Подскажите ,есть ли в С++ аналог оператора goto? Есть код: int main() { setlocale(0, ""); //поддержка русского языка ...

6
5984 / 4559 / 1095
Регистрация: 29.08.2013
Сообщений: 28,197
Записей в блоге: 3
15.12.2023, 13:19
неужели в гугле забанили?
https://stackoverflow.com/ques... nd-in-bash
1
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,773
15.12.2023, 13:29
Цитата Сообщение от Рафик Посмотреть сообщение
Может для expect есть какое-то условие?
Зачем? Чем плох вариант
Bash
1
2
3
4
if ping -c1 123.123.123.123 > /dev/null 2> /dev/null
  then
    ...
fi
?
1
 Аватар для volodin661
6799 / 2297 / 349
Регистрация: 10.12.2013
Сообщений: 7,924
16.12.2023, 16:55
Цитата Сообщение от Рафик Посмотреть сообщение
Аналог goto или try в bash
Курица - не птица, а expect - это не bash.

программа expect использует tcl-синтаксис для работы своего скрипта.

Цитата Сообщение от Рафик Посмотреть сообщение
Может для expect есть какое-то условие? Типа если не дождался нужной строки, то завершить работу.
ясен пень



Кликните здесь для просмотра всего текста
Checking For Errors From spawn
All of the examples so far have assumed that spawn always succeeds. The bad news is that spawn does not always succeed. The good news is that it only fails in peculiar envi- ronments or in peculiar situations. In this section, I will describe the meaning of "peculiar" and how to check whether spawn succeeded or not.
The spawn command normally returns the process id of the newly spawned process.t This is generally of little value since spawned processes are more easily manipulable by their spawn ids. However, it is occasionally useful to be able to kill a process using its process id rather than going through some long interaction.
Code
1
2
set pid [spawn program]
# some time later exec kill $pid
Once killed, the process connection should be recycled by calling close and wait.
Running out of various system resources can cause spawn to fail. For example, spawn allocates dynamic memory as well as a logical terminal interface.
Failures like this can be caught using Tcl's catch command:

Code
1
2
if [catch "spawn program" reason]
send_user "failed to spawn program: $reason\n" exit 1
"spawn -open" returns a process id of 0 to indicate no process was spawned. There is no process to kill.

Even if spawn does not return an error, that is not a guarantee that it was entirely successful. To understand why, it is necessary to explain a little of how spawn is implemented.
The spawn command follows the traditional UNIX paradigm for running a new program. First, Expect forks. Forking is the UNIX way of generating a new process. Initially, the new process is still running Expect code. This allows Expect to prepare the environment appropriately for the new program. The last step is for Expect (in the new process) to overlay itself with the new program. At this point, the original Expect process is still running, and the new process is running the requested program.
This last step of loading the program can fail if, for example, the program does not exist. If it does not exist, the new process must communicate this back to the Expect process. Ironically, the failure of the program to be found can be communicated but not its success. The reason is that the very act of successfully running the program removes any functionality of the earlier program (i.e., Expect). Thus, the new program has no idea how to signal success or even that it should.
Because of this, the original Expect process cannot wait around for a possible failure. The spawn command returns immediately. If the process does fail however, the new process sends back an error report in such a way that the Expect process hears it at the next convenient moment-the first expect command.


Exploring Expect

Checking the return value of spawn (as shown above with catch) is a good idea if you want your code to be bulletproof. These kinds of errors are often due to transient condi- tions that may go away if the operation is retried, such as a lack of memory.
On the other hand, checking spawn's success via the first expect is less valuable. For example, if a standard utility such as /bin/sh is being spawned, there is little point in checking if it succeeded. If it did not, the computer has such severe problems that few programs will be able to continue to nm.
The primary circumstance in which to check the first expect after a spawn is when the program is unknown at the time the script is written. For example, if a user can type in arbitrary command names dynamically, these names should be checked. Note that using "file executable" is a reasonable test but it is not guaranteed since there is a window between the time the file can be tested and the time it is executed, during which the file can change.
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
16.12.2023, 18:01  [ТС]
Спасибо всем. Буду пробовать.
0
325 / 50 / 11
Регистрация: 08.04.2022
Сообщений: 194
18.12.2023, 05:50
Лучший ответ Сообщение было отмечено Рафик как решение

Решение

Мне вспомился Перл. В нем отсутствует switch/case/else - удобная и, в некотором роде, красивая языковая конструкция для множественного выбора, которая есть во многих других си-подобных языках. Хотя сия недостача и реализуется разными дополнительными модулями, но, на самом деле, все они суть синтаксический сахар, и, на самом деле, Перлу ни они (модули) ни она (конструкция) не нужны, потому что в нем достаточно своих средств для реализации множественного выбора.

Аналогично, в Шелле, а точнее в Баше, достаточно средств для реализации весьма сложной логики.

Если какая-то команда завершилась с ошибкой и надо срочно завершить выполнение, то мжно писать как-то так

Bash
1
2
3
4
5
if ! какая-то-команда
then
    echo "мне стало очень плохо" >&2
    exit 1
fi
или даже лучше:

Bash
1
2
3
4
какая-то-команда || {
    echo "мне стало очень плохо" >&2
    exit 1
}
Если в процессе возникла ошибка, а ее надо игнорировать, или надо сообщить об ощибке, но все равно ее игнорировать, то можно писать как-то так:

Bash
1
2
3
какая-то-команда || {
    echo "мне стало очень плохо, но я продолжу" >&2
}
Мой скромный опыт позволяет мне сказать, что комбинации следующих команд достаточно, чтобы создать весьма заковыристые сценарии.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
trap 'сделать что-то, когда произошла ошибка' ERR
trap 'сделать что-то по завершении сценария' EXIT
 
# комбинируя эти три команды, можно существенно повлиять на
# последовательность исполнения и процесс завершения сценария
set -o pipefail
set -o errexit
set -o errtrace
 
main() {
    : здесь много полезных команд и функций
}
 
# здесь много функций
 
main "$@"
1
2 / 2 / 1
Регистрация: 25.06.2013
Сообщений: 308
18.12.2023, 06:20  [ТС]
siberian-man, огромное человеческое спасибо вам за этот пост!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2023, 06:20
Помогаю со студенческими работами здесь

Аналог goto в js
Есть ли аналог goto,как,например,в С++, в JavaScript?

Аналог goto
Подскажите есть ли аналог goto? Нужно перекидываться на другой участок кода, чтоб не писать 25 раз одно и тоже.....

Аналог команды goto в с++
здравствуйте, есть ли в js аналог команды goto ? Только начал учить js и решил попробовать свои силы написав крестики-нолики, но там баг,...

Есть ли в маткаде аналог goto?
Привет всем)) Ести ли в маткаде аналог goto как в Си. Просто у меня на примере надо сделать такое, т.е. перейти от шага 1 к шагу 2...

Аналог goto для перехода между функциями
Привет :) У меня есть задачка в консоли, где в одной из функций, допустим random() есть один из подпунктов выбора case - вернуться в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru