2017-06-13 134 views
0

有没有办法在不需要复制和粘贴多次的情况下写下面的内容?bash if语句删除冗余行

成功 - 这将打印的“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

存储在输出只要你想一个变量,然后使用这个变量作为许多时间:

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

你只需要运行一次的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 
0

有一个特例,你可以利用,我想。如果使用grep -v 'HTTP/1.1 200 OK',那么显然如果匹配失败,将得到输出,但如果成功()HTTP/1.1 200 OK(这样的状态行上没有其他文本),您将得到

这样,就可以无条件的grep输出写入$TEELOG,但硬编码200响应于LOGFILEgrep失败

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;使用替代变量的外壳功能:

TEELOG() { 
    tee somefile 
} 

+0

'TEELOG =“三通-a $ {LOGFILE }“'这不如函数? – bc81

+0

不;变量用于数据;函数是用于代码的。 – chepner

+0

感谢您的信息!仍在努力学习。 – bc81