bash中Case命令的问题
我想匹配符合以下模式的字符串: 它应该以abash中Case命令的问题,bash,Bash,我想匹配符合以下模式的字符串: 它应该以aa、K、N或W开头,然后可以后跟一个或多个字母,范围为a-zA-Z,如果它的第二个字母是字母,则后面可以跟一个数字,然后可以是1、2或3个字母 我试过这个: #!/bin/bash function callsign() { echo -e "Insert your call sign" while true; do read input case $input in [Aa,Kk,Nn,Ww][0-9][
a
、K
、N
或W
开头,然后可以后跟一个或多个字母,范围为a-zA-Z
,如果它的第二个字母是字母,则后面可以跟一个数字,然后可以是1、2或3个字母
我试过这个:
#!/bin/bash
function callsign() {
echo -e "Insert your call sign"
while true; do
read input
case $input in
[Aa,Kk,Nn,Ww][0-9][a-zA-Z][a-zA-Z] ) break;;
[Aa,Kk,Nn,Ww][a-zA-Z][0-9][a-zA-Z] ) break;;
[Aa,Kk,Nn,Ww][a-zA-Z][0-9][a-zA-Z][a-zA-Z] ) break;;
[Aa,Kk,Nn,Ww][0-9][a-zA-Z][a-zA-Z][a-zA-Z] ) break;;
[Aa,Kk,Nn,Ww][0-9][a-zA-Z][a-zA-Z][a-zA-Z][a-zA-Z] ) break ;;
* ) echo "please insert valid call sign.";;
esac
done
clear
}
callsign
我有问题,因为我有太多的情况(但还没有包括所有)。我怎样才能更好地解决这个问题
所以我应该从一个任意的K N W开始,然后后面可以跟一个数字或者字母A-z,如果它有一个字母作为第二个字母,后面可以跟一个数字,然后它可以有1-3个字母
这场比赛有几种可能性。其中之一是使用正则表达式:
#!/bin/bash
shopt -s nocasematch
callsign() {
while true; do
read -ep "Insert your call sign: " input
if [[ $input =~ [aknw](|[a-z])[0-9][a-z](|[a-z](|[a-z])) ]]; then
break
else
echo "please insert valid call sign."
fi
done
echo "it works!"
}
callsign
另一种可能性是使用扩展的glob:
#!/bin/bash
shopt -s nocasematch extglob
callsign() {
while true; do
read -ep "Insert your call sign: " input
if [[ $input = [aknw]@(|[a-z])[0-9][a-z]@(|[a-z]@(|[a-z])) ]]; then
break
else
echo "please insert valid call sign."
fi
done
echo "it works!"
}
callsign
注意使用
nocasematch
处理小写/大写。修复了作为编辑的一部分的she-bang(#!/bin/bash
)您的glob[Aa,Kk,Nn,WW]
看起来可疑(虽然在语法上没有错误,但可能显示出一些误解)…你到底想匹配什么?我对这个问题中似乎任意使用大写表示好奇。仍然很有趣,但你能给我们一些有效呼号和无效呼号的例子吗?对于大声呼喊,你能描述一下吗?比如:它应该以A
或K
或N
或W
开头,后面跟一个数字,然后跟三个字母……你知道,我们不是通灵者<代码>++用于使用re而非冗余全局语法。