script di shell dà errore [:! -z: operatore unario previsto durante l'esecuzione

2

Ho creato uno script bash per uccidere il processo attivo cercando per nome

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

ed esegui questo script di shell nel terminale (v 2.8) come segue

sh pkill.sh mongod

il lavoro è finito, ma dà anche l'errore

pkill.sh: line 3: [: !-z: unary operator expected kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] mongod process killed forecfully, process id was .

perché questo script dà un errore?

Ho provato con

if[[ !z "$pro ]]

ma nessun aiuto.

Per favore dimmi come scrivere script bash esattamente validi

    
posta pro.mean 08.12.2017 - 20:29
fonte

1 risposta

3

Ci sono tre problemi che riesco a vedere:

  • La prima riga dovrebbe essere #!/bin/bash (che insieme a chmod pkill.sh ti consentirà di eseguire ./pkill.sh mongod direttamente)
  • Lo spazio bianco è importante in bash , prova [ ! -z "$pro" ] : -)
  • -z verifica una stringa vuota, quindi ! -z verifica per una stringa non vuota. Ignorando per un momento che -n fa la stessa cosa: non dovresti chiamare kill se la stringa non è vuota?

PS: Inoltre, utilizzando pgrep o anche pkill invece delle pipe, le cose saranno molto più semplici qui.

    
risposta data 08.12.2017 - 20:44
fonte

Leggi altre domande sui tag