有没有办法在不必多次复制和粘贴命令的情况下编写以下内容?
成功 - 它会将“grep”打印到控制台和日志文件
失败 - 它会打印“控制台和日志文件
” if wget -S --spider ${proxystring}"$1" 2>&1 | grep 'HTTP/1.1 200 OK'; then
wget -S --spider ${proxystring}"$1" 2>&1 | grep 'HTTP/1.1 200 OK' >> $LOGFILE
return 0;
else
wget -S --spider ${proxystring}"$1" 2>&1 | $TEELOG
return 1;
fi
答案 0 :(得分:2)
你只需要运行一次wget。将结果存储在临时文件中并使用:
# Make temporary file
tmpfile=$(mktemp)
# put wget output in temp file
wget -S --spider "${proxystring}$1" 2>&1 > "$tmpfile"
# grep in temp file
grep_result=$( grep 'HTTP/1.1 200 OK' "$tmpfile" )
# If string found...
if [ $? -eq 0 ]; then
# Append grep results to log file
echo "$grep_result" >> $LOGFILE
# remove temp file
rm "$tmpfile"
# Success!!
return 0;
# otherwise...
else
# put the wget results in TEELOG
cat "$tmpfile" >> "$TEELOG"
# remove temp file
rm "$tmpfile"
# Fail :(
return 1;
fi
答案 1 :(得分:0)
将输出存储在变量中,然后根据需要多次使用此变量:
ret_value=`wget -S --spider ${proxystring}"$1" 2>&1 | grep 'HTTP/1.1 200 OK';`
if [ $? -eq 0 ]; then
echo $ret_value >> $LOGFILE
return 0;
else
wget -S --spider ${proxystring}"$1" 2>&1 | $TEELOG
return 1;
fi
答案 2 :(得分:0)
我认为,你可以利用这个特例。如果您使用grep -v 'HTTP/1.1 200 OK'
,如果匹配失败,您显然会得到否输出,但如果成功,则完全 HTTP/1.1 200 OK
(其中'这种状态行上没有其他文字。)
因此,您可以无条件地将grep
的输出写入$TEELOG
,但在LOGFILE
失败时将200响应硬编码到grep
if ! wget -S --spider "$proxystring$1" 2>&1 | grep -v 'HTTP/1.1 200 OK' | $TEELOG; then
return 1
else
echo 'HTTP/1.1 200 OK' >> "$LOGFILE"
return 0
fi
(顺便说一句,我怀疑TEELOG
类似于tee somefile
;使用shell函数而不是变量:
TEELOG () {
tee somefile
}
)