2016-06-29 7 views
1

Ich kann das folgende Skript nicht funktionieren, wenn der Pfad ($ 1) ein oder mehrere Leerzeichen enthält. Was soll ich ändern, damit es funktioniert?Ich kann dieses Skript nicht mit Ordnern mit Leerzeichen arbeiten, wie soll ich es lösen?

#!/bin/bash 
ws=/tmp/$RANDOM && mkdir $ws && cd $ws 
TRG=$1 && SRC=$1 
if [ "$1" != "" ];then 
    if [ "$3" != "" ];then 
     if [ "$2" == "enc" ];then 
      if [[ -d $1 ]];then 
       mv $1 ./ 
       zip -rq "$(basename $1).zip" "$(basename $1)" 
       SRC="$ws/$(basename $1).zip" 
      fi 
      openssl aes-256-cbc -a -salt -in $SRC -out $TRG -pass file:<(echo -n "$3") 
     elif [ "$2" == "dec" ];then 
      mv $1 ./ 
      SRC="$ws/$(basename $1)" 
      openssl aes-256-cbc -d -a -salt -in $SRC -out $TRG -pass file:<(echo -n "$3") 
      if grep -q "PK" <<<"$(awk 'FNR == 1 { print; exit }' $TRG)"; then 
       rm "$ws/$(basename $TRG)" 
       mv "$TRG" "$ws/$(basename $TRG)" 
       TRG="$ws/$TRG" 
       mkdir "$1" 
       unzip -o -qq "$(basename $TRG)" -d "$(cd $1 && cd .. && pwd)" 
      fi 
     else 
      echo "Incorrect operation" 
     fi 
    elif [ "$2" == "" ];then 
     echo "Password and mode is required" 
    else 
     echo "Password is required" 
    fi 
else 
    echo "No path specificated" 
fi 
rm -rf $ws 

Ich weiß, dass ich Anführungszeichen hinzufügen müssen, aber wenn ich tun, dass ich denke, ich werde einige vorhandene Befehle im Code vermasseln ...

+3

Führen Sie Ihren Code obwohl und http://www.shellcheck.net/ wie es richtig Ihr Problem lösen :-) – andlrc

+0

Beachten Sie auch, dass '$ (basename "$ 1")' mit '$ ersetzt werden {1 ## * /} ' – andlrc

+0

@andlrc Danke, ich überprüfe diese Seite und benutze $ {1 ## * /} anstelle von Basisname! – Zuzzuc

Antwort

1

Sie müssen auch zu Variablen innerhalb $(...) zitieren. Wenn nicht, kann dies zu unerwartetem Verhalten führen. So ersetzen Sie alle "$(basename $1)" durch "$(basename "$1")". Und auch Zitat Zuweisungen TRG="$1".

Dann sollte es so aussehen.

#!/bin/bash 
ws=/tmp/$RANDOM && mkdir "$ws" && cd "$ws" || exit 
TRG="$1" && SRC="$1" 
if [ "$1" != "" ];then 
    if [ "$3" != "" ];then 
     if [ "$2" == "enc" ];then 
      if [[ -d $1 ]];then 
       mv "$1" ./ 
       zip -rq "$(basename "$1").zip" "$(basename "$1")" 
       SRC="$ws/$(basename "$1").zip" 
      fi 
      openssl aes-256-cbc -a -salt -in "$SRC" -out "$TRG" -pass file:<(echo -n "$3") 
     elif [ "$2" == "dec" ];then 
      mv "$1" ./ 
      SRC="$ws/$(basename "$1")" 
      openssl aes-256-cbc -d -a -salt -in "$SRC" -out "$TRG" -pass file:<(echo -n "$3") 
      if grep -q "PK" <<<"$(awk 'FNR == 1 { print; exit }' "$TRG")"; then 
       rm "$ws/$(basename "$TRG")" 
       mv "$TRG" "$ws/$(basename "$TRG")" 
       TRG="$ws/$TRG" 
       mkdir "$1" 
       unzip -o -qq "$(basename "$TRG")" -d "$(cd "$1" && cd .. && pwd)" 
      fi 
     else 
      echo "Incorrect operation" 
     fi 
    elif [ "$2" == "" ];then 
     echo "Password and mode is required" 
    else 
     echo "Password is required" 
    fi 
else 
    echo "No path specificated" 
fi 
rm -rf "$ws" 
+0

Danke für die Hilfe! – Zuzzuc

Verwandte Themen