Ошибка с выражением if в Unix

Я получаю вывод первого скрипта if но не могу получить вывод второй части инструкции if в следующем скрипте:

 #!/bin/ksh err_abc=`grep -r "XYZ" /home |wc -l` err_AB=`grep -r "XYZ" /home` > /dev/null 2>&1 err_ERR=`grep -r "ERROR" /home |wc -l` err_eRR=`grep -r "ERROR" /home` > /dev/null 2>&1 if [ $err_abc -gt 0 ] then echo "$err_AB" else echo "No errors found" if [ $err_ERR -gt 0 ] then echo "$err_eRR" else echo " \n No err files found" exit 0 fi fi 

2 Solutions collect form web for “Ошибка с выражением if в Unix”

Вы уверены, что код делает то, что вы думаете, что он делает? Давайте сделаем это так, чтобы мы могли более легко увидеть логику:

 if [ $err_abc -gt 0 ]; then echo "$err_AB" else echo "No errors found" if [ $err_ERR -gt 0 ]; then echo "$err_eRR" else echo " \n No err files found" exit 0 fi fi 

Ваш второй блок if выполняется только тогда и только тогда, когда тест первого блока является ложным. Если вы хотите, чтобы оба теста выполнялись во всех случаях, это необходимо переписать:

 if [ $err_abc -gt 0 ]; then echo "$err_AB" else echo "No errors found" fi if [ $err_ERR -gt 0 ]; then echo "$err_eRR" else echo " \n No err files found" exit 0 fi 

Кроме того, exit 0 который у вас есть в вашем заключительном if else , только выполняется, только если второй тест является ложным. Если это не ваше намерение, это заявление должно быть перемещено соответствующим образом.

Вы выполняете много дополнительной работы, чтобы установить переменные: вы рекурсивно grepping 4 раза. Вам нужно сделать это только один раз:

 all_errs=$(grep -r -E "XYZ|ERROR" /home 2>/dev/null) 

Затем другая информация может быть получена из этой переменной

 err_AB=$(grep "XYZ" <<< "$all_errs) err_abc=$(wc -l <<< "$err_AB") err_eRR=$(grep "ERROR" <<< "$all_errs") err_ERR=$(wc -l <<<"$err_eRR") 
  • Когда вы используете расширение скобки?
  • Как сигнализировать конец ввода «read -N»?
  • Как выполнить операцию «&» последовательно
  • Вычислить разницу дат между последней измененной датой файла и СЕЙЧАС с использованием сценария оболочки
  • Найти все каталоги, в которых у пользователя есть доступ к поиску и эхо из этих каталогов в оболочке
  • Согласование шаблонов с входными аргументами
  • Когда используется ~ + полезно?
  • Регулярное совпадение в ksh
  • Трубы Bash vs ksh
  • Как удалить все элементы в папке, за исключением элементов grepped
  • Установка Siemens NX 10: не удалось определить файловую систему, содержащую / usr / ugs100
  • Interesting Posts

    Установите программное обеспечение на ПК с Windows через экземпляр linux live (например, Kali)

    Как получить доступ к элементу массива в оболочке?

    Сеть Red Hat (RHN) и обновления пакетов

    Есть ли способ запустить ssh-сервер на устройстве Android?

    Совместить отсутствующие значения в текстовых файлах

    Устанавливает ли debian setup с lvm также шифрование раздела подкачки?

    Заменить рабочий каталог на 2 терминала одновременно

    Где хранятся программные вызовы процесса загрузки

    Rsync различное поведение при синхронизации папок HDD-HDD или HDD-Ext HD

    VIM: создать функцию для генерации нескольких строк буфера

    Шаблоны для сценария запуска?

    Сделать сразу несколько подкаталогов

    Почему работа зеркала lftp замедляется со временем?

    Strongswan перенаправляет трафик между двумя туннелями IPsec, где один из них является хостом

    В Gnome можно вызвать средство сетевого менеджера из командной строки?

    Linux и Unix - лучшая ОС в мире.