我正在尝试使用以下脚本为我的网站生成站点地图。当我运行它时,sh thsitemap.sh
出现这样的错误并创建一个空的 sitemap.xml 文件:
thsitemap.sh: 22: thsitemap.sh: [[: not found
thsitemap.sh: 42: thsitemap.sh: [[: not found
thsitemap.sh: 50: thsitemap.sh: Syntax error: "(" unexpected
但作为同一用户,root
当我在终端上手动复制并粘贴这些行时,它可以正常工作,不会出现任何错误,并且 sitemap.xml 文件包含所有网址。有什么问题?我怎样才能解决这个问题?
#!/bin/bash
##############################################
# modified version of original http://media-glass.es/ghost-sitemaps/
# for ghost.centminmod.com
# http://ghost.centminmod.com/ghost-sitemap-generator/
##############################################
url="techhamlet.com"
webroot='/home/leafh8kfns/techhamlet.com'
path="${webroot}/sitemap.xml"
user='leafh8kfns' # web server user
group='leafh8kfns' # web server group
debug='n' # disable debug mode with debug='n'
##############################################
date=`date +'%FT%k:%M:%S+00:00'`
freq="daily"
prio="0.5"
reject='.rss, .gif, .png, .jpg, .css, .js, .txt, .ico, .eot, .woff, .ttf, .svg, .txt'
##############################################
# create sitemap.xml file if it doesn't exist and give it same permissions
# as nginx server user/group
if [[ ! -f "$path" ]]; then
touch $path
chown ${user}:${group} $path
fi
# check for robots.txt defined Sitemap directive
# if doesn't exist add one
# https://support.google.com/webmasters/answer/183669
if [ -f "${webroot}/robots.txt" ]; then
SITEMAPCHECK=$(grep 'Sitemap:' ${webroot}/robots.txt)
if [ -z "$SITEMAPCHECK" ]; then
echo "Sitemap: http://${url}/sitemap.xml" >> ${webroot}/robots.txt
fi
fi
##############################################
echo "" > $path
# grab list of site urls
list=`wget -r --delete-after $url --reject=${reject} 2>&1 |grep "\-\-" |grep http | grep -v 'normalize\.css' | awk '{ print $3 }'`
if [[ "$debug" = [yY] ]]; then
echo "------------------------------------------------------"
echo "Following list of urls will be submitted to Google"
echo $list
echo "------------------------------------------------------"
fi
# put list into an array
array=($list)
echo "------------------------------------------------------"
echo ${#array[@]} "pages detected for $url"
echo "------------------------------------------------------"
# formatted properly according to
# https://support.google.com/webmasters/answer/35738
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<urlset xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">" > $path
echo '
' >> $path;
for ((i=0;i<${#array[*]};i++)); do
echo "<url>
<loc>${array[$i]:0}</loc>
<lastmod>$date</lastmod>
<changefreq>$freq</changefreq>
<priority>$prio</priority>
</url>" >> $path
done
echo "" >> $path
echo "</urlset>" >> $path
# notify Google
# URL encode urls as per https://support.google.com/webmasters/answer/183669
if [[ "$debug" = [nN] ]]; then
wget -q --delete-after http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2F${url}%2Fsitemap.xml
rm -rf ${url}
else
echo "wget -q --delete-after http://www.google.com/webmasters/tools/ping?sitemap=http%3A%2F%2F${url}%2Fsitemap.xml"
echo "rm -rf ${url}"
fi
echo "------------------------------------------------------"
exit 0
答案1
将脚本运行为:
bash script.sh
要不就:
./script.sh
当bash
使用 name 运行时sh
,它会禁用大部分扩展,例如[[
测试运算符。
由于您有#!/bin/bash
shebang 行,因此无需在命令行上显式指定 shell 解释器。作为命令运行脚本将使用该行来查找 shell。
答案2
你的... if [[ debug = "...“ ]] ; then...
命令都不正确,他们应该读...
if [ "debug" = "Y" -o "debug" = "y" ]