Eu acho que você está perdendo um done
antes de seu elif na linha 28. Há um done
para o loop for
, mas não done
para o loop while.
Alguém poderia ajudar, se possível. Estou tentando resolver um problema que tenho neste script. Eu estou ficando 'else' não esperado, mas a lógica parece fazer sentido.
O script é novidade para mim, mas estou tentando resolver um problema com a CPU excessivamente em execução.
Erro:
Do you want to set global CPU limitations y or n : y
./LIMIT A SINGLE PROCESS.sh: line 28: syntax error near unexpected token 'elif'
./LIMIT A SINGLE PROCESS.sh: line 28: 'elif test "$y" = "n" ; then'
Script:
#!/bin/bash
# CPU limit of a process of one application or set global limit
#
#
DAEMON_INTERVAL=3 # Daemon check interval in seconds
# gnome-terminal -x top
read -p "Do you want to set global CPU limitations y or n : " y
if test "$y" = "y" ; then
read -p "Enter Global CPU limit :" CPU_LIMIT_ALL
echo $'\nAll Processes shall be limited to:' $CPU_LIMIT_ALL
while true
do
PID_1="top -b -n1 -c | awk 'NR>6 && $9>CPU_LIMIT_ALL {print $1}' CPU_LIMIT_ALL=$CPU_LIMIT_ALL" # Set global CPU limit reads TOP list
NEW_PIDS=$(eval "$PID_1") # Violating PIDs
LIMITED_PIDS=$(ps -eo args | gawk '=="cpulimit" {print }')
# Already limited PIDs
QUEUE_PIDS=$(comm -23 <(echo "$NEW_PIDS" | sort -u) <(echo "$LIMITED_PIDS" | sort -u) | grep -v '^$') # PIDs in queue
for i in $QUEUE_PIDS
do
cpulimit -p "$i" -l "$CPU_LIMIT_ALL" -z & # Limit new violating processe
done
elif test "$y" = "n" ; then
read -p "Enter process to be restricted or press enter :" r
read -p "Enter value of CPU limit or press enter :" l
while true
do
echo $'\nProcess Entry Found'
echo $'CPU Entry Found\n'
echo "Limit the Process of: $r to $l"
cpulimit --exe "$r" -b -l "$l" -z & # Set CPU limit for process
sleep 60
done
else
echo "No input found"
exit 1
fi
Eu acho que você está perdendo um done
antes de seu elif na linha 28. Há um done
para o loop for
, mas não done
para o loop while.
Você não fechou o ciclo "while" com o término. Você tem outro "para" lá, que está fechado.
Você não faz o recuo correto, é por isso que faz esses erros.