Здравствуйте, начал изучать как пишутся скрипты в 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 записать в переменную? и вторую так же и сравнить, но вот как?
Написание скриптов под linux для управления
#!/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 вот как к числовому формату привести? или как то по другому?
как это описать в скрипте и сравнить 100.0 Percent и 15 Percent
Если нет числа с плавающей точкой то:
if [ "$a" -gt "$b" ]
then echo "a > b"
fiНо так как они есть то попробуй,
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 но не помню как
ага, щас попробую.
Спасибо все получилось! :D
а еще вопрос мне надо эти действия делать через определенное время. Это надо использовать таймер? или что то другое?
Alex_87, для этого используется штатный планировщик - cron. Файл конфигурации /etc/crontab.
и как добавить туда мой скрипт? чтоб через каждые 30 сек запускался?^_^ плиззз
Вот так примерно:
0/30 * * * * пользователь_от_которого_запускаем путь до вашего скриптаА вообще привыкайте читать документацию и маны. Благо для такой штуки как cron они написаны достаточно подробно и понятно.
спасибки большое=)
у меня еще один вопрос.
вот передаю я скрипту параметры несколько. ./script.sh 3 ip1 ip2 ip3
вот как мне сделать в цикле или как? смотря на первый параметр - это кол-во IP адресов. и потом IP адреса использовать по назначению.
типа:
if [$1 -gt 1];then
(цикл от 2 до значения $1+1 включительно)
ну и выполнение ssh $(ip) reboot exit (ip-значение параметра)