我是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!"
答案 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
将所需的十进制转换为十六进制转换。此外,您在if
和else
子句中执行相同的操作。同时删除命令替换的过时后退标记语法,而不是使用$(..)
。