shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Dúvida


From: Leandro Santiago
Subject: Re: [shell-script] Dúvida
Date: Thu, 12 Nov 2009 10:22:52 -0200
User-agent: Thunderbird 2.0.0.23 (X11/20090817)

Colega, talvez lhe falte um conhecimento maior na linguagem. Por exemplo, não é uma boa prática usar as crases (`comando`) para executar subcomandos, já que elas são visualmente feias e facilitam que vc se perca na leitura. Use $(comando).

Outra coisa, comparação no shell frequentemente é feita com o programa test, ou seu "apelido", [].

Ou seja,
if "$diretorio_local_copia_qtdade" -eq "$diretorio_local_temporario_qtdade"

Não existe. Tente
if [ "$diretorio_local_copia_qtdade" -eq "$diretorio_local_temporario_qtdade" ]

Ou, como está usando o bash, que possui vários recursos "embutidos",
if (( diretorio_local_copia_qtdade == diretorio_local_temporario_qtdade )); then

Muito provavelmente isto fará com que o programa entra na instrução do if e possa fazer a manipulação do seu array.

E cuidado com a manipulação de arrays, pq quando vc diz
for i in ${array[@]}; do

Há uma chance bem grande de fazer "cagada", já que em cada iteração o for vai usar uma "palavra", ou seja, separada por espaços, o que pode prejudicar a manipulação de elementos que contém este caractere.

Há vários jeitos de contornar isso, mas um jeito bem bashiano (e comum em linguagens mais antigas) é:

comp=${#array[@]} # quantidade de elementos no array
for (( i=0; i < comp ; i++ )); do
faça alguma coisa com "${array[$i]}"
done

Eu quando sei que vou usar o bash faço de tudo para usar o máximo de recursos que ele oferece. Tá, chamam de "bashismo", mas se está lá (no bash), então é para ser usado :-)

PS: já tentou usar algo como o rsync?

Rafael Gomes wrote:

Pessoall,

Estou com um problema no meu array que não consegue ser incrementado.

--------------------------------------------
#!/bin/bash

#endereco ip do servidor

#servidor=$1

#Diretorio de copia do Mainframe para a maquina linux
diretorio_local_copia=/root/lab1

#Diretorio de comparacao com a copia realizada localmente
diretorio_local_temporario=/root/lab2

#Comparar os diretorios temporarios

diretorio_local_copia_qtdade=`ls -al $diretorio_local_copia| wc -l`
diretorio_local_temporario_qtdade=`ls -al $diretorio_local_temporario| wc
-l`

if "$diretorio_local_copia_qtdade" -eq "$diretorio_local_temporario_qtdade"
then
echo "Diretorios tem quantidades iguais"
else
array_comparacao=( $( diff $diretorio_local_copia
$diretorio_local_temporario| cut -d' ' -f4))
echo ${array_comparacao[@]}
for i in ${array_comparacao[@]}; do
cp $diretorio_local_copia/${array_comparacao[*]}
$diretorio_local_temporario
done
fi

----------------------------------------------

A intenção deste script é verificar se existe a mesma quantidade de arquivos
no diretório lab2.
Caso não exista os arquivos são copiados da pasta lab1 para a pasta lab2.
Neste passo da cópiia que está ocorrendo o meu problema.

Alguém pode dar uma luz sobre o que pode estar acontecendo ?

Obrigado !
___________________________________________________
Rafael Gomes da Silva
Email: address@hidden <mailto:rafael%40inspiretecnologia.com.br>
MSN: address@hidden <mailto:rafstrat%40hotmail.com>
Celular: (61)8108-6000

[As partes desta mensagem que não continham texto foram removidas]





reply via email to

[Prev in Thread] Current Thread [Next in Thread]