Problema com a sintaxe do shell [RESOLVIDO]

1. Problema com a sintaxe do shell [RESOLVIDO]

Guilherme Richter
guilherme.r

(usa openSUSE)

Enviado em 16/03/2013 - 22:37h

Ola pessoal, estou com um problema que não consigo identificar o erro em dois scripts que estou fazendo...
(O erro é o mesmo mas os scripts são diferentes)
Estou fazendo 2 scripts que leem o xferlog e um deles gera um CSV bonitinho enquanto o outro manda um e-mail para um certo fulano que tem o nome no arquivo(confirmação de backup).
Segue o primeiro script, que envia os emails:

#!/bin/bash

# Script responsavel pelo envio de emails de cofirmacao de backups
# Diretorio do xferlog
dir_xferlog="/var/log/proftpd/xferlog"
# Diretorio do arquivo de email temporario
email_tmp="/tmp/email.tmp"

# Array com os emails dos logs
emails=($(cat $dir_xferlog| grep "@dominiodaminhaempresa.com.br)" |cut -d"(" -f2 |cut -d")" -f1|sort |uniq))

# Numero de emials dentro do array
n_emails=($(echo ${emails[@]}|wc -w))

for NUMERO in $(seq 1 $n_emails); do
echo -e "To: ${emails[$NUMERO]}">$email_tmp
echo -e "Subject: BACKUP">>$email_tmp
echo -e "Seus emails foram copiados com sucesso!">>$email_tmp
ssmtp ${emails[$NUMERO]}<$email_tmp
done

O erro deste script é:

suporte@backup:/bin/backup$ sh relatorio1.sh
relatorio1.sh: 10: relatorio1.sh: Syntax error: "(" unexpected


Agora o outro: (o que gera o csv)

#!/bin/bash

# Script responsavel pela criacao da planilha CSV
# Diretorio do xferlog
dir_xferlog="/var/log/proftpd/xferlog"
# Diretorio da planilha CSV
dir_planilha="/var/ftp/registro.CSV"


# Array com coluna de nome de Arquivos
nome_do_backup=($(cat $dir_xferlog |grep "b _ i"| cut -f 9 -d" "))

# Array com datade quando foram feitos
# Dia
dia_do_backup=($(cat $dir_xferlog |grep "b _ i"| cut -f 3 -d" "))
# Mes
mes_do_backup=($(cat $dir_xferlog |grep "b _ i"| cut -f 2 -d" "))
# Ano
ano_do_backup=($(cat $dir_xferlog |grep "b _ i"| cut -f 5 -d" "))

# Array com a hora do termino do backup
hora_do_backup=($(cat $dir_xferlog |grep "b _ i"| cut -f 4 -d" "))

# Array com o tamanho de cada backup em bytes
bytes_do_backup=($(cat $dir_xferlog |grep "b _ i"| cut -f 8 -d" "))

# Numero de linhas
n_linhas=($(echo ${nome_do_backup[@]}|wc -w))

for NUMERO in $(seq 1 $n_linhas); do
echo -e "${nome_do_backup[$NUMERO]},${dia_do_backup[$NUMERO]}/${mes_do_backup[$NUMERO]}/${ano_do_backup[$NUMERO]},${hora_do_backup[$NUMERO]},${bytes_do_backup[$NUMERO]}" >> $dir_planilha
done

erro:
suporte@backup:/bin/backup$ sh planilha_reg.sh
planilha_reg.sh: 11: planilha_reg.sh: Syntax error: "(" unexpected



Eu devo admitir que sei muito pouco sobre shell, assim como muitos de vocês estou aprendendo sozinho (e gostando).
Por favor me explique o que estes numero do erro querem dizer, não entendi se era linha, ou código.


  


2. Re: Problema com a sintaxe do shell [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 16/03/2013 - 22:42h

de uma olhada

"@dominiodaminhaempresa.com.br)"

não seria o correto

"@dominiodaminhaempresa.com.br"

acho que esse " ) " não deveria estar ai

espero que ajude



3. Re: Problema com a sintaxe do shell [RESOLVIDO]

Guilherme Richter
guilherme.r

(usa openSUSE)

Enviado em 16/03/2013 - 22:45h

configurei o Cobian para escrever no nome do arquivo (entre parenteses) o email. assim fica mais fácil pegar o email da pessoa e enviar um emails confirmando o backup :)
ideia besta... eu sei


4. Re: Problema com a sintaxe do shell [RESOLVIDO]

Guilherme Richter
guilherme.r

(usa openSUSE)

Enviado em 17/03/2013 - 19:14h

Vi o que estava dado os erros...
eu estava usando ($(, quando devia ser apenas $(
mas agora to com outro problema, lidando com array dentro de um for.

#!/bin/bash

# Script responsavel pelo envio de emails de cofirmacao de backups
# Diretorio do xferlog
dir_xferlog="/var/log/proftpd/xferlog"
# Diretorio do arquivo de email temporario
email_tmp="/tmp/email.tmp"

# Array com os emails dos logs
emails=$(cat $dir_xferlog| grep "@dominiodaempresa.com.br)" |cut -d"(" -f2 |cut -d")" -f1 |sort |uniq)

for email in ${emails[@]}
do
echo -e "To: $email" > $email_tmp
echo -e "Subject: BACKUP" >> $email_tmp
echo -e "Seus emails foram copiados com sucesso" >> $email_tmp
#ssmtp $email < $email_tmp
done


nos exemplos que eu vi funcionava assim...



5. dicas

Petronio Padilha
petroniopadilha

(usa Arch Linux)

Enviado em 17/03/2013 - 21:22h

quando vc usa var=($(cat arquivo.txt))
vc cria uma saida em vetor para cada palavra dentro deste arquivo
ou seja... tudo que esta entre '()' o shell entendera que é um vetor.
se vc usar $(cat arquivo.txt) cria uma saida tipo string separada por espacos.

faca o teste... execute os comandos abaixo e veja a diferenca...

echo 'isto eh apenas um teste para entender um pouco melhor o funcionamento do shell' > arquivo.txt
var1=($(cat arquivo.txt))
echo $var1
echo ${var1[@]}
echo "${var1[3]} ${var1[4]}"
var2=$(cat arquivo.txt)
echo $var2
echo ${var2[@]}
echo "${var2[3]} ${var2[4]}"

evite usar aspas duplas para strings nao interpretaveis... como por exemplo: "@dominiodaminhaempresa.com.br)"

ja que vc usou a bash como shebang poderia ter executado o script apenas com ponto "."
ou mesmo com o bash, ao inves do sh...
use o bash mesmo... vc tera menos problemas com compatibilidade.. e a diferenca de desempenho é minima, ainda mais para scripts simples.







6. Re: Problema com a sintaxe do shell [RESOLVIDO]

Guilherme Richter
guilherme.r

(usa openSUSE)

Enviado em 17/03/2013 - 21:24h

vlw cara, o problema estava mesmo que eu rodava o script com sh ao invés do bash






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts