gpt4 book ai didi

bash, 提示输入数字

转载 作者:行者123 更新时间:2023-12-05 08:59:30 25 4
gpt4 key购买 nike

d 是我使用的内部服务器查找工具。

我希望允许用户输入 0(或 1)到 9999 之间的任何数字(我们称之为用户输入)并让它显示以下结果:

d $用户输入(例如 1234)

然后操纵该查找的结果(下面去掉除 IP 地址以外的所有内容以稍后 ping):

 grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)'`

我知道我需要使用 while true;请阅读 $blah 等。我只是不熟悉 read 以正确格式化它,更重要的是:

让它提示输入 0-9999 之间的数字

最佳答案

其他答案有很多缺陷,因为他们检查用户没有输入他们想要的范围之外的数字。但是,如果用户输入的不是数字怎么办?他们的策略从一开始就被打破了。

相反,只有当我们确定用户输入的数字在所需范围内时才放手。

while :; do
read -ep 'Enter server number: ' number
[[ $number =~ ^[[:digit:]]+$ ]] || continue
(( ( (number=(10#$number)) <= 9999 ) && number >= 0 )) || continue
# Here I'm sure that number is a valid number in the range 0..9999
# So let's break the infinite loop!
break
done

正则表达式 [[ $number =~ ^[[:digit:]]+$ ]] 确保用户只输入数字。

笨拙的 (number=(10#$number)) 部分在这里,因此如果用户输入以 0 开头的数字,bash 会尝试以基数 8 解释它,我们会得到错误的结果(例如,如果用户输入 010),甚至在用户输入的情况下也会出错,例如, 09(在没有这个守卫的情况下尝试)。


如果您只想在用户输入无效术语时提示一次并退出,您的逻辑是:

read -ep 'Enter server number: ' number
[[ $number =~ ^[[:digit:]]+$ ]] || exit 1
(( ( (number=(10#$number)) <= 9999 ) && number >= 0 )) || exit 1
# Here I'm sure that number is a valid number in the range 0..9999

如果你想向用户解释脚本退出的原因,你可以使用 die 函数:

die() {
(($#)) && printf >&2 '%s\n' "$@"
exit 1
}
read -ep 'Enter server number: ' number
[[ $number =~ ^[[:digit:]]+$ ]] ||
die '*** Error: you should have entered a number'
(( ( (number=(10#$number)) <= 9999 ) && number >= 0 )) ||
die '*** Error, number not in range 0..9999'
# Here I'm sure that number is a valid number in the range 0..9999

关于bash, 提示输入数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14382150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com