Fim da sintaxe do arquivo erro shell script [closed]

0
#!/bin/bash

source conf.ini

inotifywait -m -e create /$1path |
  while read file; do

if ($(echo $word | head -c 1)"=$1 then
    echo $file
cd $1inputpath
ls -l |grep $file*
zcat $file* > /tmp/$file
sort /tmp/$file > /tmp/$file.sorted
cd $1outputpath
 ls -l |grep $file
sort  $file > /tmp/$file.origsorted
diff /tmp/$file.origsorted  /tmp/$file.sorted
 if [ $? -eq 0 ];
 then
   echo OK
else
echo FAIL
echo $file
fi

fi
      done

Eu recebo abaixo do erro: en do fthe file:

./FoldersegCompare: line 8: unexpected EOF while looking for matching '"'
./FoldersegCompare: line 32: syntax error: unexpected end of file
    
por Test priya 31.07.2015 / 21:07

2 respostas

2

Em não sei o que você está tentando fazer com este script, mas olhando para ele pela primeira vez, vejo os erros são por causa desta linha:

if ($(echo $word | head -c 1)"=$1 then

Faça como:

if [ "$(echo $word | head -c 1)" = "$1" ]; then

ao fazer uma verificação com if-then de construção condicional use test ( [ ) ou [[ ( bash -ism). Verifique help test para mais informações.

Quando você está fazendo if ($(echo $word | head -c 1)"=$1 then :

  • Há erros de sintaxe, ( após if e " antes de = , talvez você quisesse dizer "$(echo $word | head -c 1)"

  • Além disso, como você não usa test (ou [[ ), o = simplesmente sugere que você está fazendo uma atribuição variável. Então você precisa de [ ( test ) ou [[ para ter certeza de que está comparando as coisas

  • Além disso, você perdeu um ; antes de then , que é uma abreviação de nova linha (ou você pode colocar then na próxima linha)

Além disso, seu script parece ineficiente (para ser honesto) para mim, olhando para os comandos que você usou para fazer o trabalho (não sei o que) feito. Talvez você deva ler as respostas de script postadas aqui e outros sites para ter uma idéia sobre qual ferramenta usar em qual situação, fazer uma nova pergunta para ver o que os outros sugerem para resolver seu problema e, claro, usar recuo.

    
por heemayl 31.07.2015 / 21:16
1

Corrija os seguintes problemas e verifique seu script novamente aqui ou veja minhas correções abaixo

   1  #!/bin/bash
   2  
   3  source conf.ini
   4  
   5  inotifywait -m -e create /$1path |
   6    while read file; do
   7  
   8  if ($(echo $word | head -c 1)"=$1 then
          ^––SC1009 The mentioned parser error was in this simple command.
                                   ^––SC1073 Couldn't parse this double quoted string.
   9      echo $file
  10  cd $1inputpath
  11  ls -l |grep $file*
  12  zcat $file* > /tmp/$file
  13  sort /tmp/$file > /tmp/$file.sorted
  14  cd $1outputpath
  15   ls -l |grep $file
  16  sort  $file > /tmp/$file.origsorted
  17  diff /tmp/$file.origsorted  /tmp/$file.sorted
  18   if [ $? -eq 0 ];
  19   then
  20     echo OK
  21  else
  22  echo FAIL
  23  echo $file
  24  fi
  25  
  26  fi
  27        done
      ^––SC1072 Expected end of double quoted string. Fix any mentioned problems and try again.

E.G.

#!/bin/bash

source conf.ini

inotifywait -m -e create /"$1path" |
while read -r file; do
  if ("$(echo "$word" | head -c 1)"="$1"); then
    echo "$file"
    cd "$1inputpath" || exit
    find . -maxdepth 1 -type f -name "$file"
    zcat "$file"* > /tmp/"$file"
    sort /tmp/"$file" > /tmp/"$file".sorted
    cd "$1outputpath" || exit
    find . -maxdepth 1 -type f -name "$file"
    sort  "$file" > /tmp/"$file".origsorted
    diff /tmp/"$file".origsorted  /tmp/"$file".sorted
    if [ $? -eq 0 ];
    then
      echo OK
    else
      echo FAIL
      echo "$file"
    fi
  fi
done

E se você conseguir algo assim

./FoldersegCompare: line 5: inotifywait: command not found

simplesmente instale com

sudo apt-get install inotify-tools
    
por A.B. 31.07.2015 / 21:16