Оператор return
возвращает ошибку, если оператор не выполняется из функции или точечного -скрипта (исходного скрипта ).
В функциях оболочки и сценариях с точкой -используйте return
. В сценариях используйте exit
.
Короткий скрипт типа
#!/bin/bash
return 0
выдаст сообщение об ошибке
line 1: return: can only `return' from a function or sourced script
и $?
будет установлено на 1.
Если вы не выходите из скрипта с явнымexit
(или если вы выходите с exit
, но без указания кода выхода ), код возврата скрипта в целом будет таким же, как код возврата последняя выполненная команда.
Наличие exit "$?"
равнозначно простому exit
, и если оно находится в конце скрипта, его можно полностью исключить.
В общем, я также предлагаю вам использовать $HOME
вместо тильды в сценариях. Это связано с тем, что $HOME
работает как любая другая переменная, тогда как тильда раскрывается на отдельном шаге раскрытия, что означает, что она не ведет себя как переменная и не раскрывается в строках в кавычках. $HOME
также является более описательным, и, поскольку это сценарий, вы можете потратить несколько дополнительных нажатий клавиш, чтобы сделать код более читаемым.
Вы можете использовать awk
для этой цели:
awk 'index($0,"vm-1178")>0 {in_pat=1; print; next} \
in_pat == 1 && $0 ~ /^-->/ {print; next} \
{in_pat=0}' logfile.txt
Он содержит три правила:
in_pat
равным 1. -->
, также будут напечатаны. -->
, так что ничего не печатается до тех пор, пока шаблон не будет найден снова. Обратите внимание, что в первом правиле используется функция index
, а не соответствие RegExp. Это сделано для того, чтобы вы также могли искать шаблоны, содержащие символы, имеющие особое значение в регулярных выражениях.
Если использовать Perl, это будет работать:
perl -ne ' { $t=0 if ( !/^-->/ ); $t=1 if(/vm-1178/); print if($t); }' <filename>
Попробуйте это,
awk '!/^-->/{p=0} /vm-1178/{p=1} p'
!/^-->/{p=0}
:Установите varp
(как print )в 0, если строка не начинается с -->
. /vm-1178/{p=1}
:Установите var p
= 1 всякий раз, когда строка соответствует /vm-1178/
. p
:Печатать строку всякий раз, когда p
истинно (здесь=1)