реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Можно написать такой скрипт скрипт?
3.14
сообщение Jul 6 2005, 08:51
Сообщение #1


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Все под QNX4.25 (думаю разницы в плане скритов от линуха нет).
Имею утилиту (и исходники) которая проверяет контрольные суммы конфигурационных ПЗУ.
Имею утилиты прграммирования этих ПЗУ.
Как сделать чтобы анализируя значение возвращаемое утилитой анализа CSUM, запускалась на выполнение та или иная утилита программирования.

Насколько я понимаю, надо объявлять int main(), и выходить с return X.
Но дальше ...


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jul 6 2005, 09:03
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(3.14 @ Jul 6 2005, 12:51)
Все под QNX4.25 (думаю разницы в плане скритов от линуха нет).
Имею утилиту (и исходники) которая проверяет контрольные суммы конфигурационных ПЗУ.
Имею утилиты прграммирования этих ПЗУ.
Как сделать чтобы анализируя значение возвращаемое утилитой анализа CSUM, запускалась на выполнение та или иная утилита программирования.

Насколько я понимаю, надо объявлять int main(), и выходить с return X.
Но дальше ...

А причем тут int main()? Речь об скриптах. Хотя не знаю, как там в QNX, но вот в Linux bash-скрипт, на первый взгляд, достаточно тривиален.
Go to the top of the page
 
+Quote Post
3.14
сообщение Jul 6 2005, 11:25
Сообщение #3


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



А причем тут int main()? Речь об скриптах.
Дык, а как программа должна возвращать значение завершения своей работы (интересует не просто ошибка или нет)?


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
id_gene
сообщение Jul 6 2005, 12:14
Сообщение #4


carpe manana
***

Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659



у скриптов вроде нет 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 - списки
Go to the top of the page
 
+Quote Post
3.14
сообщение Jul 6 2005, 15:05
Сообщение #5


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Цитата(id_gene @ Jul 6 2005, 15:14)
в 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").


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
id_gene
сообщение Jul 6 2005, 15:38
Сообщение #6


carpe manana
***

Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659



виноват.
в case нужно тестировать не переменную (в которую попадает вывод), а результат выполнения, который заносится в $?

variable=$(cfggray)
case $? in
1)

В переменную $? всегда заносится результат выполнения последней команды, так что будте аккуратны, потому что она при каждом действии переопределяется -и после сравнения тоже.
Лучше, держите нужные вещи в собственных переменных:

variable=$(cfggray)
cfggray_result=$?
case $cfggray_result...
Go to the top of the page
 
+Quote Post
3.14
сообщение Jul 7 2005, 09:25
Сообщение #7


Их либе дих ...
******

Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609



Спасибо за советы.
При варианте скрипта:
variable=$(cfggray)
cfggray_result=$?
case $cfggray_result...
Возвращается всегда 0, причем вывод на экран происходит только если после объявления переменной вызвать echo $variable (так и должно быть?).

А вот если:
cfggray
cfggray_result=$?
...

Тогда все ОК.


--------------------
Усы, борода и кеды - вот мои документы :)
Go to the top of the page
 
+Quote Post
id_gene
сообщение Jul 7 2005, 10:12
Сообщение #8


carpe manana
***

Группа: Свой
Сообщений: 321
Регистрация: 2-06-05
Пользователь №: 5 659



В первом варианте нет вывода. Так и должно быть.
++++ весь вывод ушел в переменную, вы ее можете распечатать на экран или
++++ в файл - утилита больше вызываться не должна
У меня первый вариант работает хорошо: вызывается утилита (без вывода) и возвращенное значение можно выловить через $?
Почему у вас не прошел вызов или не вернулось значение - не понимаю.
Впрочем, вы нашли способ получить данные.
++++ чтобы проверить, вызвалась ли утилита - печатайте из нее в файл - так виднее

зы Если вы echo $variable вставили сразу после объявления - то у вас в $? попадает результат вызова echo - (success == 0).

ззы cygwin, bash-2.05b
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.03986 секунд с 7
ELECTRONIX ©2004-2016