[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]
- Dúvida, Rafael Gomes, 2009/11/11
- Re: [shell-script] Dúvida,
Leandro Santiago <=