el script de shell da el error [:! -z: el operador unario esperado mientras se ejecuta

Creé un script bash para matar el process activo buscando 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 ejecutar este script de shell en terminal (v 2.8) como sigue

  • ¿Cómo puedo restablecer mi configuration de bash?
  • No se puede ejecutar vi desde la terminal
  • La input del usuario asignada a la variable en AppleScript luego pasa al command "do shell script"
  • ¿Cómo agregar MySQL a la variable $ PATH para resolver "mysql: command no encontrado"?
  • ¿Por qué tengo que poner sh antes de ejecutar files .sh?
  • Cómo cambiar la versión bash con homebrew
  • 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] mongod process asesinado de forma anticipada, la identificación del process fue.

    ¿por qué este script da un error?

    Lo intenté con

    if[[ !z "$pro ]]

    pero no ayuda.

    Por favor, dime cómo escribir un script bash válido

  • ¿Cómo puedo especificar el time de apagado con "sudo shutdown"?
  • ¿Hay una aplicación de terminal iOS4 utilizable?
  • establecer la extensión de file personalizado para abrir con el progtwig especificado
  • Error al usar `sudo shutdown` en la máquina remota
  • Ejecutar script en el automatizador (sin terminal)
  • Color del cursor de la viga en I en la terminal de Mavericks
  • One Solution collect form web for “el script de shell da el error [:! -z: el operador unario esperado mientras se ejecuta”

    Hay tres problemas que puedo ver:

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

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

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).