Reputation: 717
Getting syntax error for below shell script. Unable to figure out where the problem lies. Please help me guys. Thanks in Advance.
Code:
#!/bin/bash
# Check if package sensors (for Ubuntu) is installed, if not install it
dpkg -l | grep -i sensors > /dev/null
if [ "$?" == "0" ]; then
echo "Package sensors already installed on system. Analyzing temperature!"
else
sudo apt-get install sensors && echo "Package sensors now installed"
fi
# Set threshold temperature
threshold="+80.0°C"
# Check if temp has reached threshold, trigger mail
tempnow=$(sensors | sed -n '20p' | awk '{print $NF}')
res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else print "Normal" }'`
if [ "$res" == "Exceeds" ]
then
echo "Temperature exceeds threshold. Triggering mail to system owners..."
mail -s "CPU temperature too high on system" [email protected]
elif [ "$res" == "Normal" ]
echo "Temperature under limit. Ignoring countermeasures!"
else
echo "Unable to determine value"
fi
Output:
Package sensors already installed on system. Analyzing temperature!
/home/luckee/scripts/cputemp.sh: line 26: syntax error near unexpected token `else'
/home/luckee/scripts/cputemp.sh: line 26: `else'
Upvotes: 0
Views: 58
Reputation: 85570
In Line 24:
24 elif [ "$res" == "Normal" ]
25 then # <------ Missing in your original code
26 echo "Temperature under limit. Ignoring countermeasures!"
Use shellcheck.net
, for debugging such trivial issues.
Upvotes: 2
Reputation: 16280
You need an extra then
after your elif
line :)
#!/bin/bash
# Check if package sensors (for Ubuntu) is installed, if not install it
dpkg -l | grep -i sensors > /dev/null
if [ "$?" == "0" ]; then
echo "Package sensors already installed on system. Analyzing temperature!"
else
sudo apt-get install sensors && echo "Package sensors now installed"
fi
# Set threshold temperature
threshold="+80.0°C"
# Check if temp has reached threshold, trigger mail
tempnow=$(sensors | sed -n '20p' | awk '{print $NF}')
res=`echo "$tempnow $threshold" | awk '{ if($1 > $2) print "Exceeds"; else print "Normal" }'`
if [ "$res" == "Exceeds" ]
then
echo "Temperature exceeds threshold. Triggering mail to system owners..."
mail -s "CPU temperature too high on system" [email protected]
elif [ "$res" == "Normal" ]
then # <== HERE!
echo "Temperature under limit. Ignoring countermeasures!"
else
echo "Unable to determine value"
fi
Upvotes: 1