Prompt for user input in a shell script
Shell scripts can be powerful for automation. Sometimes, we want to ask the user for input. Let’s have a look at a few options that can be very handy for your next shell script!
Fill a variable with input provided by the user
If we like the user to provide us with some details, like a name, email address, or hostname, we can use the read command.
read -p "What is your name? " name
echo "Your name is: ${name}"
How does it work? The read -p asks for user input and stores the result in the variable $name. On the second line we use this to display the value provided.
Prompt for a Yes/No answer
while true; do
read -p "Do you want to continue? " yesno
case $yesno in
[Yy]*)
echo "You entered Yes!"
# Insert here a task to do
break
;;
[Nn]*)
# Exit the program, as user answered "No"
exit
;;
*)
echo "Please answer Yes (y) or No (n)."
;;
esac
done
So how does this work?
Step 1: Wait
The while true makes the program go into a loop.
Step 2: Ask for user input and process it
As there is a read -p directly after the loop, it will wait for user input and put the result in the variable $yesno. If that is a Y (or y), it will perform the step related to that. The asterisk behind the [Yy] allows the user to input Yes, or Yup, or Yeah, as long as it starts with a small or capital Y.
Step 3: Perform the action
After the choice has been made, the action will be performed. If we answer N/n/No/no/Nope/NOK/etc, the program will stop as there is an exit command. In case the answer was something with a Y/y, then we first will perform the action, followed by a break. This break stops the while true loop, otherwise we get stuck into that.