(standard_in)1:语法错误

时间:2018-01-13 09:40:54

标签: linux bash

我是bash和linux的新手,无法理解为什么我的代码中出现此错误((standard_in)1:语法错误)。

#!/bin/bash
file_data=$(<merge.bmp)
counter=0
file_size=$(stat -c%s "merge.bmp")
touch file1.bmp
touch file2.bmp
while [ $counter -lt 10 ]; do
    if [ `echo "$counter % 2" | bc` -eq 0 ]; then
            var=`xxd -p -l1 -s $counter merge.bmp`
            hex_var=$(echo "obase=16; $var" | bc) 
    else
            var=`xxd -p -l1 -s $counter merge.bmp`
            hex_var=$(echo "obase=16;$var" | bc)
    fi
    let counter=counter+1
done
echo "DONE!" 

1 个答案:

答案 0 :(得分:4)

您用于算术评估的工具bc中出现的错误。我怀疑变量赋值$var导致echo "obase=16; $var" | bc的格式错误/空值bc不喜欢。

如果您使用bash shell,则可以使用$((..))构造作为

来使用其算术评估。
for (( counter=0; counter<10; counter++ )); do
    if (( counter % 2 == 0 )); then
        var=$(xxd -p -l1 -s "$counter" merge.bmp)
        printf -v hex_var '%x' "$var"
    fi
done

%x将所需的十进制转换为十六进制转换。此外,您在ifelse子句中执行相同的操作。同时删除命令替换的过时后退标记语法,而不是使用$(..)