Problem mit Bash-Skripten

Problem mit Bash-Skripten

Ich bin furchtbar mit Bash-Skripten und brauche bei Folgendem Hilfe:

#!/bin/bash

if [ -e Pretty* ];then
ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

Das Problem hier ist die ncftpput-Zeile. Wenn ich stattdessen einfach ein [ echo "working" ] eingebe, ist alles in Ordnung, aber wenn ich die ncftpput-Zeile versuche, bekomme ich nur [ Zeile 5: [: zu viele Argumente ]

Der Befehl ncftpput allein funktioniert einwandfrei.

Irgendwelche Ideen?

Antwort1

Sie können Globbing nicht mit -einside verwenden [], da dies wahrscheinlich mehr als ein Ergebnis zurückgibt, was zu einem Fehler wegen zu vieler Argumente führt.

Du kannst es versuchen:

shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]

oder

if [[ "$(echo Pretty*)" != "Pretty*" ]]

Verwenden Sie außerdem Einrückungen, Leerzeichen und Zeilenfortsetzungen, um Ihren Code lesbarer zu machen:

#!/bin/bash

shopt -s nullglob
if [[ -n "$(echo Pretty*)" ]]; then
    ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 \
        /home/xbmc/TV/Pretty_Little_Liars/ Pretty*
else
    echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

Antwort2

Versuch es.

#!/bin/bash -x

if [ -e "Pretty*" ];then
`ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ Pretty*`
else
echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

Antwort3

Nun, wenn es sich über zu viele Argumente beschwert, unterbrechen Sie es mit einem „for“.

#!/bin/bash

if [ -e Pretty* ];then
   for FILE in Pretty*
   do
       ncftpput -R -DD -v -u xbmc -p xbmc 192.168.1.100 /home/xbmc/TV/Pretty_Little_Liars/ "$FILE"
   done
else
   echo "No new folders"
fi

find -depth -type d -empty -exec rmdir {} \;

Die Verwendung von "" um $FILE stellt sicher, dass Dateien mit Leerzeichen im Namen nichts Unerwartetes tun.

verwandte Informationen