egrep在bash脚本中返回0,但手动执行返回正确值的命令| unix bash

egrep在bash脚本中返回0,但手动执行返回正确值的命令| unix bash,bash,shell,unix,ftp,grep,Bash,Shell,Unix,Ftp,Grep,我正在执行一个bash脚本,如果ftp连接失败或使用egrep成功,该脚本将返回我,问题是,当我尝试使用egrep获取单词时,返回0,但如果手动执行该命令,则返回2 这是我的代码: #Create the FTP Connection. for ip_address in ${IP_ADDRESS[@]}; do ftp ${ip_address} <<ftp_commands > ${FTP_RESULTS} user "${USER_ID}" "${USER_PAS

我正在执行一个bash脚本,如果ftp连接失败或使用egrep成功,该脚本将返回我,问题是,当我尝试使用egrep获取单词时,返回0,但如果手动执行该命令,则返回2

这是我的代码:

#Create the FTP Connection.
for ip_address in ${IP_ADDRESS[@]}; do
  ftp ${ip_address} <<ftp_commands > ${FTP_RESULTS}
  user "${USER_ID}" "${USER_PASSWORD}"
  pwd
  bye
ftp_commands

ftp_result_id=`egrep -c "Login failed|Connection refused|Not connected|Connection timed out" ${FTP_RESULTS}`

if [ ${ftp_result_id} -gt 0 ]; then
    echo "$(date +%m/%d/%y_%H:%M:%S) - ${ip_address} - Not connected" >> ${CONNECTION_RESULTS_FILE}
else
    echo "$(date +%m/%d/%y_%H:%M:%S) - ${ip_address} - Connected" >> ${CONNECTION_RESULTS_FILE}
fi

done
ftp_results_id在egrep-c命令中返回0,但在它运行并创建文件ftp_results并且正在工作后,我正在手动执行,它假设找到了2个与Not connected匹配的

有什么建议吗?

egrep-c命令统计匹配项。 然后,如果有超过0个匹配项,则使用条件执行某些操作

一个更简单更好的解决方案是使用egrep的退出代码。 如果找到匹配项,egrep将以0=成功退出, 否则为非零。 您可以这样编写if语句:

if egrep -q "Login failed|Connection refused|Not connected|Connection timed out" "${FTP_RESULTS}"; then
这相当于您发布的代码中的逻辑。 不需要ftp\u result\u id变量。 而且不需要保存egrep的输出。 我添加了-q标志,这样egrep就不会产生任何输出。
不需要。

使用grep-Eq,然后使用exitcode@anubhavagrep-Eq没有返回任何东西…就像所有命令一样,它返回一个有用的退出代码。如果grep-Eq你的术语你的文件;然后它有火柴;F是否可以将错误写入stderr?2>${FTP_RESULTS}可以工作吗?我必须使用嵌套的if,这就是我工作的方式