Shell 如果3个列表包含相同的编号,我如何检查它们
我有一个简短的问题:我应该写一个Shellscript脚本,在其中我可以输入3个参数,然后脚本应该查看这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 $
#!/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