执行此shell脚本会出现命令未找到错误
我不熟悉shell脚本。我试图编写一个脚本,逐行读取文本文件中的URL,然后使用执行此shell脚本会出现命令未找到错误,shell,unix,wget,Shell,Unix,Wget,我不熟悉shell脚本。我试图编写一个脚本,逐行读取文本文件中的URL,然后使用wget获取它们。我还需要分析日志文件中的错误消息 #!/bin/sh # SCRIPT: example.sh #reading the url file line by line DIR = /var/www/html/ # wget log file LOGFILE = wget.log # wget output file FILE = dailyinfo.`date +"%Y%m%d"` cd
wget
获取它们。我还需要分析日志文件中的错误消息
#!/bin/sh
# SCRIPT: example.sh
#reading the url file line by line
DIR = /var/www/html/
# wget log file
LOGFILE = wget.log
# wget output file
FILE = dailyinfo.`date +"%Y%m%d"`
cd $DIR
FILENAME = url.txt
cat $FILENAME | while read LINE
do
echo "$LINE"
wget $LINE -O $FILE -o $LOGFILE
done
我已使用chmod+x example.sh更改了权限
但在执行时,我发现命令未找到错误,原因是目录
,文件
和日志文件
。
如何纠正?
还有如何进行解析部分?Petesh当然是正确的,您需要将=
符号直接放在变量名后面
对于这种特殊情况,我建议您使用wget-I input-url.txt-o logfile.txt
,然后对日志文件进行grep以查找错误。wget的-i
标志从文本文件中读取URL列表,并“wget”每个URL,省去了你发明轮子的麻烦
如果希望将其放在shell脚本中,请使用类似以下内容:
#!/bin/sh
DIR=/var/www/html/
# wget log file
LOGFILE=wget.log
# wget output file
FILE=dailyinfo.`date +"%Y%m%d"`
# just for debugging
cd $DIR
echo "wget-ing urls from $FILE and writing them to $FILE in $DIR. Saving logs to $LOGFILE"
wget -i $FILE -o $LOGFILE
grep -i 'failed' logfile.txt
下面是日志文件中的一个错误示例:
--2013-01-15 15:01:59-- http://foo/
Resolving foo... failed: nodename nor servname provided, or not known.
wget: unable to resolve host address ‘foo’
检查wget的返回代码也很有用<代码>0
表示成功,非零值表示各种失败。您可以通过访问shell变量$?
来检查它们
因此,结合这一点,下面是一个示例脚本:
#!/bin/sh
wget -i input-urls.txt -o logfile.txt
if [ $? -eq 0 ]; then
echo "All good!"
else
# handle failure
grep -i 'failed' logfile.txt
fi
如果您需要更多详细信息,wget的返回代码列在手册页上(man wget
,或使用类似的在线资源)。我给了它一个快速的实验,它看起来像是wget返回一个非零的退出代码,即使只有一个URL触发了一个失败。Petesh当然是正确的,您需要在变量名后面直接加上=
符号
对于这种特殊情况,我建议您使用wget-I input-url.txt-o logfile.txt
,然后对日志文件进行grep以查找错误。wget的-i
标志从文本文件中读取URL列表,并“wget”每个URL,省去了你发明轮子的麻烦
如果希望将其放在shell脚本中,请使用类似以下内容:
#!/bin/sh
DIR=/var/www/html/
# wget log file
LOGFILE=wget.log
# wget output file
FILE=dailyinfo.`date +"%Y%m%d"`
# just for debugging
cd $DIR
echo "wget-ing urls from $FILE and writing them to $FILE in $DIR. Saving logs to $LOGFILE"
wget -i $FILE -o $LOGFILE
grep -i 'failed' logfile.txt
下面是日志文件中的一个错误示例:
--2013-01-15 15:01:59-- http://foo/
Resolving foo... failed: nodename nor servname provided, or not known.
wget: unable to resolve host address ‘foo’
检查wget的返回代码也很有用<代码>0
表示成功,非零值表示各种失败。您可以通过访问shell变量$?
来检查它们
因此,结合这一点,下面是一个示例脚本:
#!/bin/sh
wget -i input-urls.txt -o logfile.txt
if [ $? -eq 0 ]; then
echo "All good!"
else
# handle failure
grep -i 'failed' logfile.txt
fi
如果您需要更多详细信息,wget的返回代码列在手册页上(man wget
,或使用类似的在线资源)。我给了它一个快速的实验,它看起来像是wget返回一个非零的退出代码,即使只有一个URL触发了故障。问题#1
,在分配变量时,必须使用以下语法:
VARIABLE=value
i、 e.变量
和新值之间没有空格
否则,它将尝试以命令的形式执行变量
,这将触发命令未找到
错误
#!/bin/sh
# SCRIPT: example.sh
#reading the url file line by line
DIR=/var/www/html/
# wget log file
LOGFILE=wget.log
# wget output file
FILE=dailyinfo.`date +"%Y%m%d"`
cd $DIR
FILENAME=url.txt
cat $FILENAME | while read LINE
do
echo "$LINE"
wget $LINE -O $FILE -o $LOGFILE
done
可能会通过命令not found errors问题#1
,分配变量时必须使用以下语法:
VARIABLE=value
i、 e.变量
和新值之间没有空格
否则,它将尝试以命令的形式执行变量
,这将触发命令未找到
错误
#!/bin/sh
# SCRIPT: example.sh
#reading the url file line by line
DIR=/var/www/html/
# wget log file
LOGFILE=wget.log
# wget output file
FILE=dailyinfo.`date +"%Y%m%d"`
cd $DIR
FILENAME=url.txt
cat $FILENAME | while read LINE
do
echo "$LINE"
wget $LINE -O $FILE -o $LOGFILE
done
可能会通过命令未找到错误我刚刚遇到了与tcsh相同的错误消息:命令未找到。
奇怪的是,这是由行尾引起的。同样的脚本可以在find中使用LF结尾,但在CRLF结尾时失败。我刚刚在tcsh中遇到了相同的错误消息:Command not found。
奇怪的是,这是由行尾引起的。同样的脚本适用于LF结尾,但不适用于CRLF结尾。如果您能详细阐述一下,那就太好了。例如,告诉日志是什么样子,什么命令和什么正则表达式可能有助于操作。如果您能详细阐述一下,那就太好了。例如,告诉日志看起来如何,什么命令和什么正则表达式可能会帮助OP。谢谢@Petesh的帮助:)谢谢@Petesh的帮助:)