#!/bin/bash
#ps -aux | grep abcd > /home/test1.txt
var= grep -o -i abcd /home/test1.txt | wc -l
threshold=15
if [ $var -lt $threshold ]; then
echo "One of the service is down on $HOSTNAME" >mail.txt
mailx -s "Application alert on $HOSTNAME" [email protected] <mail.txt
fi
if [ $var -eq $threshold ]; then
echo "All services are up and running fine on $HOSTNAME" >mail.txt
mailx -s "Application alert on $HOSTNAME" [email protected] <mail.txt
fi
exit;
Я получаю [: -lt: ожидается унарный оператор и [: -eq: ожидается унарный оператор, когда инициируются циклы if. Может ли кто-нибудь помочь, почему это происходит?
var=
означает, что$var
никогда не присваивается значение, поэтому[ $var -lt $threshold ]
становится[ -lt 15 ]
. shellcheck.net — ваш друг. И похоже, что вам не хватает некоторых$(…)
. - person Biffen   schedule 15.05.2018var=
должна бытьvar=$(grep -o -i abcd /home/test1.txt | wc -l)
. (Никаких пробелов вокруг=
!) 2[ $var -lt $threshold ]
должно быть[ "$var" -lt "$threshold" ]
. 3 Нет необходимости во временном файле:echo "One of the service is down on $HOSTNAME" | mailx -s "Application alert on $HOSTNAME" [email protected]
4 Нет необходимости в;
послеexit
. 5 Нет необходимости вexit
. - person Biffen   schedule 15.05.2018var=
не означает, чтоvar
никогда не присваивается значение. В качестве значения ему присваивается пустая строка, но это значение сохраняется только в среде командыgrep
. - person William Pursell   schedule 15.05.2018mail.txt
позже? Если нет, то лучше использовать heredoc. - person William Pursell   schedule 15.05.2018