Добрый день.
Есть скрипт проверки завис ли сайт или нет.
Система freebsd.
В freebsd вместо sed -i нужно использовать sed -i '' -e.
Если выполнить в консоли команду sed -i '' -e '/$f/d' /root/test_dom то работает, в цикле не работает.
Не пойму.
Подскажите пожалуйста, что делаю не так.
#!/bin/sh
TM=`date +"%H-%M"`
DOMAIN=`cat /root/test_dom`
for f in $DOMAIN
do
if curl -Is --connect-timeout 5 https://$f 2>/dev/null; then
else
echo "Domain "$f" freeze, время ${TM}." | mail -s "Domain "$f" freeze, время ${TM}." мало@мыло
sed -i '' -e '/$f/d' /root/test_dom
fi
done
exit 0
Дело в одинарных кавычках.
Нужно использовать двойные кавычки.
sed -i '' -e "/$f/d" /root/test_dom
Типа в одинарных дословно берется, без расширения до переменной.
map=($(cat file))
for i in ${!map[@]}; do
if ...; then
echo ${map[i]}
else
unset map[i]
fi
done
#fmt -1 <<<${map[@]} >file
##xargs -n1 <<<${map[@]} >file
IFS=$'\n'
echo "${map[*]}" >file
Добавлено: Я извиняюсь, не обратила внимание, что оболочка /bin/sh
На фряхе, в /bin/sh, ага. Нету там массивов.
А если уж рассуждать о том, что лучше, то лучше прикрутить нормальный мониторинг вместо таких велосипедов.
В линукс очень часто ссылка /bin/sh ведет на оболочку /bin/bash
Я поэтому и подумала о массивах которые в оболочке sh не реализованы.
Но если интересно то вкратце:
получить индексы массива