我会事先道歉;这是我的第一篇文章,所以如果我不够具体,如果问题已经得到解答,我只是看起来不够用,如果我使用某种不正确的格式,我很抱歉。
也就是说,这是我的问题:在bash中,我尝试创建一个可以读取文件的脚本,其中列出了几十个URL。一旦读取每一行,我就需要运行一系列操作,第一个是使用lynx导航到网站。但是,在实践中,它将在第一行完美地运行。 Lynx去了,下载工作,然后随后重命名和组织该文件。但是然后它会跳过所有其他行,并且就像完成了整个文件一样。
我已经通过消除代码的所有其他部分,然后通过消除lynx来测试是否是导致问题的lynx。它可以在没有Lynx的情况下工作,但是,当然,我需要lynx来保证输出的其余部分对我有用。我只想发布代码:
!#/bin/bash
while read line; do
echo $line
lynx -accept_all_cookies $line
echo "lynx done"
od -N 2 -h *.zip | grep "4b50"
echo "od done, if 1 starting..."
if [[ $? -eq 0 ]]
then ls *.*>>logs/zips.log
else
od -N 2 -h *.exe | grep "5a4d"
echo "if 2 starting..."
if [[ $? -eq 0 ]]
then ls *.*>>logs/exes.log
else
od -N 2 -h *.exe | grep "5a4d, 4b50"
echo "if 3 starting..."
if [[ $? -eq 1 ]]
then
ls *.*>>logs/failed.log
fi
echo "if 3 done"
fi
echo "if 2 done"
fi
echo "if 1 done..."
FILE=`(ls -tr *.* | head -1)`
NOW=$(date +"%m_%d_%Y")
echo "vars set"
mv $FILE "criticalfreepri/${FILE%%.*}(ZCH,$NOW).${FILE#*.}" -u
echo "file moved"
rm *.zip *.exe
echo "file removed"
done < "lynx"
$SHELL
为了确定,我确实有一个名为“lynx”的文件,其中包含由返回值分隔的网址。此外,我使用所有那些“echo”来进行我自己的调试,但我已经尝试了有和没有回声的。当我执行脚本时,回声都显示出来......
感谢任何帮助,非常感谢你们!希望我没有违反这个帖子的任何规则!
PS:我在Linux Mint上通过“终端”程序运行。我在Gedit中使用bash编写脚本,如果有任何相关信息的话。谢谢! 编辑:实际上,回声测试重复所有三行。所以lynx似乎无法在同一个循环中重新开始?以下是脚本的简化版本,如下所示:
!#/bin/bash
while read -r line; do
echo $line
lynx $line
echo "lynx done"
done < "ref/url"
read "lynx"
$SHELL
请注意,我已将“url”文件更改为:
`www.google.com
www.majorgeeks.com
http://www.sophos.com/en-us/products/free-tools/virus-removal-tool.aspx`
答案 0 :(得分:2)
Lynx不能用于脚本,因为它会锁定终端。 Lynx是一个交互式控制台浏览器。
如果要访问脚本中的URL,请使用wget
,例如:
wget http://www.google.com/
有关退出代码,请参阅:http://www.gnu.org/software/wget/manual/html_node/Exit-Status.html
解析html-content使用:
VAR=`wget -qO- http://www.google.com/`
echo $VAR
答案 1 :(得分:1)
我找到了一种方法可以满足你在循环中运行lynx命令并替换不同url链接的要求。
使用
echo `lynx $line`
(以单引号(')回显lynx $行)
而不是lynx $line
。您可以参考以下内容:
您的代码
!#/bin/bash
while read -r line; do
echo $line
lynx $line
echo "lynx done"
done < "ref/url"
read "lynx"
$SHELL
尝试以下
!#/bin/bash
while read -r line; do
echo $line
echo `lynx $line`
echo "lynx done"
done < "ref/url"
答案 2 :(得分:0)
很久以前我应该回答这个问题。我让程序正常运行,it's now on Github!
无论如何,我只需将循环包装在一个函数中。像这样:
progdownload () {
printlog "attmpting download from ${URL}"
if echo "${URL}" | grep -q "http://www.majorgeeks.com/" ; then
lynx -cmd_script="${WORKINGDIR}/support/mgcmd.txt" --accept-all-cookies ${URL}
else wget ${URL}
fi
}
URL="something.com"
progdownload