3.14 0 6 июля, 2005 Опубликовано 6 июля, 2005 · Жалоба Все под QNX4.25 (думаю разницы в плане скритов от линуха нет). Имею утилиту (и исходники) которая проверяет контрольные суммы конфигурационных ПЗУ. Имею утилиты прграммирования этих ПЗУ. Как сделать чтобы анализируя значение возвращаемое утилитой анализа CSUM, запускалась на выполнение та или иная утилита программирования. Насколько я понимаю, надо объявлять int main(), и выходить с return X. Но дальше ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 6 июля, 2005 Опубликовано 6 июля, 2005 · Жалоба Все под QNX4.25 (думаю разницы в плане скритов от линуха нет). Имею утилиту (и исходники) которая проверяет контрольные суммы конфигурационных ПЗУ. Имею утилиты прграммирования этих ПЗУ. Как сделать чтобы анализируя значение возвращаемое утилитой анализа CSUM, запускалась на выполнение та или иная утилита программирования. Насколько я понимаю, надо объявлять int main(), и выходить с return X. Но дальше ... А причем тут int main()? Речь об скриптах. Хотя не знаю, как там в QNX, но вот в Linux bash-скрипт, на первый взгляд, достаточно тривиален. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 6 июля, 2005 Опубликовано 6 июля, 2005 · Жалоба А причем тут int main()? Речь об скриптах. Дык, а как программа должна возвращать значение завершения своей работы (интересует не просто ошибка или нет)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 6 июля, 2005 Опубликовано 6 июля, 2005 · Жалоба у скриптов вроде нет main -а каждая команда выполняется, и обработчик переходит к следующей, если нет ошибки в bash скрипте вы занесёте результат выполения утилиты в переменную, variable=`launch_util` или variable=$(launch_util) и потом можете сравнить эту переменную, например, в case case "$variable" in "$condition1" ) command... ;; "$condition2" ) command... ;; esac в зависимости от возвращаемого значения можно поставить if или завести список command1 && command2 && command3 или command5 || command6 || command7 на английском посмотрите bash tutorial глава 7 - сравнения if глава 10 - сравнения case глава 25 - списки Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 6 июля, 2005 Опубликовано 6 июля, 2005 · Жалоба в bash скрипте вы занесёте результат выполения утилиты в переменную, variable=`launch_util` или variable=$(launch_util) Что то так не прходит. Создаю утилитку, которая сначала выводит на экран "Test" и заканчивается return 2 (пробовал и exit(2)) создал скрипт: variable=$(cfggray) echo $variable case "$variable" in 1 ) echo "first";; 2 ) echo "second";; "Test" ) echo "No good";; * ) echo "other";; esac В результате работы получается так что присваивается не значение 2, а текст выводимый утилитой ("Test"). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 6 июля, 2005 Опубликовано 6 июля, 2005 · Жалоба виноват. в case нужно тестировать не переменную (в которую попадает вывод), а результат выполнения, который заносится в $? variable=$(cfggray) case $? in 1) В переменную $? всегда заносится результат выполнения последней команды, так что будте аккуратны, потому что она при каждом действии переопределяется -и после сравнения тоже. Лучше, держите нужные вещи в собственных переменных: variable=$(cfggray) cfggray_result=$? case $cfggray_result... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
3.14 0 7 июля, 2005 Опубликовано 7 июля, 2005 · Жалоба Спасибо за советы. При варианте скрипта: variable=$(cfggray) cfggray_result=$? case $cfggray_result... Возвращается всегда 0, причем вывод на экран происходит только если после объявления переменной вызвать echo $variable (так и должно быть?). А вот если: cfggray cfggray_result=$? ... Тогда все ОК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 7 июля, 2005 Опубликовано 7 июля, 2005 · Жалоба В первом варианте нет вывода. Так и должно быть. ++++ весь вывод ушел в переменную, вы ее можете распечатать на экран или ++++ в файл - утилита больше вызываться не должна У меня первый вариант работает хорошо: вызывается утилита (без вывода) и возвращенное значение можно выловить через $? Почему у вас не прошел вызов или не вернулось значение - не понимаю. Впрочем, вы нашли способ получить данные. ++++ чтобы проверить, вызвалась ли утилита - печатайте из нее в файл - так виднее зы Если вы echo $variable вставили сразу после объявления - то у вас в $? попадает результат вызова echo - (success == 0). ззы cygwin, bash-2.05b Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться