Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中Case命令的问题_Bash - Fatal编程技术网

bash中Case命令的问题

bash中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
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而非冗余全局语法。