Suggest answer to user input in bash scripting

2019-03-17 11:53发布

Here is an example:

#!/bin/bash
echo -e "Enter IP address: \c"
read
echo $REPLY

But I want to make it easier for the user to answer. I'd like to offer an answer to the user. It should look something like this:

Enter your IP: 192.168.0.4

And the user can just press Enter and agree with 192.168.0.4, or can delete some characters (for example delete "4" with one backspace and type 3 instead).

How to make such an input? It is possible in bash?

4条回答
The star\"
2楼-- · 2019-03-17 12:07

The classic way to do most of what you want is:

default="192.168.0.4"
echo -e "Enter IP address ($default): \c"
read reply
[ -z "$reply" ] && reply=$default
echo "Using: $reply"

This doesn't give the editing option.

查看更多
啃猪蹄的小仙女
3楼-- · 2019-03-17 12:12

Editing isn't practical but it's common to do something like:

echo -e "Enter IP address [$default]: \c"
read answer
if [ "$answer" = "" ]; then
     answer="$default"
fi
查看更多
混吃等死
4楼-- · 2019-03-17 12:23

The way I would do this is to suggest the default in the prompt in brackets and then use the default value parameter expansion to set IP to 192.168.0.4 if they just pressed enter, otherwise it will have the value they entered.

#!/bin/bash
default=192.168.0.4
read -p "Enter IP address [$default]: " IP
IP=${IP:-$default}
echo "IP is $IP"

Output

$ ./defip.sh
Enter IP address [192.168.0.4]:
IP is 192.168.0.4

$ ./defip.sh
Enter IP address [192.168.0.4]: 192.168.1.1
IP is 192.168.1.1
查看更多
我欲成王,谁敢阻挡
5楼-- · 2019-03-17 12:24

bash's read has readline support (Edit: Jonathan Leffler suggests to put the prompt into read as well)

#!/bin/bash
read -p "Enter IP address: " -e -i 192.168.0.4 IP
echo $IP
查看更多
登录 后发表回答