Linux 使用脚本比较并插入位块

Linux 使用脚本比较并插入位块,linux,bash,shell,Linux,Bash,Shell,我有一个二进制文件,我需要比较文件中的位块(具有某种模式),并用相同大小的新位块替换它们 想知道最好的方法是什么 #$1 and $2 are two different binary files. function compareByteByByte() { counter=0 while [ $counter -le $(( $PNG_FILE_SIZE-1 )) ] do S1=$($READFIL

我有一个二进制文件,我需要比较文件中的位块(具有某种模式),并用相同大小的新位块替换它们

想知道最好的方法是什么

#$1 and $2 are two different binary files.

    function compareByteByByte()
    {
        counter=0
        while [ $counter -le $(( $PNG_FILE_SIZE-1 )) ]
        do

            S1=$($READFILE_EXE -t x1 --read-bytes=1 --skip-bytes=0 $1 | head -1 | awk '{print $2}')
            S2=$($READFILE_EXE -t x1 --read-bytes=1 --skip-bytes=$counter $2 | head -1 | awk '{print $2}')
            if [ $S1==$S2 ]; then
                counter=$(( $counter + 1 ))
                echo "Offset#$counter: $S2"
            else
                echo "S1('$S1') is equal to S2('$S2')"
                break
            fi  
        done
    }
如果S1和S2相等并且 很明显,它对我来说并不坏。我是不是遗漏了什么?。
请相信我,因为我是脚本世界的初学者

您可以在bash中尝试将其与二进制文件进行比较

diff <(xxd b1) <(xxd b2)

diff我不确定这是否是您唯一的问题,但有一个问题是:

            if [ $S1==$S2 ]; then
需要这样做:

            if [ "$S1" == "$S2" ]; then
因此,
[
命令将
$S1
=
$S2
作为三个独立的参数接收

或者,更好的是:

            if [[ "$S1" = "$S2" ]]; then

(这是等效的,但当我知道shell将是Bash时,我总是更喜欢
[[
而不是
[
,因为
[[
的gotchas要少得多。
=
对于精确相等更为正确,因为
=
还提供了一些模式匹配功能,但在这种情况下,这并不重要。)

添加迄今为止您尝试过的最简单的示例。二进制修补程序工具不够灵活吗?实际上它是一个ISO文件,必须实时更新。就是这样。它解决了问题。您在调试脚本时节省了我大量的时间。@user1427180:我很高兴听到它。:-)
            if [[ "$S1" = "$S2" ]]; then