Pertanyaan Bagaimana saya meminta masukan Ya / Tidak / Batal dalam skrip shell Linux?


Saya ingin menjeda masukan dalam skrip shell, dan meminta pengguna untuk memilih. Pertanyaan tipe standar 'Ya, Tidak, atau Batal'. Bagaimana saya mencapai ini dalam permintaan bash yang khas?


1100
2017-10-22 17:03


asal


Jawaban:


Metode yang paling sederhana dan paling banyak tersedia untuk mendapatkan input pengguna pada prompt shell adalah read perintah. Cara terbaik untuk menggambarkan penggunaannya adalah demonstrasi sederhana:

while true; do
    read -p "Do you wish to install this program?" yn
    case $yn in
        [Yy]* ) make install; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

Metode lain, ditunjukkan oleh Steven Huwig, adalah milik Bash select perintah. Di sini adalah contoh yang sama menggunakan select:

echo "Do you wish to install this program?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) make install; break;;
        No ) exit;;
    esac
done

Dengan select Anda tidak perlu membersihkan masukan - ini menampilkan pilihan yang tersedia, dan Anda mengetikkan nomor yang sesuai dengan pilihan Anda. Ini juga loop otomatis, jadi tidak perlu while true loop untuk mencoba lagi jika mereka memberikan input yang tidak valid.

Juga, silakan periksa jawaban yang sangat baik oleh F. Hauri.


1269
2017-10-22 17:08



Setidaknya lima jawaban untuk satu pertanyaan umum.

Bergantung kepada

  •  compliant: dapat bekerja pada sistem yang buruk dengan generik  lingkungan
  •  spesifik: menggunakan apa yang disebut bashisms

dan jika kamu mau

  • pertanyaan / jawaban sederhana '`in line' '(solusi umum)
  • antarmuka yang diformat cantik, seperti  atau lebih grafis menggunakan libgtk atau libqt ...
  • menggunakan kemampuan membaca riwayat yang kuat

1. Solusi generik POSIX

Anda bisa menggunakan read perintah, diikuti oleh if ... then ... else:

echo -n "Is this a good question (y/n)? "
read answer

# if echo "$answer" | grep -iq "^y" ;then


374
2018-01-10 10:53



echo "Please enter some input: "
read input_variable
echo "You entered: $input_variable"

333
2017-10-22 17:08



Anda dapat menggunakan built-in Baca baca komando; Menggunakan -p opsi untuk meminta pengguna dengan pertanyaan.

Karena BASH4, Anda sekarang dapat menggunakan -i untuk menyarankan jawaban, jadi pengguna hanya perlu menekan return untuk memasukkannya:

read -e -p "Enter the path to the file: " -i "/usr/local/etc/" FILEPATH
echo $FILEPATH

(Tetapi ingat untuk menggunakan opsi "baca" -e untuk memungkinkan pengeditan garis dengan tombol panah)

Jika Anda menginginkan logika "ya / tidak", Anda dapat melakukan sesuatu seperti ini:

read -e -p "
List the content of your home dir ? [Y/n] " YN

[[ $YN == "y" || $YN == "Y" || $YN == "" ]] && ls -la ~/

117
2018-05-13 04:44



Bash punya memilih untuk tujuan ini.

select result in Yes No Cancel
do
    echo $result
done

95
2017-10-22 18:14



read -p "Are you alright? (y/n) " RESP
if [ "$RESP" = "y" ]; then
  echo "Glad to hear it"
else
  echo "You need more bash programming"
fi

51
2018-02-03 13:23



Inilah yang saya satukan:

#!/bin/sh

promptyn () {
    while true; do
        read -p "$1 " yn
        case $yn in
            [Yy]* ) return 0;;
            [Nn]* ) return 1;;
            * ) echo "Please answer yes or no.";;
        esac
    done
}

if promptyn "is the sky blue?"; then
    echo "yes"
else
    echo "no"
fi

Saya seorang pemula, jadi ambillah ini dengan butiran garam, tetapi tampaknya berhasil.


27
2017-08-30 17:59