Запись stdout в файл и конструкция if; then

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Grih65kop
Сообщения: 145

Запись stdout в файл и конструкция if; then

Сообщение Grih65kop »

Есть сценарий:

Код: Выделить всё

while read line
do echo "INPUT: $line" >> /var/log/_log
...
if [ "$line" = "1" ]; then
echo "11"
fi
if [ "$line" = "2" ]; then
echo "22"
fi
...
done


Записываю в лог то что вводить пользователь, каким способом записать то что пользователь получает на выходе т.е. stdout? У самого не вышло, пытаюсь добиться следующего лог файла:

Код: Выделить всё

INPUT: 1
OUTPUT: 11


Так же не могу понять как в данной конструкции применить следующую логику:

Если набрано не 1 и не 2, и не [...], то выводим abc.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Запись stdout в файл и конструкция if; then

Сообщение /dev/random »

Grih65kop писал(а):
13.03.2012 17:52
Записываю в лог то что вводить пользователь, каким способом записать то что пользователь получает на выходе т.е. stdout? У самого не вышло, пытаюсь добиться следующего лог файла:

Код: Выделить всё

INPUT: 1
OUTPUT: 11

Простейший вариант:

Код: Выделить всё

...; then
  echo foo
  echo OUTPUT: foo >> log
...

Можно вместо этого в if'ах сохранять ответ в переменную, а выводить его в конце (опять же, пользователю и в лог отдельными командами).

Grih65kop писал(а):
13.03.2012 17:52
Так же не могу понять как в данной конструкции применить следующую логику:

Если набрано не 1 и не 2, и не [...], то выводим abc.

if ...; then ...; elif ...; then ...; else ...; fi
Спасибо сказали:
Grih65kop
Сообщения: 145

Re: Запись stdout в файл и конструкция if; then

Сообщение Grih65kop »

/dev/random писал(а):
13.03.2012 18:10
Grih65kop писал(а):
13.03.2012 17:52
Записываю в лог то что вводить пользователь, каким способом записать то что пользователь получает на выходе т.е. stdout? У самого не вышло, пытаюсь добиться следующего лог файла:

Код: Выделить всё

INPUT: 1
OUTPUT: 11

Простейший вариант:

Код: Выделить всё

...; then
  echo foo
  echo OUTPUT: foo >> log
...

Можно вместо этого в if'ах сохранять ответ в переменную, а выводить его в конце (опять же, пользователю и в лог отдельными командами).

Не вариант, у меня будет очень много конструкций вида if ...; then echo ... и каждый раз повторят конец, либо брать это в переменную не хочется, т.к. увеличит код и выглядеть это будет ужастно.
Grih65kop писал(а):
13.03.2012 17:52
Grih65kop писал(а):
13.03.2012 17:52
Так же не могу понять как в данной конструкции применить следующую логику:

Если набрано не 1 и не 2, и не [...], то выводим abc.

if ...; then ...; elif ...; then ...; else ...; fi

Спасибо.
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5456
ОС: Gentoo

Re: Запись stdout в файл и конструкция if; then

Сообщение /dev/random »

Grih65kop писал(а):
13.03.2012 18:31
Не вариант, у меня будет очень много конструкций вида if ...; then echo ... и каждый раз повторят конец, либо брать это в переменную не хочется, т.к. увеличит код и выглядеть это будет ужастно.

Можете объявить функцию
echo_and_log() { echo "$@"; echo "OUTPUT: $@" >> log; }
и вызывать её вместо echo.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: Запись stdout в файл и конструкция if; then

Сообщение sgfault »

Еще можно использовать что-то такое

Код: Выделить всё

while ; do
..
done | tee _log

Ввод будет повторяться (в stdout) самим read, вывод будет попадать и в лог, и пользователю. Вот только префиксов "INPUT" и "OUTPUT" не будет.
Спасибо сказали: