Я пытаюсь прочитать значения в адресах i2 c из моего Raspberry Pi. Используя i2ctools, я могу взять адрес и сохранить его в переменной.
reg_state=$(i2cget -y 1 0x20 0x09)
echo "$reg_state"
:~/ $ 0x0a
Однако, хотя адрес читается правильно, reg_state сохранит шестнадцатеричное расширение "0x0", и это затрудняет выполнение операции. Скажем, 0x0a был в реестре раньше, и я хочу добавить «1» к этому значению, операция не будет завершена. Я думаю, что это связано с тем, как я пытаюсь достичь своей цели. Прямо сейчас мой код выглядит следующим образом:
7 addition(){
8 reg_state=$(i2cget -y 1 0x20 0x09)
9 i=$(echo "obase=10; $reg_state"| bc)
10 write=$(i+adj )
}
...
25
26#Main Shell Script
27
28 op=$1
29 adj=$2
30 if [ $1 -gt 0 ]
31 then
32 addition
33 fi
То, что я пытаюсь сделать, это прочитать значение регистра по адресу, преобразовать его в десятичное число и затем добавить его с любым числом, которое я хотеть. Однако я заметил, что не могу использовать echo "obase=10; $reg_state | bc"
из-за присутствия '0x'. При преобразовании шестнадцатеричных чисел без расширения все работает нормально, и их можно добавлять как обычно.
При этом, есть ли в любом случае, я могу избавиться от части '0x' и просто иметь то, что осталось, чтобы я мог делай арифметику c с миром?