ifftp versão csh


[Home] [Dissertação] [Biba] [Linux] [Conjugue] [br.ispell] [axw3] [uplink]

>Ricardo,
>
>Aquelas dicas do if tem um problema. Ao testar a primeira conexao vem o 
>seguinte erro:
>
>Unmatched `.
>
>No csh o negocio fica mais ou menos do seguinte modo:
>
>set result = `ftp -i -v -n hal << FIM
>user ueda password
>cd /pub/ondas
>dir
>quit
>FIM `
>echo resultado: $result

Segue uma longa explicacao. Se voce nao quiser le-la, va' direto
ate' o fim, onde coloquei uma versao csh do script.

E' importante distinguir num caso desses os recursos "builtin"
dos que nao sao "builtin". Os "builtin" sao suportados pelo
shell, e portanto dependem do shell utilizado.

No DOS, recursos "builtin" do command.com incluiam o "CD" e o
"DIR", entre outros. Nos shells Unix, sao recursos "builtin":

a. Pipes e redirecionamento de entrada e saida ("|", ">", "<", e
os seus compostos, como "2>" ou ">&").

b. Os "here documents", como a entrada do ftp identificada pelas
strings "FIM":

ftp -i -v -n hal <<FIM
user ueda password
cd pub/ondas
dir $data
quit
FIM

c. O efeito do ``, com um comando entre os dois `, e' substituir
a string delimitada pelos ` pela saida desse comando. Naquele
script, o comando entre os dois ` e' o comando composto ftp|grep
(parametros omitidos), sendo que o ftp esta' recebendo como
entrada o "here document" que vem em seguida.

d. Os comandos de controle de fluxo como "if" e "while". Note
entretanto que as expressoes, em particular as formadas com "["
ou "test", podem nao ser recursos "builtin".

e. Setagem/uso de variaveis ("set", "setenv", $, $?, ${#, etc).

f. Expansao de metacaracteres ("*", "?", "[0-9]", "{,}").

Ha' uma serie de outros, mas sao menos usados. Alguns comandos,
como "kill" e "echo", podem ou nao ser "builtin", dependendo do
shell.

Qualquer script que use comandos "builtin" esta' sujeito a
funcionar apenas com o shell para o qual ele foi escrito. Esse e'
o caso do script que eu havia enviado a voce, feito para bash.
Mas nao se preocupe, nao e' dificil converte-lo para csh, basta
incluir o "\" nos finais de linha enquanto o ` nao for fechado, e
alterar ligeiramente a sintaxe dos ifs (a versao csh segue
anexa).

Ricardo Ueda.

-----

#!/bin/csh

#
# data desejada
#
set data=97072512
echo data fixada em $data

#
# verifica se existe o diretorio pub/ondas/$data
# no servidor. Em caso afirmativo a variavel result
# contera uma linha como
#
# drwxrwxr-x 2 ueda ueda 1024 Aug 5 13:26 97072512
#
# Em caso negativo, ela ficara vazia
#
echo tentando primeira conexao
set result=`ftp -i -v -n hal <<FIM | grep "^d.*$data"\
user ueda password\
cd pub/ondas\
dir $data\
quit\
FIM`
echo resultado: $result

#
# Testa o conteudo da variavel result e faz nova
# conexao ftp no caso do diretorio existir, trazendo
# todo o conteudo do diretorio remoto para o diretorio
# local homonimo.
#
echo testando resultado
if ("$result" != "") then
echo criando diretorio local
rm -rf $data
mkdir $data
cd $data
echo fazendo segunda conexao
ftp -i -v -n hal <<FIM
user ueda password
cd pub/ondas/$data
bin
mget *
quit
FIM
cd ..
echo transferencia completada

#
# Informa inexistencia do diretorio
#
else
echo "nada para a data $data"
endif