Bagaimana saya bisa membandingkan variabel dengan string teks, daripada integer, dalam pernyataan if / else?


24

Dalam proses penulisan skrip shell, saya mengalami masalah dengan pernyataan if / else berikut yang berada di suatu tempat di tengah-tengah skrip:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

Kesalahan pengembalian adalah:

./gitup: line 13: [: add: integer expression expected

dan kemudian melanjutkan dengan sisa skrip. Bagaimana saya bisa memiliki segmen if mengevaluasi / membandingkan variabel ke input string daripada integer; diperlukan kesalahan berbeda saat menggunakan "! =" di antara beberapa hal lain yang saya coba.

Jawaban:


38

Sesuatu seperti ini:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eqadalah untuk perbandingan angka, digunakan =untuk perbandingan string


Terima kasih. Saya sudah mencoba itu, dan skripnya akan bebas, memerlukan keystroke, tetapi hanya menemukan itu disebabkan oleh kesalahan sintaksis yang tidak terkait lebih jauh ke bawah, jadi ini bekerja dengan sempurna. Terima kasih untuk bantuannya.
tony_perkis666

3
@ josephmarhee: Perhatikan bahwa [[]]tes ini adalah konstruk spesifik Bash, dan contoh ini berfungsi dengan baik dengan POSIX []seperti yang digunakan dalam pertanyaan. Jika juru bahasa secara eksplisit diberikan sebagai #!/bin/bashatau serupa, [[]]dapat digunakan tanpa masalah (dan itu sedikit lebih cepat daripada alternatif di Bash , saya percaya - bukan itu harus menjadi leher botol tetap), kalau tidak, orang harus tetap dengan []. Jika seseorang tidak membutuhkan spesifik Bash sama sekali, skrip akan berjalan sedikit lebih cepat di misalnya Dash. Dan POSIX memastikan portabilitas yang melekat.
Daniel Andersson

4

Metode ini juga akan berhasil. Sangat mirip dengan jawaban @ Guru tetapi menghilangkan kebutuhan akan tanda kurung ganda.

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.