2017-03-09 97 views
0

我需要检查一些链接的状态听在一个名为paths.txt文件,我有写一个简单的for循环,但不能工作BASH - curl命令不与

for LINK in $(cat paths.txt) 
do 
    CURL="$(curl -I $LINK 2>/dev/null | head -n 1 | cut -d$' ' -f2)" 
    if [ "${CURL}" = "200" ] 
    then 
    echo ${LINK} >> true.txt 
    else 
    echo ${LINK} >> false.txt 
    fi 
done 

如果我启动curl命令工作纳入循环从终端我读取正确的状态,而不是如果我作出回应CURL变量我没有任何输出

+0

代替'CURL =“$(卷曲-I $ LINK 2>的/ dev/null的|头-n 1 |切-d $”'-f2)”','做回声$ LINK'。你有没有得到你的文件的正确内容? – Aserre

+0

是的,我已经尝试和工作,我已经插入'echo -e“\ n $ LINK \ n”'并正确显示所有链接由 – hellb0y77

+0

sepatared是否有任何空格或特殊字符(如'*'或'?' )在网址中? –

回答

1

运行这样的脚本:bash -x myscript并观察执行的命令。

+0

我在任何链接的末尾都找到了一个'\ r',我有正确的文件格式,现在完美工作,谢谢! – hellb0y77

+1

这不是一个真正的答案。这是一个可以指导答案的一般性评论。 – chepner

0

在bash脚本中不使用cat,因为这是不好的做法,可能会导致大文件出现问题。

SCRIPTDIR=`dirname -- "$0"` 
for siteUrl in $(< "$SCRIPTDIR/paths.txt") 
do 
    if [[ -z "$siteUrl" ]]; then break; fi 
    if [[ "$(curl --write-out "%{http_code}\n" --silent --output /dev/null ${siteUrl})" = "200" ]]; then 
     echo ${siteUrl} >> true.txt 
    else 
     echo ${siteUrl} >> false.txt 
    fi 
done