for ((addr=$start_addr; addr<$end_addr; addr=addr+4)); #for ((i=start_addr;i<=end_addr;i+=4)); do echo -n "\x55\xAA" | dd of=/dev/mem bs=4 count=1 seek=$(($addr)) conv=notrunc 2>/dev/null # percent=$(echo "scale=2; ($addr - $start_addr) * 100 / ($end_addr - $start_addr)" | bc) # echo -ne "Writing: $percent%\r" done for ((addr=$start_addr; addr<$end_addr; addr+=4)); #for ((i=start_addr;i<=end_addr;i+=4)); do data=$(dd if=/dev/mem bs=4 count=1 skip=$(($addr/4)) 2>/dev/null | hexdump -e '/4 "%08x\n"') if [ "$data" == "$data_read" ]; then match_count=$((match_count+1)) fi count=$((count+1)) # percent=$(echo "scale=2; $count * 100 / (($end_addr - $start_addr) / 4)" | bc) # echo -ne "Reading: $percent%\r" done #echo "Reading: 100%" echo $data if [ $match_count -eq $count ]; then echo "PASS" else echo "FAIL" fi #percent=$(echo "scale=2; $match_count * 100 / $count" | bc) #echo "Matched data: $match_count/$count ($percent%)" 这段代码是不是没给data赋值?给如何优化?
时间: 2024-02-02 14:02:32 浏览: 31
是的,代码中并没有给`data`变量赋值。为了输出`data`变量的值,需要在读取数据时将读取到的数据赋值给`data`变量,例如:
```
for ((addr=$start_addr; addr<$end_addr; addr+=4)); do
data=$(dd if=/dev/mem bs=4 count=1 skip=$(($addr/4)) 2>/dev/null | hexdump -e '/4 "%08x\n"')
echo $data
done
```
这样,每次读取数据时,会将读取到的数据赋值给`data`变量,并输出`data`变量的值。
另外,为了提高程序的效率,可以将读取数据和比较数据的循环合并为一个循环,例如:
```
for ((addr=$start_addr; addr<$end_addr; addr+=4)); do
data=$(dd if=/dev/mem bs=4 count=1 skip=$(($addr/4)) 2>/dev/null | hexdump -e '/4 "%08x\n"')
if [ "$data" == "$data_read" ]; then
match_count=$((match_count+1))
fi
count=$((count+1))
echo -ne "Progress: $((count*100/((end_addr-start_addr)/4)))%\r"
done
if [ $match_count -eq $count ]; then
echo "PASS"
else
echo "FAIL"
fi
echo "Matched data: $match_count/$count ($(echo "scale=2; $match_count*100/$count" | bc)%)"
```
这样,每次读取数据时,同时也会比较数据,并输出当前进度,最终输出匹配数据的数量和比例。