el script de shell da error [:! -z: se espera un operador unario al ejecutar

2

He creado un script de bash para eliminar el proceso activo de búsqueda por nombre

pkill.sh

#~/bin/bash
pro='ps aux | grep $1 | grep -v sh | grep -v grep | awk '{print $2}''
if [ !-z "$pro" ]
then
   echo $1 process is not running
else
  kill -9 $pro
  echo $1 process killed forecfully, process id was $pro.
fi

y ejecute este script de shell en el terminal (v 2.8) de la siguiente manera

sh pkill.sh mongod

el trabajo está hecho, pero también da el error

  

pkill.sh: línea 3: [:! -z: operador unario esperado kill: uso: kill   [-s sigspec | -n signum | -sigspec] pid | jobspec ... o kill -l   [sigspec] el proceso mongod se eliminó de forma forzosa, el identificador del proceso fue.

¿Por qué este script da un error?

Lo intenté con

if[[ !z "$pro ]]

pero no ayuda.

Por favor, dígame cómo escribir un script de bash exactamente válido

    
pregunta pro.mean 08.12.2017 - 20:29

1 respuesta

3

Hay tres problemas que puedo ver:

  • La primera línea debe ser #!/bin/bash (que junto con chmod pkill.sh le permitirá ejecutar ./pkill.sh mongod directamente)
  • El espacio en blanco es importante en bash , intente [ ! -z "$pro" ] :-)
  • -z prueba para una cadena vacía, así que ! -z prueba para una cadena no vacía. Ignorar por un momento que -n hace lo mismo: ¿no deberías llamar a kill si la cadena no está vacía?

PS: Además, usar pgrep o incluso pkill en lugar de las tuberías hará las cosas mucho más fáciles aquí.

    
respondido por el nohillside 08.12.2017 - 20:44

Lea otras preguntas en las etiquetas