0

我正在尝试找到与此类似的问题的解决方案:

#command_A

A_output_Line_1
A_output_Line_2
A_output_Line_3

#command_B

B_output_Line_1
B_output_Line_2

现在我需要比较A_output_Line_2B_output_Line_1并在它们相等时回显“正确”,否则回显“不正确”。

我想最简单的方法是在某个变量中复制一行输出,然后在执行两个命令后,简单地比较变量并回显一些东西。我需要在 bash 脚本中实现这一点,任何有关如何将某些输出行存储在变量中的信息都将帮助我将各个部分组合在一起。此外,如果有人能告诉我不仅如何复制/存储一行,而且可能只是一个单词或序列,例如:第 1 行,字节 4-12,像字符串一样存储在变量中,那将是很酷的。

我不是一个完整的初学者,但也不是高级 linux bash 用户。提前感谢任何帮助,抱歉英语不好!

4

2 回答 2

2

更简单的方法可能是使用diff,不是吗?

就像是:

command_A > command_A.output
command_B > command_B.output
diff command_A.output command_B.output

这将适用于比较多个字符串。

但是,由于您想了解单行(以及行中的单词),这里有一些提示:

# first line of output of command_A
command_A | head -n 1

-n 1选项说只使用第一行(我认为默认为 10)

# second line of output of command_A
command_A | head -n 2 | tail -n 1

这将采用输出的前两行,command_A然后是这两行中的最后一行。欢乐时光 :)

您现在可以将此信息存储在变量中:

export output_A=`command_A | head -n 2 | tail -n 1`
export output_B=`command_B | head -n 1`

然后比较一下:

if [ "$output_A" == "$output_B" ]; then echo 'Correct'; else echo 'Not Correct'; fi

要仅获取字符串的一部分,请尝试查看cutor (对于更强大的东西)sedawk.

此外,只需学习一种好的通用脚本语言,如pythonor ruby(even perl) 就可以解决这类问题。

于 2013-07-05T11:51:18.270 回答
0

使用 IFS(内部字段分隔符)分隔换行符并将输出存储在数组中。

#!/bin/bash

IFS='
'
array_a=( $(./a.sh) )
array_b=( $(./b.sh) )

if [ "${array_a[1]}" = "${array_b[0]}" ]; then
    echo "CORRECT"
else
    echo "INCORRECT"
fi
于 2013-07-05T12:08:22.367 回答