-1

Я хотел бы написать небольшой скрипт на bash.

Запрос: у меня одно WAS-приложение работает на одном сервере.Он содержит много запущенных jvms.

Теперь я хотел бы написать скрипт для того, что все jvms работает и что все останавливает jvms и хранит его в одном текстовом файле.

Я уже написал некоторый сценарий, как показано ниже.

Но когда я запускаю некоторые из состояния jvms не удается показать в текстовом файле.

Не могли бы вы мне помочь?

if [ -n  `grep TNT_Stg_AppSrv01  /tmp/Rajesh/log.txt ` ]; then

    echo "TNT_Stg_AppSrv01  status UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html

  else

    echo "TNT_Stg_AppSrv01  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " > /tmp/Rajesh/ServerStopStatus.html
fi



if [ -n  `grep jvm3  /tmp/Rajesh/log.txt ` ]; then

    echo "jvm3 status is UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html

  else

    echo "jvm3  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStopStatus.html
fi

if [ -n `grep jvm1  /tmp/Rajesh/log.txt ` ]; then

    echo "jvm1 status is UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html

  else

    echo "jvm1  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " > /tmp/Rajesh/ServerStopStatus.html
fi

2 ответа2

1

если, например, эта часть первой строки:

 grep TNT_Stg_AppSrv01  /tmp/Rajesh/log.txt 

НИЧЕГО не печатает, как в случае, когда grep не находит строку поиска, тогда вы ЭФФЕКТИВНО получите

if [ -n  ]; then

... в первой строке вашего сценария - КАК ЭТО РАБОТАЕТ.

Поставьте " для концов строки, которую вы проверяете в if - всегда.

например

if [ -n  "`grep TNT_Stg_AppSrv01  /tmp/Rajesh/log.txt`" ]; then

... вероятно, не будет работать немного лучше.

Я бы также предложил использовать $( command ) вместо обратных тиков.
Я считаю, что это более портативный - и также намного легче читать.

1

В ваших условных выражениях вы используете -n , который проверяет длину строки (в данном случае вывод вашей команды grep).

Вам лучше использовать код возврата, который используется по умолчанию для if , т.е.

if [ grep TNT_Stg_AppSrv01  /tmp/Rajesh/log.txt ]; then   
    echo "TNT_Stg_AppSrv01  status UP <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " >> /tmp/Rajesh/ServerStartStatus.html    
  else    
    echo "TNT_Stg_AppSrv01  is stopped <img src="smiley.gif" alt="Smiley face" height="42" width="42"> " > /tmp/Rajesh/ServerStopStatus.html
fi

Из справочной страницы grep:

Статус выхода равен 0, если выбранные строки найдены, и 1, если не найдены. Если произошла ошибка, статус выхода равен 2. (Примечание: код обработки ошибок POSIX должен проверяться на «2» или выше.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .