2015-03-05 2 views
0

Я пытаюсь выполнить следующую Баш скрипт при загрузке (из /etc/rc.local), но сценарий не получает запустить из-за следующей ошибки синтаксиса:Где моя арифметическая ошибка bash?

+1") syntax error: invalid arithmetic operator (error token is '' 

Вот сценарий в полном

#!/bin/bash 
distro=$(cat /etc/issue | head -n 2 | tr -d "\n" | tr "[:upper:]" "[:lower:]") 
device=$(fdisk -l | grep -w 8e | head -n 1 | cut -c-8) 
partcount=$(fdisk -l | grep $device | sed 1d | grep -c $device) 
newpartnum=$(($partcount+1)) 
startsector=$(fdisk -l | grep -w 8e | tail -1 | tr " " "\n" | sed "/^$/d" | head -n 3 | tail -1) 
newstartsector=$(($startsector+1)) 
endsector=$(fdisk -l | grep sectors | head -n 1 | tr " " "\n" | tail -2 | head -n 1) 
newendsector=$(($endsector-1)) 
fdisk $device <<EOF 
n 
p 
$newpartnum 
$newstartsector 
$newendsector 
t 
$newpartnum 
8e 
w 
EOF 

sed -i'.bak' '/00resize/d' /etc/rc.local 
echo "sh /root/01setup.sh" >> /etc/rc.local 

#reboot 

Я предполагаю, что ошибка связана с $ (($ partcount + 1)) или $ (($ startector + 1)), но я не уверен, как это сделать.

+5

'установить -x' ваш друг здесь. Поместите его на строку после '#!/Bin/bash' и проверьте, что значения ваших переменных - это то, что вы ожидаете. Кроме того, http://shellcheck.net выделит некоторые распространенные ошибки. –

+0

Предлагаемый альтернативный синтаксис: '((newpartnum = partcount + 1))'. Гораздо легче читать этот путь ... – twalberg

ответ

1

Мое предположение, что вы ввели один или несколько кодов CR, отредактировав свой скрипт bash в Windows. Попробуйте запустить скрипт через dos2unix и посмотрите, исчезнет ли проблема.

(Если у вас нет dos2unix, вы можете попробовать tr -d \\r <script >newscript)

Смежные вопросы