[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] renomear arquivos
From: |
Julio Cezar Neves - DISB.O |
Subject: |
RES: [shell-script] renomear arquivos |
Date: |
Wed, 25 Oct 2000 16:53:55 -0300 |
Peço que os colegas de lista me desculpem. Esta msg foi anteriormente
enviada para a lista mas era para ter sido enviada em pvt para o Aurélio
Jargas.
[]s a todos,
Julio
-----Mensagem original-----
De: # aurelio marinho jargas [mailto:address@hidden]
Enviada em: quarta-feira, 25 de outubro de 2000 15:43
Para: address@hidden
Assunto: Re: [shell-script] renomear arquivos
@ 25/10, Julio Cezar Neves - DISB.O:
> > aurélio escreveu:
> > para complementar, uma dica de bash2, que tem matrizes e uns
> > conceitinhos legais que em determinadas situações, dispensam o
> > uso de cut e sed
>
> O korn shell (ksh) tb faz tratamento de matrizes e vetores, além de
> instruções típicas para manipulação de numéricos e declaração de tipos de
> variáveis. No entanto evito usá-los, para manter a universalidade dos
> scripts e por estas facilidades do ksh serem muito pouco difundidas.
>
> Acho uma pena, que o bash2 não tenha tentado seguir tais padrões do ksh,
de
> forma a incrementar o uso de ambos, que seria uma conseqüência lógica da
> padronização.
>
> Se vc quizer, te mando em pvt um bacalho q desenvolvi, há + de 5 anos,
para
> testar estas implementações.
beleza julio, me mande por favor.
quanto ao bash2, não sei ao certo o motivo da escolha da sintaxe,
mas ela parece familiar a sintaxe das variáveis do bash, pois o
: já era utilizado como separador, como em ${var:-erro}.
Pois é Aurélio, esta sintaxe ${:?} é antiga, e eu a uso muito,
principalmente na forma que vc mostrou ({:-}), para receber um valor
default. Essa bem usada quebra um galhão. A rotina abaixo, que já é bem
antiga e estou precisando dar uma enxugada, incluo em quase todos os meus
programas para fazer uma pergunta. P.ex.: se o programa identifica que o
operador teclou um campo sem preenchimento a linha a seguir será:
Pergunta "Deseja abandonar" S N
a rotina abaixo testará colocará o ponto de interrogação ao final do 1o
parâmetro, a seguir virá o 2o. parâmetro seguido de um par de barras (//),
para convencionar que aquele é o valor default e tudo isso será colocado no
centro da linha 21.
Na volta da rotina basta testar a variável $SN. Repare o uso da construção
{:-}
Pergunta ()
{
DefVal=`echo "$2" | tr "[a-z]" "[A-Z]"`
OthVal=`echo "$3" | tr "[a-z]" "[A-Z]"`
Quest=`echo "$1? $DefVal//"`
Len=`expr length "$Quest"`
Col=`expr "(" 80 - "$Len" ")" / 2`
tput cup 21 $Col
echo "$Quest\07\c"
read SN < /dev/tty
SN=${SN:-"$DefVal"}
SN=`echo $SN | tr "[a-z]" "[A-Z]"`
if [ "$SN" != "$OthVal" ]
then
SN="$DefVal"
fi
tput cup 21 1
echo "
"
return
}
e o bash2 é até incompatível em alguns aspectos do bash1 justo
por forçar mais a compatibilidade com o padrão POSIX, então de
repente a escolha pode ter algo a ver com o POSIX (não achei algo
sobre isso na documentação...)
Mas eu creio que isso será um fator negativo na disseminação do seu uso.
Abaixo o bacalho que usa array e que nunca entrou em produção. Só agora que
reparei q ele tb usa a função Pergunta que descrevi acima. Bom proveito.
[]s,
Julio
Em tempo: TransFTP é um sistema de transmisão de dados que escrevi todo em
shell, que triangula dados emtre nossos mainframes (de muito grande porte),
máquinas Unix e estações Window 9?, praticamente eliminando eventuais erros
de operação.
#!/bin/ksh
#
# Programa: cadastrapc.sh
#
# Autor: Julio Cezar Neves
#
# Observacoes: Gera e mantem o cadastro /usr/local/var/WorkStations que
# funciona como um /etc/hosts dos PC que serao utilizados para
# transmissao de dados via TransFTP.
#
Cab ( )
{
clear
echo "
+------------+------------+---------------------------------------------+
| | DEST.O | Manutencao do Cadastro de PCs |
| DATAPREV | | Producao RJ (821)2347 |
| | DISB.O | Suporte (821)2210 SP (811)6200 |
+------------+------------+---------------------------------------------+"
}
Erro ( )
{
Len=`expr length "$*"`
Colu=`expr "(" 80 - "$Len" ")" / 2`
tput cup 21 $Colu
echo "$*\07\c"
read a < /dev/tty
tput cup 21 1
echo "
"
return
}
Pergunta ( )
{
DefVal=`echo "$2" | tr "[a-z]" "[A-Z]"`
OthVal=`echo "$3" | tr "[a-z]" "[A-Z]"`
Quest=`echo "${1}"\? "${DefVal}"'//'`
Len=`expr length "$Quest"`
Colu=`expr "(" 80 - "$Len" ")" / 2`
tput cup 21 $Colu
echo "$Quest\07\c"
read SN < /dev/tty
SN=${SN:-"$DefVal"}
SN=`echo $SN | tr "[a-z]" "[A-Z]"`
if [ "$SN" != "$OthVal" ]
then
SN="$DefVal"
fi
tput cup 21 1
echo "
"
return
}
Avanca ( )
{
Lin=$1
Col=$2
case $Col in
5) Indice $Lin 5
if [ -z "${Arr[$Ind]}" ]
then
Lin=10
Col=5
else
Col=25
fi
;;
64) Col=5
Lin=`expr $Lin + 1`
if [ "$Lin" -gt 18 ]
then
Lin=10
Col=5
fi
;;
*) Col=`expr $Col + 13`
;;
esac
}
Fim ( )
{
i=0
j=0
mv -f /usr/local/var/WorkStations /tmp/$$ 2> /dev/null
while true
do
if [ -z "${Arr[${i}0]}" -o "(" "$i" -gt 10 ")" ]
then
rm /tmp/$$ 2> /dev/null
exit
fi
Linha=${Arr[${i}0]}"\t"
for j in 1 2 3 4
do
Linha=${Linha}${Arr[${i}$j]}" "
done
Linha=`echo "$Linha" | cut -f-4 -d" "`
echo "$Linha" >> /usr/local/var/WorkStations
i=`expr $i + 1`
done
}
Indice ( )
{
a=`expr $1 - 10`
if [ "$2" -eq 5 ]
then
Ind=${a}0
return
else
Ind=$a`expr \( $2 - 12 \) / 13`
return
fi
}
######################### Corpo do Programa ###########################
Cab
echo "
+-------------------+------------+------------+------------+------------+
| Endereco IP do PC | apelido1 | apelido2 | apelido3 | apelido4 |
+-------------------+------------+------------+------------+------------+
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
+-------------------+------------+------------+------------+------------+"
if [ -s "/usr/local/var/WorkStations" ]
then
Lin=10
cat /usr/local/var/WorkStations |
while read Linha
do
EndIP=`echo "$Linha" | cut -f1`
Apelidos=`echo "$Linha" | cut -f2`
tput cup $Lin 5
echo $EndIP
Indice $Lin 5
Arr[$Ind]=$EndIP
i=1
for Apelido in $Apelidos
do
Col=`expr 12 + $i \* 13`
tput cup $Lin $Col
echo $Apelido
Indice $Lin $Col
Arr[$Ind]=$Apelido
i=`expr $i + 1`
done
Lin=`expr $Lin + 1`
done
Pergunta "Deseja alterar ou incluir dados" S N
if [ "$SN" = N ]
then
exit
fi
fi
tput cup 22 2
echo "Para avancar campo tecle <ENTER>; Para eXcluir, posicione cursor e
tecle X"
tput cup 23 8
echo "Faca as alteracoes necessarias e para finalizar tecle <CTRL>+C.\c"
trap "Fim ; exit 0" 2
Lin=10
Col=5
while true
do
Flg=0
tput cup $Lin $Col
read Dado
if [ "$Col" -eq 5 -a "(" "$Dado" = x -o "(" "$Dado" = X ")" ")" ]
then
tput cup $Lin $Col
echo " X "
Dado=
L=$Lin ; C=$Col
Pergunta "Deseja eXcluir este PC da sua rede" S N
if [ "$SN" != N ]
then
while true
do
Indice $Lin $Col
NextInd=`expr $Ind + 10`
NextLin=`expr $Lin + 1`
tput cup $Lin 5
echo " "
tput cup $NextLin 5
echo " "
if [ -z "${Arr[$NextInd]}" ]
then
for j in 1 2 3 4
do
Col=`expr 12 + $j \* 13`
tput cup $Lin $Col
echo " "
Arr[$Ind]=
Ind=`expr $Ind + 1`
done
Lin=$L ; Col=$C
tput cup $Lin $Col
Flg=1
break
fi
Arr[$Ind]=${Arr[$NextInd]}
Arr[$NextInd]=
tput cup $Lin 5
echo ${Arr[$Ind]}
for j in 1 2 3 4
do
Avanca $Lin $Col
Indice $Lin $Col
NextInd=`expr $Ind + 10`
Arr[$Ind]=${Arr[$NextInd]}
tput cup $Lin $Col
echo " "
tput cup $Lin $Col
echo ${Arr[$Ind]}
tput cup $NextLin $Col
echo " "
done
Avanca $Lin $Col
done
if [ "$Flg" -eq 1 ]
then
continue
fi
else
Indice $Lin $Col
tput cup $Lin $Col
echo ${Arr[$Ind]}
continue
fi
fi
if [ "$Dado" = x -o "(" "$Dado" = X ")" ]
then
Dado=
Indice $Lin $Col
L=$Lin ; C=$Col
while true
do
NextInd=`expr $Ind + 1`
tput cup $Lin $Col
echo " "
if [ -z "${Arr[$NextInd]}" ]
then
Lin=$L ; Col=$C
tput cup $Lin $Col
Flg=1
break
fi
tput cup $Lin $Col
echo ${Arr[$NextInd]}
Arr[Ind]=${Arr[$NextInd]}
Arr[NextInd]=
Avanca $Lin $Col
Indice $Lin $Col
tput cup $Lin $Col
echo " "
done
if [ "$Flg" -eq 1 ]
then
continue
fi
fi
if [ -z "$Dado" ]
then
Avanca $Lin $Col
continue
fi
tput cup $Lin $Col
if [ "$Col" -gt 5 ]
then
echo " "
else
echo " "
fi
tput cup $Lin $Col
echo $Dado
tput cup $Lin $Col
if [ "$Col" -gt 5 ]
then
x=`echo "${Dado}" | grep -c " "`
if [ "$x" -ne 0 ]
then
Erro "Apelido nao pode conter <TAB>"
tput cup $Lin $Col
echo " "
continue
fi
if [ `echo "$Dado" | grep -c " "` -ne 0 ]
then
Erro "Apelido nao pode conter branco"
tput cup $Lin $Col
echo " "
continue
fi
else
IFSold="$IFS"
IFS='.'
set $Dado
if [ "$#" -ne 4 ]
then
IFS="$IFSold"
Erro "O ender. IP deve ter 4 numeros com ate 3 algarismos
separados por '.'"
tput cup $Lin 5
echo " "
Indice $Lin 5
if [ -n "${Arr[$Ind]}" ]
then
tput cup $Lin 5
echo ${Arr[$Ind]}
fi
continue
fi
for j in $Dado
do
if [ "$j" -lt 1 -o "(" $j -gt 254 ")" ]
then
IFS="$IFSold"
Erro "Este nao eh o formato de um endereco IP"
tput cup $Lin 5
echo " "
Indice $Lin 5
if [ -n "${Arr[$Ind]}" ]
then
tput cup $Lin 5
echo ${Arr[$Ind]}
fi
continue
fi
done
IFS="$IFSold"
fi
Indice $Lin $Col
Arr[$Ind]=$Dado
Avanca $Lin $Col
done
exit
Inscrição: address@hidden
Sair da lista: address@hidden
Banco Dados: http://www.egroups.com/group/shell-script
- RES: [shell-script] renomear arquivos, Julio Cezar Neves - DISB.O, 2000/10/24
- Re: RES: [shell-script] renomear arquivos, Henrique Limaverde Cabral de Lima, 2000/10/24
- Re: RES: [shell-script] renomear arquivos, Henrique Limaverde Cabral de Lima, 2000/10/24
- RES: [shell-script] renomear arquivos, Julio Cezar Neves - DISB.O, 2000/10/25
- RES: [shell-script] renomear arquivos,
Julio Cezar Neves - DISB.O <=
- RES: [shell-script] renomear arquivos, Rodolfo Villanova, 2000/10/25
- RES: [shell-script] renomear arquivos, Julio Cezar Neves - DISB.O, 2000/10/26