Cara mengelola perluasan variabel bash kosong atau tidak

Cara mengelola perluasan variabel bash kosong atau tidak

Objektif

Objek tutorial ini adalah mempelajari cara memodifikasi perilaku bash saat memperluas variabel yang tidak disetel atau kosong menggunakan sintaks khusus.

Persyaratan

  • Tidak ada hak istimewa sistem khusus yang diperlukan untuk mengikuti tutorial ini

Perkenalan

Ekspansi Variabel adalah salah satu fitur paling umum yang digunakan dalam shell: ketika variabel ada dan merupakan bagian dari perintah, itu "diperluas", sehingga diganti dengan nilainya. Perluasan variabel kosong, adalah salah satu dari hal -hal itu, bahwa jika tidak dikelola dengan baik, dapat menyebabkan kerusakan serius pada suatu sistem: bayangkan perintah seperti ini:

$ sudo rm -rf "/$ dir"

Dalam kasus seperti ini, jika $ dir Variabel kosong atau tidak diatur, ekspansi tidak akan menghasilkan nilai, oleh karena itu perintah yang dieksekusi yang sebenarnya adalah:

$ sudo rm -rf /

Sistem kami akan hancur. Berurusan, atau lebih baik mencegah situasi seperti itu sangat penting. Dalam tutorial ini kita akan melihat cara mengelola perluasan variabel kosong menggunakan beberapa sintaks spesifik bash.



Gunakan nilai default jika suatu variabel kosong atau tidak disetel

Kasus pertama yang kami pertimbangkan adalah ketika variabel yang tidak disetel atau kosong dirujuk ke dalam ekspansi dan kami ingin menggunakan nilai fallback/default di tempatnya. Misalkan kita merujuk yang tidak ada $ warna Variabel sebagai bagian dari perintah berikut:

$ echo "langit adalah $ warna"

Hasil dari perintah ini adalah:

langitnya

Seperti yang diharapkan, karena variabel tidak ditetapkan, tidak ada yang dihasilkan dari ekspansi, meninggalkan kita dengan kalimat yang belum selesai (dan langit tanpa warna). Tidak ada kerugian nyata dalam kasus ini, tentu saja, tetapi bagaimana kita bisa menginstruksikan shell untuk menggunakan nilai default dalam kasus seperti ini?

Ada sintaks yang dirancang khusus untuk mendapatkan perilaku ini, dan sangat sederhana:

$ parameter: -word

Begini cara kerjanya:

$ echo "langit is $ color:-" blue "" langit itu biru 

Saat menggunakan sintaks ini, jika parameter tidak ada atau kosong, ekspansi akan menghasilkan nilai kata. Dalam hal ini, variabel $ warna tidak ditetapkan, oleh karena itu cangkang menggunakan "biru" sebagai hasil dari ekspansi.

Perlu diperhatikan bahwa bahkan jika ekspansi menghasilkan nilai yang ditentukan sebagai "default", dengan sintaks ini, setelah ekspansi berlangsung, $ warna Variabel masih akan tidak disetel:

$ echo "$ warna" 

Gunakan dan juga menetapkan nilai baru jika suatu variabel kosong atau tidak disetel

Perintah di atas tidak mengembalikan output, karena variabel, pada saat itu, masih belum diatur. Bagaimana jika kita ingin menggunakan nilai yang ditentukan saat memperluas variabel yang tidak disetel atau kosong, tetapi juga menetapkan nilai itu ke variabel setelah ekspansi terjadi? Sintaks yang sedikit berbeda memungkinkan kita mencapai apa yang kita inginkan:

$ parameter: = Word

Mari kita lihat contoh di mana sintaks ini digunakan:

$ echo "langit is $ color: =" blue "" langit itu biru 

Seperti yang terjadi sebelumnya, kata telah digunakan dalam ekspansi, sejak parameter (itu $ warna variabel) tidak disetel. Selain itu, kata, ("Biru" dalam hal ini), juga telah ditetapkan sebagai nilai variabel yang sebelumnya tidak disetel. Memverifikasi itu sangat mudah:

$ "langit adalah $ warna" langit itu biru 

Melihat? Perluasan $ warna Variabel sekarang menghasilkan "biru".



Gunakan nilai alternatif jika suatu variabel diatur

Sintaks yang sedikit berbeda memungkinkan kami mendapatkan hasil yang bahkan berbeda, ini dia:

parameter:+kata

Bagaimana cara memodifikasi perilaku shell? Saat sintaks ini digunakan, jika parameter kosong atau tidak, kata akan bukan digunakan, oleh karena itu ekspansi akan kosong. Jika, sebaliknya, variabel memiliki nilai, hasil ekspansi akan kata, dan nilai parameter tidak akan diubah. Mari kita klarifikasi ini dengan beberapa contoh:

Kasus pertama. Variabel $ warna tidak ditetapkan, oleh karena itu hasil dari ekspansi tidak akan ada:

$ echo "langit is $ color:+" blue "" langit adalah 

Kasus kedua. Variabel $ warna memiliki nilai: ekspansi akan menghasilkan nilai yang ditentukan di sebelah kanan :+, tetapi nilai dari $ warna Variabel tidak akan diubah:

# Tetapkan nilai ke variabel "color" $ color = "red" # karena variabel diatur, hasil ekspansi akan menjadi "biru" $ echo "langit adalah $ warna:+" biru "" Sky Is Blue # Nilai variabel "warna" belum diubah $ echo "$ color" red 
Menyalin

Menampilkan pesan kesalahan jika suatu variabel kosong atau tidak diatur

Jenis sintaks terakhir yang akan kita periksa di sini adalah:

$ parameter:?kata

Saat menggunakan sintaks ini, jika parameter tidak diatur atau kosong, skrip akan keluar dengan kesalahan. Selain itu, kata akan dikirim ke Stderr (Kesalahan standar). Demi contoh ini, pertimbangkan variabel "warna" yang tidak disetel seperti sebelumnya:

# Pesan yang kami tentukan ditampilkan untuk kesalahan standar $ echo "langit adalah $ color:?"Color Not Set" "Bash: Color: Color Not Set 
Menyalin

Perintah keluar dengan kesalahan dan warna tidak diatur Pesan ditampilkan. Jika variabel ditetapkan, hasil ekspansi akan menjadi nilainya sendiri:

$ color = "blue" $ echo "langit adalah $ color:?"Color Not Set" "Langit itu biru 
Menyalin

Tutorial Linux Terkait:

  • Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…
  • Variabel bash khusus dengan contoh
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Bash Scripting: Periksa apakah ada direktori
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
  • Bagaimana Mengelola Sejarah Bash
  • Ubuntu 20.04 Panduan