编辑Bash脚本以显示输出

时间:2015-01-29 16:30:45

标签: mysql linux bash

我有一个循环遍历多个服务器的脚本,如果找到特定用户,它将输出他们的名字。我想修改单个语句,以便在未找到用户的情况下输出“NO USER IDENTIFIED”。

以下是单独的代码段:

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

我希望社群能够在修改声明方面给予我所需的输出。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案就是写下这个:

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

<强>解释

当Etan指出它时,如果没有选择行,grep会返回失败。这就是grep manual对此的说法:

  

如果找到选定的行,则退出状态为0,否则为1   找到。如果发生错误,退出状态为2。

仅当左侧为假时,Bash才会评估||的右侧。正如bash manual所说:

  

&amp;&amp;和||运算符如果值为,则不计算expression2   expression1足以确定整个的返回值   条件表达式。

因此,如果grep无法选择与${username}匹配的行,echo将完成此任务。

备注

  • 请考虑仅选择所需的用户select concat(FIRST,LAST) from users where concat(FIRST,LAST) like '%${username}%;'。有了这个技巧,你可以在grep之前做一个完全匹配(只需从中删除%个字符)。
  • 考虑使用-N(不要在结果中写列名。)和mysql的-s(静默模式。)参数,因此产生的输出较少。