2015-01-29 4 views
0

У меня есть сценарий, который проходит через несколько серверов, и если определенный пользователь найден, он выведет свое имя. Я хотел бы изменить отдельные инструкции, чтобы, если пользователь не найден, выводится «NO USER IDENTIFIED».Редактирование скрипта Bash для вывода вывода

Вот индивидуальный фрагмент кода:

echo "environment1" sshpass -p $ldappw ssh [email protected] 'mysql -h website.com -u topuser -ppassword dbname-e "select concat(FIRST,LAST) from users;"' | grep -i ${username} 

Я был бы признателен за помощь сообщества в изменении заявление, чтобы дать мне желаемый результат.

+0

'grep' возвращает отказ, если строки не выводятся. Вы можете использовать это с 'if! grep ....; затем echo 'NO USER IDENTIFIED'; fi'. –

+5

просто напишите '... | (grep -i $ {username} || echo "NO USER IDENTIFIED") ' –

ответ

0

Одно простое решение просто написать это:

echo "environment1" sshpass -p $ldappw ssh [email protected] 'mysql -h website.com -u topuser -ppassword dbname-e "select concat(FIRST,LAST) from users;"' | (grep -i ${username} || echo "NO USER IDENTIFIED") 

Объяснение

Как Этан указывает на это, Grep возвращает неудачу, если не выбраны строки. Это то, что grep manual говорит о том, что:

статус Выход равен 0, если выбранные строки будут найдены, и 1, если не найдено. Если произошла ошибка, статус выхода равен 2.

Bash оценивает правую сторону от || только в том случае, если левая сторона была ложной. Как bash manual говорит:

В & & и || операторы не оценивают выражение2, если значение expression1 является достаточным для определения возвращаемого значения всего условного выражения .

Так что если Grep не может выбрать строку, которая соответствует ${username}, echo будет делать эту работу.

Примечания

  • Рассмотрим выбирая только нужные пользователю select concat(FIRST,LAST) from users where concat(FIRST,LAST) like '%${username}%;'. С помощью этого трюка вы можете сделать точное совпадение перед grep (просто удалите % символов от подобных).
  • Рассмотрите использование -N (не записывайте имена столбцов в результатах.) И параметры -s (Silent mode.) Mysql, поэтому он производит меньше выходных данных.
Смежные вопросы