Novo para a questão do script: 'else' não esperado no script BASH

1

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
    
por pst007x 14.06.2015 / 15:49

2 respostas

3

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.

    
por Merlin1896 14.06.2015 / 16:04
0

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.

    
por Pilot6 14.06.2015 / 16:08