Dalam tutorial ini, kita akan membahas dasar-dasar select
membangun di Bash.
select
konstruksi memungkinkan Anda membuat menu.
Bash select
Bangun #
select
konstruksi menghasilkan menu dari daftar item. Sintaksnya hampir sama dengan for
lingkaran:
select ITEM in [LIST]
do
[COMMANDS]
done
[LIST]
dapat berupa rangkaian string yang dipisahkan oleh spasi, rentang angka, keluaran dari suatu perintah, larik, dan sebagainya. Permintaan khusus untuk select
konstruksi dapat diatur menggunakan PS3
variabel lingkungan.
Ketika select
konstruksi dipanggil, setiap item dari daftar dicetak di layar (kesalahan standar), didahului dengan angka.
Jika pengguna memasukkan nomor yang sesuai dengan nomor salah satu item yang ditampilkan, maka nilai [ITEM]
diatur ke item itu. Nilai item yang dipilih disimpan dalam variabel REPLY
. Jika tidak, jika input pengguna kosong, prompt dan daftar menu akan ditampilkan lagi.
select
loop akan terus berjalan dan meminta input pengguna hingga break
perintah dijalankan.
Untuk mendemonstrasikan cara select
pekerjaan konstruksi, mari kita lihat contoh sederhana berikut:
PS3="Enter a number: "
select character in Sheldon Leonard Penny Howard Raj
do
echo "Selected character: $character"
echo "Selected number: $REPLY"
done
Script akan menampilkan menu yang terdiri dari item daftar dengan nomor yang menyertainya dan PS3
mengingatkan. Ketika pengguna memasukkan nomor, skrip akan mencetak karakter dan nomor yang dipilih:
1) Sheldon
2) Leonard
3) Penny
4) Howard
5) Raj
Enter a number: 3
Selected character: Penny
Selected number: 3
Enter a number:
Bash select
Contoh #
Biasanya, select
digunakan dalam kombinasi dengan case
dari if
pernyataan.
Mari kita lihat contoh yang lebih praktis. Ini adalah kalkulator sederhana yang meminta pengguna untuk memasukkan dan melakukan operasi aritmatika dasar seperti penambahan, pengurangan, perkalian, dan pembagian.
PS3="Select the operation: "
select opt in add subtract multiply divide quit; do
case $opt in
add)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 + $n2 = $(($n1+$n2))"
;;
subtract)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 - $n2 = $(($n1-$n2))"
;;
multiply)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 * $n2 = $(($n1*$n2))"
;;
divide)
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 / $n2 = $(($n1/$n2))"
;;
quit)
break
;;
*)
echo "Invalid option $REPLY"
;;
esac
done
Ketika skrip dijalankan, itu akan menampilkan menu dan PS3
mengingatkan. Pengguna diminta untuk memilih operasi dan kemudian memasukkan dua angka. Bergantung pada input pengguna, skrip akan mencetak hasilnya. Pengguna akan diminta untuk melakukan operasi baru setelah setiap pemilihan hingga break
perintah dijalankan.
1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 1
Enter the first number: 4
Enter the second number: 5
4 + 5 = 9
Select the operation: 2
Enter the first number: 4
Enter the second number: 5
4 - 5 = -1
Select the operation: 9
Invalid option 9
Select the operation: 5
Salah satu kelemahan skrip ini adalah hanya dapat bekerja dengan bilangan bulat.
Ini adalah versi yang sedikit lebih maju. Kami menggunakan bc
alat yang mendukung angka mengambang untuk melakukan perhitungan matematis. Juga, kode berulang dikelompokkan di dalam suatu fungsi.
calculate () {
read -p "Enter the first number: " n1
read -p "Enter the second number: " n2
echo "$n1 $1 $n2 = " $(bc -l <<< "$n1$1$n2")
}
PS3="Select the operation: "
select opt in add subtract multiply divide quit; do
case $opt in
add)
calculate "+";;
subtract)
calculate "-";;
multiply)
calculate "*";;
divide)
calculate "/";;
quit)
break;;
*)
echo "Invalid option $REPLY";;
esac
done
1) add
2) subtract
3) multiply
4) divide
5) quit
Select the operation: 4
Enter the first number: 8
Enter the second number: 9
8 / 9 = .88888888888888888888
Select the operation: 5
Kesimpulan #
select
konstruksi memungkinkan Anda untuk dengan mudah menghasilkan menu. Ini sangat berguna saat menulis skrip shell yang membutuhkan input pengguna.
Jika Anda memiliki pertanyaan atau masukan, jangan ragu untuk memberikan komentar.