Bash - [: za dużo argumentów

TH
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Globalna Wioska
  • Postów: 54
0

Przekazuję wycinek kodu

Kopiuj
case $czynnosc in
    "zapis+"|"z+"|"Z+") # wykonaj kopię dla dużych stron
        poprzedni="$(ls -v | tail -1)"

        # utworzenie katalogu
        i=0
        while [ -d "${strona}_${data}_$i" ]; do
            ((i++))
        done
        ostatni="${strona}_${data}_$i"
        mkdir $ostatni

        echo "Kopiowanie pliów z poprzednie katalogu"

        rsync -azz $poprzedni/ $ostatni

        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
        
        echo "Zrzut bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "cd $ssh_sciezka && mysqldump --no-tablespaces -h$mysql_host -u$mysql_juzek -p$mysql_haslo $mysql_baza > $mysql_plik"
        
        echo "Kopia →"
        sshpass -p $ssh_haslo rsync -azz -e "ssh -p $ssh_port" $ssh_nazwa_host:$ssh_sciezka/ $ostatni
        
        echo "Usunięcie bazy"
        sshpass -p $ssh_haslo ssh -p $ssh_port $ssh_nazwa_host "rm -f $ssh_sciezka/kopia_zapasowa_*.sql"
        
        if [ -e $ostatni/kopia_zapasowa_*.sql ]
        then
            echo "|" $ostatni "|" "OK"
        fi 
esac

Kiedy uruchamiam "zapis+" posiadam ./x.sh: linia 103: [: za dużo argumentów. Bo jeśli zmienię rsync -azz $poprzedni/ $ostatni na rsync -azz $poprzedni $ostatni to już nie błędu struktury (wiem że logicznie jest to zmiana). Co jest powodem?

Edit
Teraz mi się pojawia błąd
./x.sh: linia 103: [: q/t.txt: oczekiwano operatora dwuargumentowego

TH
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Globalna Wioska
  • Postów: 54
0

Czy rozwiązaniem może być?

Kopiuj
q=$ostatni/kopia_zapasowa_*.sql
        if [ -e $q ]
        then
            echo "|" $ostatni "|" "OK"
        fi 
99xmarcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2420
1

$ostatni/kopia_zapasowa_*.sql może się rozwinąć do więcej niż jednego pliku, [ -e (aka test -e) tego nie obsługuje.

Odp: https://stackoverflow.com/a/4264351/1779504

kbi64
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wielkopolska
2

Sprawdź dodatkowo skrypt shellcheckiem
apt install shellcheck
lub
yum install shellcheck

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.