Saya memiliki skrip shell yang tidak berfungsi.
Memasukkan:
Server_Name=1
if [ $Server_Name=1 ]; then
echo Server Name is 1
else
echo Server Name is not 1
fi
Keluaran:
Server Name is 1
Tapi, jika saya berubah Server_Name=2
, outputnya adalah:
Server Name is 1
Ketika saya mengubah Server_Name
ke 2
, saya ingin katakan: Server Name is 2
.
Saya tahu itu if [ $Server_Name=1 ];
bagiannya.
Bagaimana saya memperbaikinya?
linux
bash
shell
shell-script
pengguna2649805
sumber
sumber
if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ...
Jawaban:
Skrip Anda menunjukkan Anda menggunakan perbandingan string.
Asumsikan nama server bisa berupa string, bukan hanya angka.
Untuk perbandingan String :
if [[ "$Server_Name" == 1 ]]; then
Catatan:
Spasi sekitar = adalah suatu keharusan
if [ $Server_Name=1 ]; then
SALAH[[...]] mengurangi kesalahan karena tidak ada perluasan nama path atau pemisahan kata yang terjadi antara [[dan]]
Lebih suka mengutip string yang merupakan "kata-kata"
Untuk perbandingan Integer :
if [[ "$Server_Name" -eq 1 ]]; then
Informasi lebih lanjut:
sumber
[[
adalah sintaks bash dan OP bertanya tentang shell, di mana itu tidak bekerjaCoba ini:
sumber
tidak berfungsi seperti yang dimaksudkan karena sintaks di dalam tanda kurung tunggal tidak khusus untuk Bash. Seperti biasa, variabel
$Server_Name
akan diganti dengan 1, sehingga semua perintah test ([
) melihat adalah argumen tunggal: string1=1
. Karena sengatan itu memiliki panjang non-nol, tes mengembalikan true .Untuk shell yang mematuhi POSIX, Anda dapat menggunakan perintah tes berikut :
cek adalah
$Server_Name
sama dengan string1
.cek adalah
$Server_Name
sama dengan angka1
, yaitu, ia melakukan perbandingan angka bukannya perbandingan string.Nilai balik dari kedua perintah akan berbeda, misalnya, jika Anda mendefinisikan
Server_Name=01
. Yang pertama akan mengembalikan false, yang kedua akan mengembalikan true.Perhatikan bahwa jika ada kemungkinan variabel
$Server_Name
tidak terdefinisi, itu harus dikutip atau tes akan menampilkan kesalahan ketika dipanggil.sumber
Mencoba,
keluaran:
sumber
Jawaban sederhana Kode Anda benar - hampir. satu-satunya hal yang Anda lewatkan adalah spasi ... (dan mungkin tambahan "=")
tidak akan menghitung dengan benar.
adalah apa yang kamu cari.
Dan sekarang pernyataan tentang string versus angka. Setiap kali Anda mencari perbandingan suka / tidak, maka == akan selalu baik-baik saja.
Dan saya menganggap Anda selalu memiliki nama server sebagai string, bukan angka - benar? ;-)
Selamat mencoba magang koding Anda yang kokoh.
Ciao
sumber