Bash obtendo a expressão inteira esperada

0

Eu tenho o seguinte script para verificar o uso do disco

    #!/bin/bash

# set alert level 90% is default
ALERT=10

OIFS=$IFS
IFS=','

storage=$(df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }')



for output in $storage ;

do
  echo "---------------@@@@@@@@@ output started @@@@@@@@@@@@@@@@-----------"
  echo $output
  echo "---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------"

  usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1  )
  echo "---------------###### useo started ######-----------"
  echo $usep
  echo "---------------###### usep end ######-----------"

  if [ $usep -ge $ALERT ]; then

    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)" 
  fi
done

Mas quando eu estou executando este código eu estou recebendo a expressão inteira erro esperado em if declaração condicional, Aqui está a saída deste script

  97% /dev/sda1
1% udev
0% none
2% none
---------------@@@@@@@@@ output end @@@@@@@@@@@@@@@@-----------
---------------###### useo started ######-----------
97
1
0
2
---------------###### usep end ######-----------
./fordiskfor.sh: line 24: [: 97
1
0
2: integer expression expected
    
por pushpendra chauhan 14.11.2014 / 07:07

2 respostas

2

O problema está aí:

if [ $usep -ge $ALERT ]; then
  ...
fi

$usep contém várias linhas de dígitos. Para percorrer todos eles, use algo assim em vez dessa parte:

for $space in $usep;
do
  if [ $space -ge $ALERT ]; then
    echo "Running out of space..."
  fi
done
    
por 14.11.2014 / 07:56
0

O valor armazenado na variável $storage compreende várias linhas. Como resultado, $output também conterá várias linhas e, portanto, $usep .

Você pode extrair e comparar todos os valores armazenados em $usep , um por um, usando outro loop for , conforme mencionado em esta resposta. Ou você pode usar a instrução while da seguinte forma:

echo $storage | while read output
do      
    ...
    ...

    if [ $usep -ge $ALERT ]; then    
    echo "Running out of space \"$partition ($usep%)\" on $(hostname) as on $(date)"
  fi
done
    
por 14.11.2014 / 07:56