首页 > 解决方案 > 如果它们包含相同的数字,我如何检查 3 个列表

问题描述

我有一个快速的问题:我应该编写一个 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

标签: shell

解决方案


最简单的方法是space在 and 的开头和结尾添加 a Paremeter2Parameter3因此您可以循环输入数字Parameter1[[...]]=~运算符一起使用来检查当前数字是否在单个循环中的单个复杂命令和单个复杂命令中Parameter1退出,例如Parameter2Parameter3

#!/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"

通过space在 and 的开头和结尾添加Parameter2Parameter3您可以将" $i "其用作正则表达式来确定该数字是否存在于Parameter2Parameter3with 中:

[[ $Parameter2 =~ " $i " ]] && [[ $Parameter3 =~ " $i " ]]

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

示例使用/输出

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

$ bash common-of-3.sh
common 11

11对所有三个参数都是通用的。您可以添加检查[ -z "$common" ]并测试是否没有匹配并输出您喜欢的任何内容。

如果您还有其他问题,请告诉我。


推荐阅读