Maafkan saya karena ini adalah skrip yang sangat sederhana di Bash. Berikut kodenya:
#!/bin/bash
# june 2011
if [ $# -lt 3 -o $# -gt 3 ]; then
echo "Error... Usage: $0 host database username"
exit 0
fi
setelah menjalankan sh file.sh:
kesalahan sintaks: akhir file yang tidak terduga
Hal lain untuk diperiksa (baru saja terjadi pada saya):
Yaitu cuplikan yang tampak tidak bersalah ini akan menyebabkan kesalahan yang sama:
Untuk membuat pengurai bodoh senang:
sumber
;
pernyataan Every diharapkan diakhiri dengan;
begitu letakkan di bagian akhir misalnya:if [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash fi
akan menghasilkan kesalahan itu, sedangkanif [ -f ~/.git-completion.bash ]; then . ~/.git-completion.bash; fi;
tidak akan ... perhatikan titik koma kecil di akhir, yaitu: setelah.bash
danfi
.zsh
pengguna. Yang pertama bekerja dizsh
tetapi tidak dish
norbash
. Seandainya saya adalah 4 orang sehingga saya bisa memberikan 4 suara positif inisaya juga baru saja mendapat pesan kesalahan ini dengan menggunakan sintaks yang salah dalam sebuah
if
klausaelse if
(kesalahan sintaks: akhir file tidak terduga)elif
(sintaks yang benar)saya men-debugnya dengan mengomentari bit sampai berhasil
sumber
klausa if => fi yang tidak ditutup akan meningkatkannya juga
tip: gunakan trap untuk men-debug, jika skrip Anda sangat besar ...
misalnya
sumber
unexpected end of file
kesalahan akan terjadi segera setelahfi
dipukul.Saya mendapat jawaban ini dari masalah serupa di StackOverflow
Buka file di Vim dan coba
:set fileformat=unix
Terima kasih @lemongrassnginger
sumber
dos2unix
seperti yang disarankan oleh jawaban yang diterima.di cygwin saya membutuhkan: -
di .bash_profile. Dengan cara ini saya tidak perlu menjalankan unix2dos
sumber
Jadi saya menemukan posting ini dan jawabannya tidak membantu saya tetapi saya dapat mencari tahu mengapa itu memberi saya kesalahan. Saya punya
Masalahnya adalah bahwa saya menyalin kode di atas untuk menjadi suatu fungsi dan secara tidak sengaja men-tab kode tersebut. Perlu memastikan EOF terakhir tidak di tab.
sumber
EOF
menjorokkan empat spasi dan bash tidak menguraikannya karena itu. Menghapus spasi memperbaiki masalah.Saya mengalami masalah saat menulis pernyataan "if - fi" dalam satu baris:
Menulis multiline memecahkan masalah saya:
sumber
Ini terjadi pada saya ketika saya mencoba memanggil fungsi menggunakan tanda kurung, mis
seharusnya:
sumber
UNTUK WINDOWS:
Dalam kasus saya, saya bekerja pada OS Windows dan saya mendapatkan kesalahan yang sama saat menjalankan autoconf.
Kemudian saya mengonversi File dengan konversi EOL menjadi Windows (CR LF) sebagai berikut:
EDIT -> KONVERSI EOL -> WINDOWS (CR LF)
sumber
Saya dapat memotong dan menempelkan kode Anda ke dalam file dan berjalan dengan benar. Jika Anda menjalankannya seperti ini, seharusnya berfungsi:
"File.sh" Anda:
Perintah:
Perhatikan bahwa "file.sh" harus dapat dijalankan:
Anda mungkin mendapatkan kesalahan itu b / c dari cara Anda melakukan input (w / a pipa, wortel, dll.). Anda juga dapat mencoba membagi kondisinya menjadi dua:
Atau, karena Anda menggunakan
bash
, Anda dapat menggunakan sintaks bawaan:Dan, terakhir, Anda tentu saja dapat memeriksa apakah 3 argumen diberikan (bersih, pertahankan kompatibilitas shell POSIX):
sumber
Hilangnya kurung kurawal pada definisi fungsi akan menyebabkan kesalahan ini seperti yang baru saya temukan.
Yang tentunya harus seperti ini ...
sumber
Saya baru saja memotong dan menempelkan contoh Anda ke dalam sebuah file; itu berjalan dengan baik di bawah pesta. Saya tidak melihat ada masalah dengan itu.
Untuk ukuran yang baik, Anda mungkin ingin memastikannya diakhiri dengan baris baru, meskipun bash seharusnya tidak peduli. (Ini berjalan untuk saya dengan dan tanpa baris baru terakhir.)
Terkadang Anda akan melihat kesalahan aneh jika Anda tidak sengaja menyematkan karakter kontrol di file. Karena ini adalah skrip pendek, coba buat skrip baru dengan menempelkannya dari pertanyaan Anda di sini di StackOverflow, atau cukup dengan mengetiknya kembali.
Versi bash apa yang Anda gunakan? (
bash --version
)Semoga berhasil!
sumber
Pastikan nama direktori tempat file .sh ada tidak memiliki karakter spasi. misalnya: Katakanlah jika itu ada di folder bernama 'Folder Baru', Anda pasti menemukan kesalahan yang telah Anda kutip. Sebagai gantinya, beri nama sebagai 'New_Folder'. Saya harap ini membantu.
sumber
Rupanya, beberapa versi shell juga dapat mengeluarkan pesan ini ketika baris terakhir dari skrip Anda tidak memiliki baris baru.
sumber
Di Ubuntu:
Lalu,
File -> Save as
dan setelend line
keUnix/Linux
sumber
Saya tahu saya terlambat ke pesta. Semoga ini dapat membantu seseorang.
Periksa file .bashrc Anda. Mungkin mengganti nama atau memindahkannya.
Diskusi di sini: Tidak dapat mencari skrip bash sederhana
sumber
Untuk orang yang menggunakan MacOS:
Jika Anda menerima file dengan format Windows dan ingin berjalan di MacOS dan melihat kesalahan ini, jalankan perintah ini.
sumber
Dalam kasus saya, ada redundan
\
seperti berikut:Ada tidak yang
\
pada akhirDATA.PATH_PREFIX ./afs/kinetics400
sumber