Saya baru saja menulis skrip bash dan selalu mendapatkan EOF-Error ini.
Jadi inilah skrip saya (hanya berfungsi pada OS X):
#!/bin/bash
#DEFINITIONS BEGIN
en_sq() {
echo -e "Enabling smart quotes..."
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool true
status=$(defaults read NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool)
if [ "$status" = "1" ]
then
echo -e "Success! Smart quotes are now enabled."
SUCCESS="TRUE"
else
echo -e "Sorry, an error occured. Try again."
fi
}
di_sq() {
echo -e "Disabling smart quotes..."
defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false
status=$(defaults read NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool)
if [ "$status" = "0" ]
then
echo -e "Success! Smart quotes are now disabled."
SUCCESS="TRUE"
else
echo -e "Sorry, an error occured. Try again."
fi
}
en_sd() {
echo -e "Enabling smart dashes..."
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool true
status=$(defaults read NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool)
if [ "$status" = "1" ]
then
echo -e "Success! Smart dashes are now enabled."
SUCCESS="TRUE"
else
echo -e "Sorry, an error occured. Try again."
fi
}
di_sd() {
echo -e "Enabling smart dashes..."
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
status=$(defaults read NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool)
if [ "$status" = "0" ]
then
echo -e "Success! Smart dashes are now disabled."
SUCCESS="TRUE"
else
echo -e "Sorry, an error occured. Try again."
fi
}
#DEFINITIONS END
#---------------
#BEGIN OF CODE with properties
#This is only terminated if the user entered properties (eg ./sqd.sh 1 1)
if [ "$1" = "1" ]
then
en_sq
elif [ "$1" = "0" ]
then
di_sq
fi
if [ "$2" = "1" ]
then
en_sd
#exit 0 if both, $1 and $2 are correct entered and processed.
exit 0
elif [ "$1" = "0" ]
then
di_sd
#exit 0 if both, $1 and $2 are correct entered and processed.
exit 0
fi
#END OF CODE with properties
#---------------------------
#BEGIN OF CODE without properties
#This is terminated if the user didn't enter two properties
echo -e "\n\n\n\n\nINFO: You can use this command as following: $0 x y, while x and y can be either 0 for false or 1 for true."
echo -e "x is for the smart quotes, y for the smart dashes."
sleep 1
echo -e " \n Reading preferences...\n"
status=$(defaults read NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool)
if [ "$status" = "1" ]
then
echo -e "Smart quotes are enabled."
elif [ "$status" = "0" ]
then
echo -e "Smart quotes are disabled."
else
echo -e "Sorry, an error occured. You have to run this on OS X""
fi
status=$(defaults read NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool)
if [ "$status" = "1" ]
then
echo -e "Smart dashes are enabled."
elif [ "$status" = "0" ]
then
echo -e "Smart dashes are disabled."
else
echo -e "Sorry, an error occured. You have to run this on OS X!"
fi
sleep 3
echo -e "\n\n You can now enable or disable smart quotes."
until [ "$SUCCESS" = "TRUE" ]
do
echo -e "Enter e for enable or d for disable:"
read sq
if [ "$sq" = "e" ]
then
en_sq
elif [ "$sq" = "d" ]
then
di_sq
else
echo -e "\n\n ERROR! Please enter e for enable or d for disable!"
fi
done
SUCCESS="FALSE"
echo -e "\n\n You can now enable or disable smart dashes."
until [ "$SUCCESS" = "TRUE" ]
do
echo -e "Enter e for enable or d for disable:"
read sq
if [ "$sd" = "e" ]
then
en_sd
elif [ "$sd" = "d" ]
then
di_sd
else
echo -e "\n\n ERROR! Please enter e for enable or d for disable!"
fi
done
Dan ini kesalahan saya:
./coding.sh: line 144: unexpected EOF while looking for matching `"'
./coding.sh: line 147: syntax error: unexpected end of file
sudo echo ""
garis .. Menghapus 2 tanda kutip ganda, meninggalkansudo echo
membuatnya bekerja dengan sempurna.echo
dengansudo
? Yang mengatakan, apa yang Anda gambarkan tidak masuk akal, pasti ada sesuatu yang terjadi.sudo echo
karena skrip akan memerlukansudo
perintah nanti, tetapi saya ingin pengguna memasukkan kata sandinya lebih awal, sehingga skrip tidak memerlukan inputnya lagi selama beberapa menit. Dan untuk bug, saya memiliki kesalahan yang sama seperti yang terlihat di sini, tetapi itu diselesaikan dengan menghapus 2 tanda kutip ganda. Tidak ada yang terjadi ..echo ''"
) atau sesuatu seperti itu, tetapi harus ada sesuatu karenaecho ""
itu baik-baik saja.sudo echo
terasa agak aneh .. Dan saya akan mencoba lagi di linux install malam ini dan kembali mengomentari hasilnya.Kesalahan ini bisa sulit dilacak dalam situasi nyata. Di sini saya memberikan satu solusi untuk situasi dunia nyata. Saya akan menggunakan skrip saya sebagai contoh.
Saya memperbarui skrip shell saya. Saat menjalankannya saya mendapat pesan kesalahan berikut:
Ini adalah baris terakhir yang memiliki sepasang tanda kutip ganda.
Biasanya, saya memeriksa skrip shell saya setiap kali saya memodifikasinya. Kali ini, saya menunggu satu hari dan lupa di mana saya membuat modifikasi. Masalahnya terjadi di mana saja sebelum baris ini (1508). Masalahnya adalah bahwa saya bahkan berkomentar baris 1508
algojo shell masih mengatakan baris 1508 memiliki masalah.
Selanjutnya saya membuat salinan skrip shell asli. Menghapus sejumlah besar kode dari bawah. Kemudian validasi kode saya dengan perintah berikut
Sekarang file saya 1/3 dari ukuran aslinya. Saya segera melihat masalahnya:
Untuk beberapa alasan, "dalam {} yang tidak cocok tidak ditangkap oleh pengurai shell. Di sinilah pengurai shell dapat ditingkatkan lebih lanjut.
Algoritma tercepat untuk menemukan masalah, adalah menghapus setengah dari kode Anda dari bawah, jika kesalahan sintaks hilang, maka itu ada di setengah ini. Jika kesalahan sintaks masih ada, masalah di bagian atas.
Jika ada masalah di paruh berikutnya, batalkan hapus. Ulangi proses ini. Anda dapat mempersempit ke ukuran yang lebih kecil untuk menemukan sumber masalahnya.
Saat menghapus kode, Anda harus menghapus seluruh bagian kode. Misalnya seluruh fungsinya.
Anda dapat menggunakan bash -n scriptname atau langsung menjalankan skrip. Keduanya harus bekerja.
sumber