почему grep работает, когда используется как переменная, а не как функция в сценарии оболочки linux? - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь использовать grep в качестве переменной и функции в сценарии оболочки bash. Я получаю желаемый результат, когда grep используется в качестве переменной. Я не получаю желаемый вывод, когда grep используется в качестве функции.

Сценарий, используемый для grep в качестве переменной, имеет следующий вид:

#! /bin/bash

grep=$(grep -ico "mmshutdown: Finished" mmshutdown-output.txt)
#grep()
#{
#        grep -ico "mmshutdown: Finished" mmshutdown-output.txt
#}
status()
{
        echo $?
}

if [[ "grep" -gt "0" ]];
then
        echo
        echo "exit code of search  mmshutdown: Finished is $(status)"
        echo
        echo "FILE SYSTEM UNMOUNTED SUCESSFULLY"
        sleep 3
else
        echo "exit code of search mmshutdown: Finished is $(status)"
        echo "check output log file mmshutdown.txt"
        sleep 3
fi

выход, когда мы запускаем скриптis

[root@ad ~]# ./grep-variable.sh

exit code of search  mmshutdown: Finished is 0

FILE SYSTEM UNMOUNTED SUCESSFULLY

Сценарий, используемый для функции grep, имеет следующий вид:

#! /bin/bash

#grep=$(grep -ico "mmshutdown: Finished" mmshutdown-output.txt)
grep()
{
        grep -ico "mmshutdown: Finished" mmshutdown-output.txt
}
status()
{
        echo $?
}


if [[ "grep" -gt "0" ]];
then
        echo
        echo "exit code of search  mmshutdown: Finished is $(status)"
        echo
        echo "FILE SYSTEM UNMOUNTED SUCESSFULLY"
        sleep 3
else
        echo "exit code of search mmshutdown: Finished is $(status)"
        echo "check output log file mmshutdown.txt"
        sleep 3
fi

Выход при запуске скрипта:

[root@ad ~]# ./grep-function.sh
exit code of search mmshutdown: Finished is 1
check output log file mmshutdown.txt

Может кто-тоуказать, что здесь пошло не так? Почему grep при использовании в качестве функции не дает желаемого результата?

1 Ответ

1 голос
/ 05 ноября 2019

Обе программы сравнивают "grep" с "0", а не с выводом команды grep. Также опция -c возвращает количество совпавших строк.

Проверьте следующий код, он работает с grep как функцией. Но поскольку grep как функция, вам нужно будет вызвать оригинальную команду grep, то есть команду с полным путем, иначе она пойдет в бесконечном цикле. Отправьте вывод в / dev / null и обработайте состояние выполнения команды.

#! /bin/bash
set -x
#grep=$(grep -ico "mmshutdown: Finished" mmshutdown-output.txt)
grep()
{
        return $(/bin/grep -ico "mmshutdown: Finished" mmshutdown-output.txt > /dev/null)
}
status()
{
        echo $?
}


if  grep;
then
        echo
        echo "exit code of search  mmshutdown: Finished is $(status)"
        echo
        echo "FILE SYSTEM UNMOUNTED SUCESSFULLY"
        sleep 3
else
        echo "exit code of search mmshutdown: Finished is $(status)"
        echo "check output log file mmshutdown.txt"
        sleep 3
fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...