Bash dikirimkan dengan sejumlah perintah bawaan yang dapat Anda gunakan di baris perintah atau di skrip shell Anda.
Dalam artikel ini, kita akan menjelajahi read
bawaan perintah.
Bash read
#
bawaan
read
adalah perintah bawaan bash yang membaca baris dari input standar (atau dari deskriptor file) dan membagi baris menjadi kata-kata. Kata pertama ditetapkan untuk nama depan, kata kedua untuk nama kedua, dan seterusnya.
Sintaks umum read
built-in mengambil bentuk berikut:
read [options] [name...]
Untuk mengilustrasikan cara kerja perintah, buka terminal Anda, ketik read var1 var2
, dan tekan "Enter". Perintah akan menunggu pengguna memasukkan input. Ketik dua kata dan tekan “Enter”.
read var1 var2
Hello, World!
Kata-kata ditetapkan ke nama yang diteruskan ke read
perintah sebagai argumen. Gunakan echo
atau printf
untuk memverifikasinya:
echo $var1
echo $var2
Hello, World!
Alih-alih mengetik di terminal, Anda dapat meneruskan input standar ke read
menggunakan metode lain seperti perpipaan, here-string, atau heredoc:
echo "Hello, World!" | (read var1 var2; echo -e "$var1 \n$var2")
read
dan echo
diapit dalam tanda kurung dan dieksekusi dalam subkulit yang sama.Hello, World!
Berikut adalah contoh menggunakan string di sini dan printf
:
read -r var1 var2 <<< "Hello, World!"
printf "var1: %s \nvar2: %s\n" "$var1" "$var2"
Var1: Hello,
Var2: World!
Ketika tidak ada argumen yang diberikan ke read
perintah, seluruh baris ditugaskan ke REPLY
variabel:
echo "Hello, world!" | (read; echo "$REPLY")
Hello, World!
Jika jumlah argumen yang diberikan ke read
lebih besar dari jumlah kata yang dibaca dari input, kata-kata yang tersisa ditetapkan ke nama belakang:
echo "Linux is awesome." | (read var1 var2; echo -e "Var1: $var1 \nVar2: $var2")
Var1: Linux
Var2: is awesome.
Jika tidak, jika jumlah argumen kurang dari jumlah nama, nilai kosong akan diberikan ke nama yang tersisa:
echo "Hello, World!" | (read var1 var2 var3; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3")
Var1: Hello,
Var2: World!
Var3:
Secara default, read
menginterpretasikan garis miring terbalik sebagai karakter pelarian, yang terkadang dapat menyebabkan perilaku yang tidak terduga. Untuk menonaktifkan pelolosan garis miring terbalik, jalankan perintah dengan -r
pilihan.
Di bawah ini adalah contoh yang menunjukkan cara read
berfungsi saat dipanggil dengan dan tanpa -r
pilihan:
read <<< "Hello, \tWorld!"
printf %s "$REPLY"
Hello, tWorld!
read -r <<< "Hello, \tWorld!"
printf %s "$REPLY"
Hello, \tWorld!
Secara umum, Anda harus selalu menggunakan read
dengan -r
pilihan.
Mengubah Pembatas #
Perilaku default read
adalah untuk membagi baris menjadi kata-kata menggunakan satu atau lebih spasi, tab, dan baris baru sebagai pembatas. Untuk menggunakan karakter lain sebagai pembatas, tetapkan ke IFS
variabel (Pemisah Bidang Internal).
echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux
is
awesome.
Ketika IFS
diatur ke karakter selain spasi atau tab, kata-kata dipisahkan oleh tepat satu karakter:
echo "Linux::is:awesome." | \
(IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 \nVar2: $var2 \nVar3: $var3 \nVar4: $var4")
Garis dipisahkan dalam empat kata. Kata kedua adalah nilai kosong yang mewakili segmen di antara pembatas. Itu dibuat karena kami menggunakan dua karakter pembatas di samping satu sama lain (::
).
Var1: Linux
Var2:
Var3: is
Var4: awesome.
Anda dapat menggunakan lebih dari satu pembatas untuk membagi garis. Saat menentukan beberapa pembatas, tetapkan karakter ke IFS
variabel tanpa spasi di antaranya.
Berikut adalah contoh menggunakan _
sebuah -
sebagai pembatas:
echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 \n$var2 \n$var3")
Linux
is
awesome.
String Prompt #
Saat menulis skrip bash interaktif, Anda dapat menggunakan read
perintah untuk mendapatkan input pengguna.
Untuk menentukan string prompt, gunakan -p
pilihan. Prompt dicetak sebelum read
dijalankan dan tidak menyertakan baris baru.
Berikut ini contoh sederhananya:
read -r -p "Are you sure?"
Umumnya, Anda akan menggunakan read
perintah di dalam while
loop untuk memaksa pengguna memberikan salah satu jawaban yang diharapkan.
Kode di bawah ini akan meminta pengguna untuk reboot sistem:
while true; do
read -r -p "Do you wish to reboot the system? (Y/N): " answer
case $answer in
[Yy]* ) reboot; break;;
[Nn]* ) exit;;
* ) echo "Please answer Y or N.";;
esac
done
Jika skrip shell meminta pengguna untuk memasukkan informasi sensitif, seperti kata sandi, gunakan -s
opsi yang memberi tahu read
untuk tidak mencetak input pada terminal:
read -r -s -p "Enter your password: "
Menetapkan Kata ke Array #
Untuk menetapkan kata ke array, bukan nama variabel, aktifkan read
perintah dengan -a
pilihan:
read -r -a MY_ARR <<< "Linux is awesome."
for i in "${MY_ARR[@]}"; do
echo "$i"
done
Linux
is
awesome.
Ketika sebuah array dan nama variabel diberikan, semua kata ditetapkan ke dalam array.
Kesimpulan #
read
perintah digunakan untuk membagi baris input menjadi kata-kata.