Tentativa de atribuição a não variável (token de erro é “= 0”)

3

Muito novo para isso e puxar meu cabelo para fora daqui. Ajuda é apreciada. Aqui está o meu erro:

/home/rdmorgan0001/bin/dfchkr1.sh: line 12: -1922376 = 0 : attempted assignment to non-variable (error token is "= 0 ")
[rdmorgan0001@cset2 bin]$ 

Aqui está meu script -

#!/bin/bash
#
#
#You need to create a dflog1.txt file from the /dev/sda1 folder before running this script...df | grep "home2" | awk '{print }' > dflog1.txt
#
#
x=($(cat dflog1.txt))                          #x will be the files size found in dflog1.txt which is our initial snapshot.
y=($(df | grep "home2" | awk '{print }'))                      #y will equal the current disk usage
z=100
echo $(( $x-$y )) > xy/xy.txt                     #make a file called xy.txt in the folder xy
w=($(cat xy/xy.txt))                         #w will now be equal to the number contained in xy.txt                   
if $(( $w = 0 ))                              #if w = 0, then there were no changes.
 then
   echo "There are no changes greater than 100MB at this time."
      exit
elif
   $(( $w != 0 ))                         #if it's not equal to zero then there were changes
  then
   $(( $w -lt 0 ))                           #if the change represented by w is a negative number
     $((  -1 * $w )) > absolute/wabs.txt     #then multiply it by -1 to get the absolute value of w
       a=($(cat absolute/wabs.txt))            #a is now equal to the absolute value of w
elif
   $(( $a -ge 100 ))
      then echo $w > dfchanges/dfchanges1$(date "+%d%m%y%H:%M").txt
        echo "Changes greater than 100MB have been detected.  Check the dfchanges1(date).txt file."
         df | grep "home2" > dflog1.txt       #remake our base comparison file since there were changes.
          exit
elif
   $(( $w -ge 100 ))  #changes greater than 100
    then echo $w > dfchanges/dfchanges1$(date "+%d%m%y%H:%M").txt
      echo "Changes great thatn 100MB have been detected.  Check the dfchanges1(date).txt file for more info"
        df | grep "home2" > dflog1.txt     #remake our base comparison file since there were chagnes.
elif
   $(( $a -lt $z ))                                 #if it's less than 100 we will disregard it in the next line
       then
         echo "There are no changes greater than 100MB at this time."
             exit
fi
    
por morgro269 14.05.2017 / 04:34

1 resposta

4

Dentro de (( ... )) avaliação aritmética, = é um operador de atribuição não é um operador comparação lógica . Portanto, $(($w = 0)) é a variável de desreferência w e, em seguida, tentar atribuir o valor 0 ao seu valor .

Provavelmente, o que você pretendia era if $(($w == 0)) . No entanto, embora sintaticamente correta, a sintaxe de expansão de parâmetro $w não é necessária neste contexto, portanto, você pode simplificar isso para if ((w == 0)) e, da mesma forma, para $(( $w != 0 )) e assim por diante. Na seção ARITHMETIC EVALUATION de man bash :

Shell  variables  are  allowed as operands; parameter expansion is per‐
formed before the expression is evaluated.  Within an expression, shell
variables  may  also  be referenced by name without using the parameter
expansion syntax.

Observe também que -le , -gt operadores são para comparação aritmética dentro de [ ... ] ou [[ ... ]] colchetes de teste; dentro de (( ... )) colchetes (que são para avaliação aritmética somente ), você deve usar <= , > e assim por diante.

    
por steeldriver 14.05.2017 / 04:52

Tags