![](/img/trans.png)
[英]Just out of curiosity: how come linux kernel “optimized” strcpy is much slower the libc imp?
[英]How to come out of select in Linux
我想从用户那里得到输入,这可以是任何给定的选项,我尝试使用select ,但是它只是循环播放,没有出现,有没有办法让我显示出来并继续用户输入了正确的选项后,下面是示例代码:
select envir in "prod" "uat" "dev"; do
echo $envir
done
//continue with the script
echo "out of select"
一旦用户选择了任何可用选项,它就会出现并继续执行脚本,如果用户输入了其他任何内容,则应继续提示。
select envir in "prod" "uat" "dev"; do
echo $envir
if [ $envir == "prod" ] || [ $envir == "uat" ] || [ $envir == "dev" ]
then
break
fi
done
//continue with the script
echo "out of select"
在bash(1)手册页中:
...列表在每次选择后执行,直到执行中断命令为止。 select的退出状态是列表中最后执行的命令的退出状态,如果未执行任何命令,则为零。 ...
换句话说,当$ envir为非空时,执行“ break”语句。
我会这样写上面的脚本:
#!/bin/bash
declare -a opts=("prod" "uat" "dev")
echo "control-D to exit"
select envir in "${opts[@]}"; do
echo "envir=$envir"
found=0
for elem in "${opts[@]}"; do
if [ "$elem" = "$envir" ]; then
found=1
break
fi
done
if [ "$found" -eq 1 ]; then
break
fi
done
echo "out of select"
这样一来,您的关键字就会在一个地方得到处理。 每次在“ prod”,“ uat”,“ dev”列表中添加新单词时,都不需要在2个位置进行更改。
您还可以从外部文件中读取单词列表,并将其分配给bash数组变量opts。
谢谢布莱恩。 通过您的输入,这就是我能够做到的:
select envir in "prod" "uat" "dev"; do
echo $envir
if [ "$envir" != "" ]
then
break
fi
done
//continue with the script
echo "out of select"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.