bash if语句删除冗余行

时间:2017-06-13 01:01:58

标签: bash if-statement

有没有办法在不必多次复制和粘贴命令的情况下编写以下内容?

成功 - 它会将“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

3 个答案:

答案 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
}