Ich versuche, mithilfe des folgenden Skripts eine Sitemap für meine Website zu erstellen. Wenn ich es wie sh thsitemap.sh
folgt ausführe, erhalte ich eine Fehlermeldung und erstelle eine leere sitemap.xml-Datei:
thsitemap.sh: 22: thsitemap.sh: [[: not found
thsitemap.sh: 42: thsitemap.sh: [[: not found
thsitemap.sh: 50: thsitemap.sh: Syntax error: "(" unexpected
Aber als derselbe Benutzer, root
wenn ich diese Zeilen manuell kopiere und auf dem Terminal einfüge, funktioniert es fehlerfrei und die Datei sitemap.xml enthält alle URLs. Was ist das Problem? Wie kann ich das beheben?
#!/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
bash
shell
shell-script
THpubs
quelle
quelle
bash script.sh
Rufen Siesh
make auf,bash
um zum Posix-Modus zu wechseln. Ich erinnere mich, dass diese Art von Frage beantwortet wurde. Sie können sich darauf beziehen: unix.stackexchange.com/questions/44836/…Antworten:
Führen Sie das Skript aus als:
oder nur:
Wenn
bash
es unter Verwendung des Namens ausgeführt wirdsh
, werden die meisten seiner Erweiterungen deaktiviert, z. B. der[[
Testoperator.Da Sie die
#!/bin/bash
shebang-Zeile haben, müssen Sie den Shell-Interpreter nicht explizit in der Befehlszeile angeben. Wenn Sie das Skript als Befehl ausführen, wird diese Zeile verwendet, um die Shell zu finden.quelle
Beide Ihre ...
if [[ debug = "...“ ]] ; then...
Befehle sind falsch, sie sollten lesen ...quelle