egrep在bash脚本中返回0,但手动执行返回正确值的命令| unix bash
我正在执行一个bash脚本,如果ftp连接失败或使用egrep成功,该脚本将返回我,问题是,当我尝试使用egrep获取单词时,返回0,但如果手动执行该命令,则返回2 这是我的代码: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
#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,这就是我工作的方式