
Variabel lingkungan adalah nilai yang dinamai secara dinamis. Variabel lingkungan biasanya diekspor ke terminal menggunakan perintah yang ditunjukkan di bawah ini.
export $SOMEVARIABLE=value
File tersedia di semua terminal setelah sumber; untuk tujuan ini, variabel lingkungan disimpan di dalam file bash.
Misalkan user harus menggunakan atau mengubah variabel lingkungan dengan bantuan perintah sed. Dalam hal ini, Pengguna tidak dapat menggunakan perintah seperti yang disebutkan di atas untuk ini. Fungsi dan metode yang berbeda harus digunakan untuk perintah sed. Pada artikel ini, kita akan melihat beberapa metode tersebut, yaitu sebagai berikut.
Di command line Linux, sed adalah alat pemrosesan yang ampuh. Menggunakan compact sed one-liners, user sering melakukan penggantian teks yang cukup nyaman. Ketika user mengganti sed dengan variabel shell, itu juga memiliki beberapa kelemahan.
Cara Menggunakan Variabel Lingkungan dalam Perintah Sed
Mari kita ambil contoh, di sini kita memiliki file bernama test.txt.
cat test.txt
CURRENT_TIME = # fill the
current date and time
JAVA_HOME = # fill the
JAVA_HOME path
Kami akan menulis skrip shell untuk mengisi jalur JAVA_HOME dan waktu saat ini di sistem saat ini yang diberikan di atas. Proses ini mudah, tetapi ada beberapa masalah di dalamnya yang mungkin terjadi. Disini kita akan menulis script menggunakan GNU sed.
Seperti yang telah kami sebutkan di atas, di sini, kami akan mengganti jalur Java_HOME dan waktu saat ini. Untuk ini, pertama-tama kita akan mengisi waktu saat ini di tempat yang tepat di sini. Kita dapat menggunakan perintah tanggal untuk mendapatkan waktu saat ini.
cat solution.sh
#!/bin/sh
MY_DATE=$(date)
sed -i -r 's/^(CURRENT_TIME =).*/1 $MY_DATE/' test.txt
Script yang ditulis di atas tidak terlalu sulit untuk dipahami. Dengan terlebih dahulu mengganti perintah dalam variabel MY_DATE, dapatkan waktu dan tanggal saat ini dan simpan.
Setelah mendapatkan data menggunakan substitusi sed, user mengisinya dalam file. Kami telah menggunakan opsi -i dari perintah GNU sed untuk melakukan pengeditan di tempat.
Sekarang kita akan memeriksa dan menjalankan skrip kita.
$./solution.sh
$ cat test.txt
CURRENT_TIME = $MY_DATE
JAVA_HOME = # fill the JAVA_HOME path
Kita melihat pada output bahwa baris dengan “CURRENT_TIME =” telah diganti. Namun, literal “$MY_DATE” diisi alih-alih waktu dan tanggal saat ini.
Alasan mengapa variabel shell tidak diperluas dalam tanda kutip tunggal adalah karena kami menggunakan tanda kutip tunggal di bawah perintah sed.
Tanda kutip ganda digunakan dalam perintah sed untuk memungkinkan ekspansi variabel shell perbaikan cepat.
$ cat solution.sh
#!/bin/sh
MY_DATE=$(date)
sed -i -r "s/^(CURRENT_TIME =).*/1 $MY_DATE/" test.txt
Sekarang kita akan menguji skrip solution.sh lagi.
$./solution.sh
$ cat test.txt
CURRENT_TIME = Wed Jan 27 10:02:05 PM CET 2021
JAVA_HOME = # fill the JAVA_HOME path
Setelah mengisi waktu dan tanggal di tempat yang tepat, jalur JAVA_HOME terisi.
Kami melihat pembatas mana yang harus kami gunakan dengan menambahkan perintah sed lain ke skrip Solution.sh kami.
$ cat solution.sh
...
sed -i -r "s/^(CURRENT_TIME =).*/1 $MY_DATE/" test.txt
sed -i -r "s/^(JAVA_HOME =).*/1 $JAVA_HOME/" test.txt
Memeriksa skrip di atas.
$./solution.sh
sed: -e expression #1, char 24: unknown option to `s'
Kami melihat bahwa perintah sed baru yang telah ditambahkan tidak berfungsi. Jika kami mengujinya untuk kedua kalinya, kami melihat bahwa hanya variabelnya yang berbeda, tetapi cara kerjanya sama dengan perintah sed. Untuk Mengatasi Ini, Kita Harus Mengambil Tindakan Berikut:
Pembatas Tidak Ada dalam Variabel
Untuk mengetahui hal ini dengan baik, user harus terlebih dahulu memahami apa yang terkandung dalam variabel lingkungan $JAVA_HOME.
$ echo $JAVA_HOME
/usr/lib/jvm/default
Kita dapat melihat variabel shell tersebut diperluas dalam tanda kutip ganda. Jadi perintah sed kedua kami muncul setelah ekspansi variabel.
sed -i -r "s/^(JAVA_HOME =).*/1 /usr/lib/jvm/default/" test.txt
Garis miring (/) dalam nilai variabel mengganggu perintah ‘s’ (s/pattern/replacement/), itulah sebabnya perintah sed di atas tidak berfungsi. Dengan cara ini, kita dapat memilih karakter lain sebagai pembatas dari perintah ‘s’.
Pengguna dapat sedikit memodifikasi pe
rintah sed kedua untuk menyelesaikan ini dengan menggunakan ‘#’ sebagai pembatas dari perintah s.
sed -i -r "s#^(JAVA_HOME =).*#1 $JAVA_HOME#" test.txt
Sekarang kita uji script di atas.
$./solution.sh
$ cat test.txt
CURRENT_TIME = Wed Jan 27 10:36:57 PM CET 2021
JAVA_HOME = /usr/lib/jvm/default
Solusi 2
solution.sh berfungsi dalam banyak kasus. Juga, kita melihat bahwa ‘#’ dalam nama file adalah karakter yang valid di sebagian besar sistem file *nix. Jika kita mengeksekusi skrip kita ke JAVA_HOME pada sistem yang disetel ke /opt/#jvm#, skrip user gagal lagi. Kami Akan Melakukan Pekerjaan Berikut agar Skrip Kami Berfungsi di semua Kasus
- Jika user menggunakan ‘#’ sebagai pembatas untuk keterbacaan yang lebih baik, mereka harus memilih pembatas untuk perintah sed.
- Kita harus menghindari semua karakter pembatas yang ada di dalam isi variabel.
- Terakhir, kumpulkan bahan yang tersisa di perintah sed.
Pengguna dapat menggunakan substitusi bash untuk keluar dari pembatas. Misalnya, user dapat keluar dari semua karakter ‘#’ dalam variabel $VAR.
$ VAR="foo#bar#blah"
$ echo "${VAR//#/#}"
foo#bar#blah
Sekarang kita akan menerapkan skrip kita di sini.
$ cat solution.sh
#!/bin/sh
MY_DATE=$(date)
sed -i -r "s/^(CURRENT_TIME =).*/1 $MY_DATE/" test.txt
sed -i -r "s#^(JAVA_HOME =).*#1 ${JAVA_HOME//#/#}#" test.txt
Kami akan menguji dengan mengeksekusi skrip kami dengan variabel JAVA_HOME palsu untuk melihat apakah itu berfungsi seperti yang diharapkan.
$ JAVA_HOME=/opt/#/:/@/-/_/$/jvm./solution.sh
$ cat test.txt
CURRENT_TIME = Thu Jan 28 11:23:07 AM CET 2021
JAVA_HOME = /opt/#/:/@/-/_/$/jvm
Kami menyimpulkan bahwa skrip kami berfungsi meskipun kami memiliki banyak karakter khusus dalam variabel Java_HOME kami.
Kesimpulan
Pada artikel ini, kita melihat bagaimana menggunakan variabel lingkungan dengan perintah sed. Mereka juga membuat banyak error yang mereka sebabkan, yang juga telah kami sebutkan dalam artikel ini dan perbaikannya. Kami berharap dari artikel ini Anda akan mendapatkan pengetahuan lengkap yang Anda butuhkan.