Ваш сценарий сообщает, что имя не найдено, а затем сообщает, что имя существует. Это из-за вашего состояния , если [$? -ne 1]
. Знак "$?" представляет код возврата последнего выражения в скрипте. В данном случае это код возврата предыдущего блока if.
Чтобы получить желаемый результат, переместите команду grep между первым и вторым блоками if. Таким образом, второе if будет оценивать результаты grep. Если grep найдет результат, он напечатает этот результат, и его код возврата будет 0, и блок будет пропущен. Если grep не находит результата, он ничего не должен печатать, а его код возврата будет 1, что приведет к выполнению условия.
Не все версии grep знают о -q Небольшой трюк, который я использую - когда меня интересует только статус команды, - это ставить перед командой префикс 'nohup' - потому что я ленив и забываю "способ перенаправления "
nohup way
nohup grep -i string_arg file_args >/dev/null
status=$?
способ перенаправления
grep -i string_arg file_args 2>&1 >/dev/null
status=$?