GNU/Linux >> Belajar Linux >  >> Linux

Kesalahan Skrip Bash:Ekspresi Integer Diharapkan?

Saya mengalami masalah yang agak aneh, saya menjalankan skrip (Bash) di beberapa server dan berhenti bekerja di salah satu server (berfungsi dengan baik di semua server lain).

Inilah bagian masalah dari skrip:(Saya tidak menulisnya sendiri, semua kredit masuk ke "Kaya") (http://www.notrainers.org/monitoring-memory-usage-on-linux-with-nagios- dan-nrpe/)

    if [ "$result" -lt "$warn_level" ]; then     #Line 56
    echo "Memory OK. $result% used."
    exit 0;
elif [ "$result" -ge "$warn_level" ] && [ "$result" -le "$critical_level" ]; then  #Line 59
    echo "Memory WARNING. $result% used."
    exit 1;
elif [ "$result" -gt "$critical_level" ]; then   #Line 62
    echo "Memory CRITICAL. $result% used."
    exit 2;
fi

Pesan kesalahan lengkap:

./check_memory.sh: Line 56: [: 7.: integer expression expected

./check_memory.sh: Line 59: [: 7.: integer expression expected

./check_memory.sh: Line 62: [: 7.: integer expression expected

Jika Anda memerlukan info lebih lanjut, beri tahu saya dan saya akan mencoba menyediakannya secepat mungkin.

Hargai semua masukan

Jawaban yang Diterima:

Dari tautan yang Anda berikan, saya melihat baris di bawah ini.

result=$(echo "$used / $total * 100" |bc -l|cut -c -2)

Sesuai komentar @Graeme, ubah baris di atas menjadi di bawah.

result=$(echo "$used / $total * 100" |bc -l)

Sekarang, setelah menambahkan baris di atas, kita harus mengubah output dari result ke bilangan bulat seperti di bawah ini.

result1=${result/.*}

Saya kira di salah satu mesin di mana kesalahan terjadi, output ini bukan bilangan bulat. Cukup ubah output dari hasil menjadi integer sehingga Anda dapat menangani kasus seperti itu. Tambahkan baris di bawah ini setelah Anda menghitung result .

result1=${result/.*}

Dan bukannya result ubah nama variabel sebagai result1 di dalam if loop, dan kesalahan tidak akan terjadi.

Saya menduga, cut -c -2 atribut kesalahan sebagian besar karena memotong 2 karakter pertama saja. Bagaimana jika hasil hanya memiliki satu karakter? Misalkan jika hasilnya 1.23456 , potongan di atas akan menghasilkan 1. sebagai nilai untuk result yang jelas merupakan penyebab dari integer expected kesalahan.

Alasan itu berfungsi dengan baik di server yang tersisa adalah karena tidak menemukan kasus di mana result variabel hanya memiliki satu digit. Sangat mungkin untuk gagal di server yang tersisa juga jika hasilnya adalah variabel satu digit (sesuatu seperti yang saya sebutkan dalam contoh di atas).

Terkait:Bagaimana menjalankan perintah sebagai administrator sistem (root)?
Linux
  1. Pelajari penanganan kesalahan Bash dengan contoh

  2. Typeset -a Apakah Memberikan Kesalahan Dalam Script?

  3. Script Bash Untuk Mengisi Template?

  1. Skrip Bash - Contoh Halo Dunia

  2. 6 Contoh Ekspresi Kondisional Bash ( -e, -eq, -z, !=, [, [[ ..)

  3. Jalankan skrip bash dari URL

  1. alternatif --config Java bash script

  2. nama dasar dengan spasi dalam skrip bash?

  3. Pencocokan pola skrip Bash