执行此shell脚本会出现命令未找到错误

执行此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

我不熟悉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 $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的帮助:)