windows - Looping in Bash: syntaksfejl: uventet slutning af filen

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ny på denne Bash/Shell ting og skal lave nogle netværksanalyser til en samlet opgave.


Bare forsøger at lave en simpel loop, men får en underlig fejl, der ikke har kunnet rettes, på trods af en 2 timers Google-gennemgang:


#!/bin/bash
x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times"
  x=$(( $x + 1 ))
done


Jeg har forsøgt at bruge en for loop ved hjælp af følgende syntaks:


#!/bin/bash
for i in {1..5}
do
   echo "Welcome $i times"
done


Når jeg placerer det første script på min server, får jeg følgende besked:


./temp.sh: line 8: syntax error: unexpected end of file


Inden du kører denne fil, har jeg udført følgende kommandoer for at tilføje tilladelser og gøre filen eksekverbar:


ls -l temp.sh
chmod +x temp.sh


Som en sidebesked fandt jeg følgende stackoverflow spørgsmål om sløjfer, kopieret den 'faste kode' og fik den samme fejl: Looping a Bash Shell Script


Jeg kører version 4 + og bruger G-VIM som teksteditor på Windows 7. Nogen har nogen ideer?


BESTYRET TIL AT LØSE DENNE MIG:


Da mit ry stadig er for lavt, kan jeg ikke svare på det selv i øjeblikket, så for at stoppe folk, der spilder tid her er, hvordan jeg fikset det:


Ok, jeg har formået at rette op på dette, så det vil lade op for alle andre, der ser rundt.


Mit problem var, at jeg brugte FileZilla til at oprette forbindelse til min server. Det ser ud til, at selvom jeg brugte WinVi eller G-Vim til at oprette filerne, blev FileZilla tilføjet en del ekstra tegn til slutningen af ​​min fil, da jeg overførte det til serveren som jeg kører Windows.


Jeg skiftede til WinSCP som min forbindelsesagent og prøvede det og hej presto fungerede fint.


Tak for de andre svar.


Lewis

Bedste reference


Før du kører bash scriptet, brug kommandoen dos2unix på den


dos2unix <bashScript>
./<bashScript>

Andre referencer 1


Ok, jeg har formået at rette op på dette, så det vil lade op for alle andre, der ser rundt.


Mit problem var, at jeg brugte FileZilla til at oprette forbindelse til min server. Det ser ud til, at selvom jeg brugte WinVi eller G-Vim til at oprette filerne, blev FileZilla tilføjet en del ekstra tegn til slutningen af ​​min fil, da jeg overførte det til serveren som jeg kører Windows.


Jeg skiftede til WinSCP som min forbindelsesagent og prøvede det og hej presto fungerede fint.

Andre referencer 2


Har du en newline efter done? Det kan nok tage højde for problemerne.


Fungerer det med bash i Cygwin på din maskine? (Det skal, det virker fint, når det kopieres til min Mac, for eksempel med nogen af ​​sh, bash eller ksh kører den.)

Andre referencer 3


Jeg fik også dette problem. Faktisk er løsningen til dette problem, mens du skriver script-kontrol i redigeringsmenuen EOL Konvertering er Unix-format eller ej. Det skal være Unix-format for shell script.