LinuxForum.Fans
Тема

Написание скриптов под linux для управления

Автор: Alex_87 9 сообщений 2901 просмотров
#142678

Здравствуйте, начал изучать как пишутся скрипты в linux.
вот перед мной встала задача, написать скрипт проверки состояния ups, знаю что стандартное ПО типа apcupsd все само делает,да и оно стоит и настроено на системе, вот только хочу чтоб если один из упсов разряжается и дошел до порога то сам выключился и не подавал сигнал к выключению, т.к. другой работает
нужно написать скрипт который смотрит состояние упса и если он от батареи то следить за минимальным "порогом"(пока что)
вот щас 2 упса у меня:
/etc/apcupsd
/etc/apcupsd/ups2
в этих папках.
вот если обычно делать:
[console]
/etc/apcupsd/ups2/apcaccess |grep BCHARGE
[/console]
выдает
[console]BCHARGE : 100.0 Percent[/console] это заряд батареи
так же делается для MBATTCHG - минимальный уровень в процентах(значение 15 Percent)
как это описать в скрипте и сравнить 100.0 Percent и 15 Percent
там как то надо значение от /etc/apcupsd/ups2/apcaccess |grep BCHARGE записать в переменную? и вторую так же и сравнить, но вот как?

#142727
text

#!/bin/bash
VAR1="t1"
VAR2="t2"
declare -a ARRAY1
declare -a ARRAY2
let count=0
let sl=0
#################################
di='/etc/apcupsd/ups2/apcaccess'
#################################

files=/etc/apcupsd/ups2/1.txt "$di"|grep BCHARGE > $files exec 10<$files

while read LINE <&10; do ARRAY1[$count]=$LINE ((count++)) done

echo Number1: ${#ARRAY1[@]}

echo ${ARRAY1[@]}

exec 10>&- ######

for i in ${ARRAY1[@]};do echo slova: $i ((sl++)) if [ $sl -eq 3 ]; then VAR1=$i fi done ############################### let count2=0 let sl2=0 di='/etc/apcupsd/ups2/apcaccess' files2=/etc/apcupsd/ups2/2.txt "$di" | grep MBATTCHG > $files2

exec 20<$files2

while read LINE1 <&20; do ARRAY2[$count2]=$LINE1 ((count2++)) done

echo Number2: ${#ARRAY2[@]}

echo ${ARRAY2[@]}

exec 20>&- ######

for j in ${ARRAY2[@]};do echo slova: $j ((sl2++)) if [ $sl2 -eq 3 ]; then VAR2=$j fi done ##### echo $VAR1 #prochent zaryada batt echo $VAR2 #prochent zaryada min into conf echo "#######" ##сравнение

if [ $VAR1 = $VAR2 ]; then echo "Help!!!!" else echo "Good!!!!" fi exit 0

вот так получилось пока что... Вот сравнение то они же строковые в одной VAR1 = 100.0 VAR2 = 15 вот как к числовому формату привести? или как то по другому?

#142739
Alex_87 написал:
как это описать в скрипте и сравнить 100.0 Percent и 15 Percent

Если нет числа с плавающей точкой то:

text
if [ "$a" -gt "$b" ]
then echo "a > b" 
fi

Но так как они есть то попробуй,

text
c="100.0 Percent "  # результат команды
e="70.0 Percent "   # результат команды

z=`echo $c | sed s/[[:alpha:]\-]//g` # убираем слова и оставляем только цифры из $c y=`echo ${z%.*}` # в переменную y заносим целое цисло а не число с плавающей точкой echo "y $y" # на всякий случай

w=`echo $e | sed s/[[:alpha:]\-]//g` # убираем слова и оставляем только цифры из $e v=`echo ${w%.*}` # в переменную v заносим целое цисло а не число с плавающей точкой echo "v $v" # на всякий случай

if [ "$y" -gt "$v" ] # если переменная y больше переменной v then echo "$y > $v" # вывод через echo fi

Можно проще после команды sed округлить число с помощью калькулятора bc но не помню как

#142980

ага, щас попробую.

Спасибо все получилось! :D
а еще вопрос мне надо эти действия делать через определенное время. Это надо использовать таймер? или что то другое?

#143000

Alex_87, для этого используется штатный планировщик - cron. Файл конфигурации /etc/crontab.

#143030

и как добавить туда мой скрипт? чтоб через каждые 30 сек запускался?^_^ плиззз

#143068

Вот так примерно:

text
0/30 * * * *    пользователь_от_которого_запускаем        путь до вашего скрипта

А вообще привыкайте читать документацию и маны. Благо для такой штуки как cron они написаны достаточно подробно и понятно.

#143789

спасибки большое=)

#146784

у меня еще один вопрос.
вот передаю я скрипту параметры несколько. ./script.sh 3 ip1 ip2 ip3
вот как мне сделать в цикле или как? смотря на первый параметр - это кол-во IP адресов. и потом IP адреса использовать по назначению.
типа:
if [$1 -gt 1];then
(цикл от 2 до значения $1+1 включительно)
ну и выполнение ssh $(ip) reboot exit (ip-значение параметра)

Войдите или зарегистрируйтесь, чтобы ответить.