cygwin bash - Eğer ifade işe yaramazsa


0

Ben komut dosyası bash yeni ve ben Windows öğrenmeye çalışıyorum, bu yüzden cygwin indirdi. Windows 10'u kullanarak, cygwin v2.5.1

Bash paketini kurduğumdan emin oldum (yaptım) ve bazı derslerden geçmeye başladım, ancak if...fiifadelere ulaştığımda , çalışmamaya başladı. İşte kodum:

#!/usr/bin/env bash
#
echo 'Hello'
#
if [ 1 -eq 1 ]
then
  echo 'Success'
fi
echo 'Hello Again'

Çıktı

>./test.sh
Hello
./test.sh: line 10: syntax error: unexpected end of file

Hayatım boyunca neyin yanlış gittiğini çözemiyorum. İfadeleri kopyalayıp yapıştırdım ve farklı ifade türlerini denediysem, ancak hiçbir şekilde kayıtlı görünmüyor if.

Belki cygwin'i yanlış yapılandırdım.


Belki yarım kolon eksik? "İf [...]; o zaman" ı deneyin. Köşeli parantezlerden sonra yarı-kolonu not edin.
jehad,

Ayrıca, çok deyimli yarı-kolonun sadece üsluplu olduğunu biliyorum, ama belki cygwin versiyonunda buna ihtiyaç var !? Bilmiyorum, gerçekten bir Windows adam değil. :)
jehad

Yanıtlar:


0

Şey ... Kendimi aptal hissediyorum. Ama bu soruyu aynı problemi yaşayan başkaları için cevaplayacağım.

Windows bilgisayarda geliştirdiğimden beri, CRLF satır sonlarını kullanıyor. Sublime Text kullanıyorum ve satır sonlarını asla düşünemiyorum çünkü her zaman Windows için geliştiriyorum.

Ancak, elbette, bash scriptlerinin LF satır sonlarını kullanması gerekir, yoksa garip şeyler olur. Neden echokomutların yürütülmesine izin if...fiverip vermediğini söyleyemedim , ancak satır sonlarım LF'ye geçtiğimde her şey beklediğiniz gibi çalıştı.


Senaryo tamam görünüyordu ve Ubuntu’ya kopyalayıp yapıştırırken iyi geçti bash. Daha önce CR / LF ile ilgili yeni satırlarda bir sorun fark etmedim, çünkü gereksiz CR'lerin beyaz boşluk olarak görülmesi gerekir, ancak CR'leri yapıştırdığınız komut dosyasına eklediğimde aynı hatayı aldım. Dışarı yorumladı zaman Oysa if, thenve fisatırları, tüm echobeklendiği gibi komutlar çalıştı. İlginç bir problem ortaya çıkardın ve ben bu gece daha fazla araştıracağım, ama bu gece değil.
AFH

1
Ben bunun altına var düşünmek: CR görünüşte olduğu değil fakat bir metin karakteri olarak, beyaz boşluk olarak kabul. #Satırlara CR eklemek onların yorum satırlarını etkilemezken, echotakip eden CR'leri içeren satırlar hala geçerli bir sözdizimidir ve takip eden CR'leri çıktının bir parçası olarak alırlar. ifVe [doğru bir şekilde ayrıştırılır, ancak ], thenve fidolayı ekteki CR, değildir ve tamamlanması önce dosyanın sonuna karşılaşıldığında ifsözdizimi tamamlanır.
AFH

0

Benim için çalışıyor, ancak satır sonlandırmasını DOS stiline değiştirirsem (CR / LF satır sonlandırması)

$ u2d ./prova.sh
unix2dos: converting file ./prova.sh to DOS format...

$ ./prova.sh
Hello
./prova.sh: line 10: syntax error: unexpected end of file

bu yüzden komut dosyanızı unix stiline dönüştürün (satır sonu olarak LF)

$ d2u ./prova.sh
dos2unix: converting file ./prova.sh to Unix format...
$ ./prova.sh
Hello
Success
Hello Again
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.