LINUX.ORG.RU

Как инкрементировать переменную в файле?

 , ,


0

1

чекаю состояние сети пингом, и если она отвалилась, то хочу сделать +1 к переменной. если сеть починилась сама - сбрасываю счетчик в ноль, а если нет, то после 10 фейлов делается reboot.

имеем файлик, содержимое

net.is_down: 0

и не знаю как сделать +1 к нему

awk '/net.is_down: [0-9]+/ { printf "net.is_down: %d\n", $2+1 }' < /root/.uplink > /root/.uplink

очищает файл полностью. ЧЯДНТ? причем, если убрать запись в файл > /root/.uplink, то вывод в терминал делается нормально, прибавляется единичка. может лучше через sed или еще как-то инкрементировать.

★★★★★

Зачем такие сложности? Делай проще. Пиши точки. E.g. (псевдокод):

if fail; then 
    echo '.' >> file
else
    > file
fi

if wc -l file > 10; then
    reboot
fi
beastie ★★★★★
()

допилю еще, чтобы на каждый 2й раз (% 2) перезапускались dhclient и pppd. пока сеть не починится. а на 10й раз уже ребут.

Spoofing ★★★★★
() автор топика
< /root/.uplink > /root/.uplink

Проблема здесь: bash открывает файлы перед тем, как запустить команду. И делает truncate до того, как файл доберётся до stdin команды. Надо так:

cmd < /root/.uplink | tee /root/.uplink >/dev/null

KennyMinigun ★★★★★
()
Ответ на: комментарий от Zhopin

Если речь об awk, то тут действительно нет смысла разбирать код на строчки (один паттерн - один экшн)

yoghurt ★★★★★
()
cat /root/.uplink | awk '/net.is_down: [0-9]+/ { printf "net.is_down: %d\n", $2+1 }' | tee /root/.uplink >/dev/null
DiMoN ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.