Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Bash hjälp [While]

Hallå !
Tänkte att någon kunde hjälpa mig med en while sats jag gjort..

238 read qslay 239 # Look for 240 while [ "$qslay" != "y" ] || [ "$qsay" != "n" ]; do 241 echo "Incorrect answear, retry..." 242 read qslay 243 done

Jag vil alltså loopa det där så länge $qslay inte är "y" eller "n"
Problemet är det att de loopar i all evighet vad jag än skriver in.

Några idéer? Fel syntax? Har googlat och hittat massor, men inte på just "eller/ || "

//Richard

Internet är coolt.

Trädvy Permalänk
Medlem
Plats
/dev/null
Registrerad
Feb 2004

Det är OCH du letar efter inte ELLER. Annars kommer loopen fortsätta även fast $qslay är "y" eftersom då är detta sant; "$qsay" != "n" och vice versa.

while [ "$qslay" != "y" -a "$qslay" != "n" ]; do

Hur man installerar program i *nix | There is no Swedish conspiracy

these days you can't use the Web at 2400 baud because the ads are 24KB - Bill Joy

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Perfekt!
Dock så fungerade IF med ||
-o står alltså för "or" och -a för "and"?

Tack

[EDIT] fungerade inte.

[EDIT 2] Fungerar med -a dessvärre...
verkar som om det är -a som ersätter || då

Internet är coolt.

Trädvy Permalänk
Medlem
Plats
Mölndal
Registrerad
Jul 2005

Om du ger kommandot "man test" så ser man att -a är AND.

Följande fungerar:

#!/bin/bash read qslay # Look for while [ "$qslay" != "y" ] && [ "$qslay" != "n" ]; do echo "Incorrect answear, retry..." read qslay done

OBS att du hadde stavat fel på qslay vid n testet (du testar mot variabeln qsay)!

Vid felsökning av script så är ett bra tips att hänga på -x flaggan (scriptet börjar med "#!/bin/bash -x"), då skrivs raderna ut och man ser enklare vad som är fel.

Kriga mot min brute: http://gunnard.se.mybrute.com om du vågar :D

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Feb 2003

Ok! det fingerar med -a nu ja, eller && kanske...
Bara det att jag förstår inte riktigt.. samma variabel kan inte vara två olika saker samtidigt och då borde inte while satsen gå ut?

Elelr nej jag kom på varför nu, så länge variabeln INTE är "n" OCH INTE är "y"

Jag förvirrade mig själv...
Fungerar prima nu!

//Richard

Internet är coolt.