Instrukcja if w bashu i unexpected token `fi`

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Kuriozalny
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 26 sty 2007, 18:03
Płeć: Mężczyzna
Wersja Ubuntu: 16.04
Środowisko graficzne: Unity
Architektura: x86_64

Instrukcja if w bashu i unexpected token `fi`

Post autor: Kuriozalny »

Jesli ktos bylby na tyle pomocny, zeby napisac mi jak prawidlowo powinna wygladac instrukcja warunkowa z powiedzmy trzema warunkami, bybym wdzieczny.
Do tej pory bylem przyzwyczajony do petli z PHP, ktore uwazam za najbardziej intuicyjne. Niestety w skrypcie bash za kazdrym razem zwracany jest blad:

Kod: Zaznacz cały

./script: line 64: syntax error near unexpected token `fi'
./script: line 64: `fi'
Tutaj caly if. Jest troche enigmatycznie, ale problem wydaje sie lezec gdzies w szkielecie instrukcji, nie w samym kodzie.

Kod: Zaznacz cały

if [ $n == 1 ]							# conditional statement, if stdin returns 1 then
	then					
		DIR=~/Desktop/Pictures/$DATE		# builds up variable eg. ~/Desktop/Pictures/YYYY-MM-DD_hh:mm:ss
		mkdir ${DIR}						# creates directory from variable above
		for (( i=0; i<${PICLEN}; i++ ));	# loops as many times as array length
			do								# 
				FILE=~/Desktop/${PIC[$i]}	# builds up variable eg, ~/Desktop/*.jpeg depending on array element
				mv ${FILE} ${DIR}			# moves each desktop file from pattern to backup directory
			done
elif [ $n == 2]
	then
		DIR=~/Desktop/Video/$DATE
		mkdir ${DIR}
		for (( i=0; i<${VIDLEN}; i++ ));
			do
				FILE=~/Desktop/${VID[$i]}
				mv ${FILE} ${DIR}
			done		
elif [ $n == 3]
	then
		DIR=~/Desktop/Textfiles/$DATE
		mkdir ${DIR}
		for (( i=0; i<${TXTLEN}; i++ ));
			do
				FILE=~/Desktop/${TXT[$i]}
				mv ${FILE} ${DIR}
			done
elif [ $n == 4]
	then
		DIR=~/Desktop/Music/$DATE
		mkdir ${DIR}
		for (( i=0; i<${AUDLEN}; $i++ ));
			do
				FILE=~/Desktop/${AUD[$i]}
				mv ${FILE} ${DIR}
			done
elif [$n == 5 ]
	then
		#not tested
		#tar -cvf backup_${DATE} ~/Desktop/*
fi
lazar
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 17 lip 2016, 08:21

Re: Instrukcja if w bashu i unexpected token `fi`

Post autor: lazar »

Do tej pory bylem przyzwyczajony do petli z PHP, ktore uwazam za najbardziej intuicyjne.
Pojęcie względne, kwestia przyzwyczajenia się. U Ciebie nie działa kod ponieważ utworzyłeś pusty warunek:

Kod: Zaznacz cały

elif [$n == 5 ]
   then
      #not tested
      #tar -cvf backup_${DATE} ~/Desktop/*
Jak on ma poprawnie zadziałać skoro nic tam nie ma? Ja widzę tylko komentarz, który nic nie robi. Twój błąd. Dodaj tam np. echo lub całkiem to wywal i problem się rozwiąże. Ewentualnie przed elif i then dodaj #.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 50 gości