Novo no script Pergunta: 'mais' não esperado no script bash -- bash campo com scripts camp askubuntu Relacionado O problema

New to script question: 'else' not expected in BASH script


1
vote

problema

português

Alguém poderia ajudar, se possível. Estou tentando resolver um problema que tenho neste script. Estou recebendo "mais" não esperado, mas a lógica parece fazer sentido.

Scripting é tudo novo para mim, mas estou tentando resolver um problema com minha CPU correndo excessivamente.

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 $' All 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 '$1=="cpulimit" {print $3}')                                                  # 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 $' Process Entry Found'       echo $'CPU Entry Found '       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    
english

Could someone help if possible. I am trying to resolve an issue I have in this script. I am getting 'else' not expected, but the logic seems to make sense.

Scripting is all new to me, but I am trying to resolve an issue with my CPU running excessively.

Error:

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 '$1=="cpulimit" {print $3}')                                                  # 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 
     

Lista de respostas

3
 
vote
vote
Melhor resposta
 

Eu acho que você está perdendo um done antes do seu elif na linha 28. Há um done para o for loop, mas não < Código> ABCDEFGHIJKLMNABCDEFGHIJKLMN3 para o Loop While.

 

I think you are missing a done before your elif in line 28. There is one done for the for loop, but no done for the while loop.

 
 
0
 
vote

Você não fechou o seu ciclo "enquanto" terminou. Você tem outro "por" lá, que está fechado.

Você não faz o recuo correto, é por isso que faço esses erros.

 

You did not close your "while" cycle with done. You have another "for" there, that is closed.

You do not make correct indentation, that's why make these errors.

 
 

Perguntas relacionadas

11  Execute scripts automaticamente no servidor após conexão SSH  ( Run scripts automatically in server after ssh connection ) 
Como executar um script automaticamente no servidor em breve após o sistema do cliente, estabeleça conexão SSH com o servidor para ex: Suponha que um usuári...

2  Como monitorar um arquivo local para alterações, aplique um regex Substituir e salve / sobrescreva em um arquivo de destino?  ( How to monitor a local file for changes apply a regex replace on it and save ov ) 
Eu gostaria de iniciar um script ou algo que assiste a um arquivo de texto para alterações. Quando o arquivo é alterado, eu quero executá-lo através de um ana...

6  Minha função de bash é executada apenas uma vez por terminal aberta  ( My bash function runs only once per terminal opened ) 
Quando eu tento executar minha função bash, definida em .bashrc, por uma segunda vez no mesmo terminal, ela não funciona. O código é o seguinte: lspci6 ...

9  Como desligar o Ubuntu depois (2 horas) de ocioso?  ( How to shutdown ubuntu after 2 hours of idle ) 
em execução: xubuntu 14.04 32bit. Eu li vários desatualizados, não trabalhando, trabalhando diferente que quero respostas aqui e em outro lugar. Eu tinha um...

0  Script Shell para instalar o software e configurar a rede  ( Shell script to install software configure network ) 
Ei, eu queria saber, como, depois de uma nova instalação do Ubuntu, eu posso instalar todos os softwares essenciais (VLC, Apache, MySQL, PHP, Java, NetBeanSet...

2  Abra a pasta pai de um link simbólico por clique com o botão direito do mouse?  ( Open the parent folder of a symbolic link via right click ) 
Podemos abrir uma pasta pai de qualquer arquivo usando o script nautilus como #!/bin/bash nautilus "$1" Se eu fizer este script no link simbólico que...

3  dpkg sem shell  ( Dpkg with no shell ) 
Como executar o dpkg sem shell? Aqui está o meu problema: Eu furo e script autorun.sh na minha chave USB. Para executar este script, criei regras em /e...

22  Bash Script não executando de Crontab [Duplicate]  ( Bash script not executing from crontab ) 
. Esta pergunta já tem respostas aqui : Por que os scripts crontab não estão funcionando? ...

0  Estágios diferentes no Bash Programming  ( Different stages in bash programming ) 
Eu tenho um programa bash com diferentes estágios como: $stage=1 if [ stage -le 1]; then echo "execute stage 1" fi if [ stage -le 2]; then echo "execute s...

135  Como executar um script apenas clicando duas vezes como arquivos .exe no Windows?  ( How to execute a script just by double clicking like exe files in windows ) 
Como posso fazer um executável de script bash clicando duas vezes como .exe arquivos no Windows? Eu tentei Criando um lançador e atribuir o script a ele , ...




© 2022 pergunte.org All Rights Reserved. Casa de perguntas e respostas todos os direitos reservados


Licensed under cc by-sa 3.0 with attribution required.