我正在执行一个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,但我在运行后手动执行并创建文件&#34; FTP_RESULTS&#34;并且正在工作,它假设找到2个匹配&#34;未连接&#34;
任何建议?
答案 0 :(得分:1)
egrep -c
命令计算匹配。
然后,如果匹配数超过0,则使用条件执行某些操作。
更简单,更好的解决方案是使用egrep
的退出代码。
egrep
如果找到匹配则退出0(=成功),
否则为非零。
您可以像这样编写if
语句:
if egrep -q "Login failed|Connection refused|Not connected|Connection timed out" "${FTP_RESULTS}"; then
这相当于您发布的代码中的逻辑。
不需要ftp_result_id
变量。
并且无需保存egrep
的输出。
我添加了-q
标志,以便egrep
不会产生任何输出。
没有必要。