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

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

Re: [shell-script] variavel no sed


From: Julio Neves
Subject: Re: [shell-script] variavel no sed
Date: Wed, 11 Apr 2001 11:19:32 -0300

ATENÇÃO, no momento não disponho do Linux para testar, mas eu faria assim:

function adiciona
{
while [ $USUARIO ];do
        echo -n "Digite o login do usuario (8 caracteres): "
        read USUARIO
done;
#Tira brancos iniciais e finais e trunca para nao haver problema
USUARIO=`echo "$USUARIO" | sed 's/^ *//' | sed 's/ *$//' | cut -c -8`

if  sed -n "s/^$USUARIO//" /etc/passwd; then
        echo "Este login ja esta sendo usado, favor verificar"
        exit 1;
else
        echo "Este login nao existe. Pode implementá-lo" 
          # Eu trocaria o echo acima por uma rotina de criação de usuário
fi
exit
### ...
# Na forma q de construção do if acima foi para aproveitar 
# sua principal caracteristica que é testar instruções.
# Na construção do sed usei aspas que deixam o shell resolver a
# variável antes de executar o sed. O ^foi colocado para que
# a pesquisa seja efetuada somente no início do registro,
# despresando os comentários para o finger.
# Acho que neste caso o grep é melhor q o sed que que eu quero
# somente testar se o usuário existe ou não.
# Experimente:
if  grep "^$USUARIO" /etc/passwd > /dev/null; then

Sucesso,
Julio C. Neves



Favor responder a address@hidden
Para:   <address@hidden>
cc: 
Assunto:        [shell-script] variavel no sed

Como faco para 'escapar' a variavel dentro de um bloco sed?

sei que poderia usar cut e grep, mas quero usar o sed.

### ...

function adiciona
{
while [ -z $USUARIO ];do
        echo -n "Digite o login do usuario (8 caracteres): "
        read USUARIO
done;
#Trunca para nao haver problema
USUARIO=`echo "${USUARIO}" | cut -c -8`

EXISTENTE=` sed -n 's/\(\${USUARIO}\).*/\1/p' /etc/passwd `;

echo $EXISTENTE;
if ! [ -z ${EXISTENTE} ]; then
        echo "Este login ja esta sendo usado, favor verificar"
        exit 1;
else
        echo $EXISTENTE;
fi
exit 2;
### ...

$EXISTENTE nao retorna nada. tentei $USUARIO mas tbm nao consegui(ele
interpreta o $ como final de linha e a string USUARIO como a palavra da
regexp). mas se coloco o nome do usuario diretamente no bloco (por exemplo
EXISTENTE=` sed -n 's/\(mvieira\).*/\1/p' /etc/passwd `;) funciona.

obrigado por qualquer ajuda.

[]'s

Mauricio Vieira - Ciencia da Computacao UFBA
----------------------------------------------------------------------
The connection between the language in which we think/program and the
problems and solutions we can imagine is very close.  For this reason
restricting language features with the intent of eliminating programmer
errors is at best dangerous.
                -- Bjarne Stroustrup


On Tue, 10 Apr 2001, # aurelio marinho jargas wrote:

:olá juari,
:
:@ 19/4, Juari Ritter Mueller:
:
:> Para arquivos no diretório corrente:
:> for i in *; do mv "$i" "$(echo "$i"|tr [A-Z] [a-z])"; done
:>
:> Para arquivos cobrindo toda uma árvore de diretórios:
:> i="blah"
:> find . |
:>   while [ -n "$i" ]; do
:>     read i
:>     mv "$i" "$(echo "$i"|tr [A-Z] [a-z])"
:>   done
:> PS: NAO TESTADO
:
:ao invés de fazer o find|while, você pode usar a mesma estrutura
:do primeiro e apenas trocar o * pelo find . usando uma subshell:
:
:for i in `find . -type f` ; do mv "$i" "`echo $i|tr A-Z a-z`"; done
:
:
:
:* note que a sintaxe do tr é A-Z e a-z, SEM os colchetes.
:  os colchetes são meros caracteres normais, e fazendo [A-Z] e [a-z]
:  você troca [ por [ e ] por ] &:)
:
:
:do man tr:
:
:                   Faixas. A notação `m-n' expande para todos os 
caracteres de m a
:                   n, em ordem  ascen­ dente. m deve ser menos que n; 
caso
:                   contrário ocorrerá um erro. Por exemplo `0-9' é o 
mesmo que
:                   `0123456789'.  Ainda que tr não suporta a sintaxe do 
System V
:                   que  usa colchetes  para delimitar faixas, a alteração
:                   especificada neste formato funcionará como se os 
colchetes em
:                   expr1 correspondessem a colchetes idênticos em expr2.
:
:
:--
:s·:(·>(·×^a]×http://www.verde666.org×^[:wq
:
:
:
:Sair da lista: address@hidden
:Banco Dados:   http://www.egroups.com/group/shell-script
:
:Seu uso do Yahoo! Grupos é sujeito às regras descritas em: 
http://docs.yahoo.com/info/terms/
:
:



Sair da lista: address@hidden
Banco Dados:   http://www.egroups.com/group/shell-script 

Seu uso do Yahoo! Grupos é sujeito às regras descritas em: 
http://docs.yahoo.com/info/terms/ 








reply via email to

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