Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/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
Shell 如果3个列表包含相同的编号,我如何检查它们_Shell - Fatal编程技术网

Shell 如果3个列表包含相同的编号,我如何检查它们

Shell 如果3个列表包含相同的编号,我如何检查它们,shell,Shell,我有一个简短的问题:我应该写一个Shellscript脚本,在其中我可以输入3个参数,然后脚本应该查看这3个列表并找出相同的数字。我继续写了这个脚本,但我无法真正让它工作: #!/bin/bash Parameter1=${1} Parameter2=${2} Parameter3=${3} for var in $Parameter3; do for var2 in $Parameter2; do if [ $var == $var2 ]; then for var3 in $

我有一个简短的问题:我应该写一个Shellscript脚本,在其中我可以输入3个参数,然后脚本应该查看这3个列表并找出相同的数字。我继续写了这个脚本,但我无法真正让它工作:

#!/bin/bash

Parameter1=${1}
Parameter2=${2}
Parameter3=${3}

for var in $Parameter3; do
 for var2 in $Parameter2; do
  if [ $var == $var2 ]; then
   for var3 in $Parameter; do
    if [ $var2 == $var3 ]; then
     echo $var3
    fi
   done
  fi
 done
done

最简单的方法是在Paremeter2和Parameter3的开头和结尾添加一个空格,这样您就可以在Parameter1中的数字上循环,并使用[[…]和=~运算符检查Parameter1中的当前数字是否在单个循环中的单个复杂命令中同时存在于Parameter2和Parameter3中,例如

#!/bin/bash

Parameter1=${1:-"1 3 5 7 9 11 13"}         ## default numbers if no arguments provided
Parameter2=${2:-"0 4 11 21"}
Parameter3=${3:-"6 11 16 21 26"}

Parameter2=" $Parameter2 "                 ## add space before/after 2 & 3
Parameter3=" $Parameter3 "

common=                                    ## empty common value variable

for i in $Parameter1; do                   ## loop over numbers in 1
    ## compare with numbers in 2 and 3
    [[ $Parameter2 =~ " $i " ]] && [[ $Parameter3 =~ " $i " ]] && {
        common=$i                          ## set common value, if found
        break
    }
done

echo "common $common"
通过在Parameter2和Parameter3的开头和结尾添加空格,您可以使用$i作为正则表达式来确定Parameter2和Parameter3中是否存在该数字,具体如下:

尝试3嵌套循环要容易得多

示例使用/输出

将上述脚本另存为common-of-3.sh后,您可以执行以下操作:

$ bash common-of-3.sh
common 11
11是所有三个参数的共同点。您可以添加一个[-z$common]检查,并测试是否没有匹配项,然后输出您喜欢的内容


如果您还有其他问题,请与我联系。

请编辑您的Q以显示脚本的示例运行,以及预期输出、当前输出和任何错误消息的确切文本。我还建议将您的脚本粘贴到中,并修复标记的任何错误,这样会有一些错误。祝你好运。首先,外壳对空白敏感。这个[命令是的,测试命令的左右两侧需要空白。接下来,字符串相等运算符是=,而不是==即使有些shell也会处理此常见错误并接受==也一样。数字相等运算符是-eq。正如@Jens已经提到的,一些空白将真正有助于提高可读性,而且它也会可能会进一步修正一些错误。我建议进行一个更容易阅读的编辑。
$ bash common-of-3.sh
common 11