Saya sepertinya tidak bisa menyelesaikan masalah apa dengan if
pernyataan berikut sehubungan dengan elif
dan then
. Ingatlah bahwa printf
ini masih dalam pengembangan. Saya belum bisa mengujinya dalam pernyataan itu, jadi kemungkinan besar salah.
Kesalahan yang saya dapatkan adalah:
./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'
Dan pernyataannya seperti itu.
if [ "$seconds" -eq 0 ];then
$timezone_string="Z"
elif[ "$seconds" -gt 0 ]
then
$timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
echo "Unknown parameter"
fi
bash
if-statement
StuStirling
sumber
sumber
then
pernyataan dalamif
danelif
tetapi tidak dalamelse
, dan juga pada umumnya.Jawaban:
Ada ruang yang hilang antara
elif
dan[
:seharusnya
Ketika saya melihat pertanyaan ini mendapatkan banyak pandangan, penting untuk menunjukkan bahwa sintaks yang harus diikuti adalah:
artinya dibutuhkan ruang di sekitar tanda kurung . Kalau tidak, itu tidak akan berhasil. Ini karena
[
itu sendiri adalah perintah.Alasan mengapa Anda tidak melihat sesuatu seperti
elif[: command not found
(atau serupa) adalah bahwa setelah melihatif
danthen
, shell mencari baikelif
,else
ataufi
. Namun ia menemukan yang lainthen
(setelah diformat salahelif[
). Hanya setelah mem-parsing pernyataan itu akan dieksekusi (dan pesan kesalahan sepertielif[: command not found
akan menjadi output).sumber
$ man [
if test "$seconds" -eq 0; then ... fi
setara denganif [ "$seconds" -eq 0 ];then ... fi ]
. @LeiYangman test
adalah apa yang sebenarnya Anda cariAnda memiliki beberapa masalah sintaksis dengan skrip Anda. Ini adalah versi tetap:
sumber
bash
saya temukan dengan mudah di stackexchange ... terima kasih.#!/bin/sh
.#!/bin/sh
tetapi tidak harus.sh
dapat digunakan sebagai gantinya untuk kompatibilitas yang lebih tinggi (tidak semua * nix distro memiliki bash sebagai shell default (beberapa memiliki ksh atau abu tetapi kebanyakan dari mereka memang bergantung pada standarsh
fungsi). Apalagi jika spesifik bash atau fitur lanjutan tidak digunakan dalam skrip maka 'sh' harus digunakan sebagai penerjemah (satu alasan lagi untuk itu) karena dapat menangani skrip dengan sendirinya.[
adalah perintah (atau builtin di beberapa shell). Itu harus dipisahkan oleh spasi putih dari pernyataan sebelumnya:sumber
type -a [
untuk melihat itu.Saya akan merekomendasikan Anda melihat dasar-dasar pengkondisian di bash.
Simbol "[" adalah perintah dan harus memiliki spasi putih sebelum itu. Jika Anda tidak memberikan spasi setelah elif Anda, sistem mengartikan elif [ sebagai perintah khusus yang jelas bukan yang Anda inginkan saat ini.
Pemakaian:
Singkatnya, edit segmen kode Anda ke:
Anda akan baik-baik saja tanpa kesalahan kompilasi. Segmen kode akhir Anda akan terlihat seperti ini:
sumber
Ruang kosong di antara
elif
dan[
istirahat program Anda sudah benar. Anda harus memperbaikinya dan memeriksanya. di sini adalah program tetap:tautan bermanfaat yang terkait dengan pernyataan bash if else
sumber