[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Duvida com while e shift
From: |
Márcio Gil |
Subject: |
Re: Duvida com while e shift |
Date: |
Thu, 5 Nov 2009 14:54:56 -0200 |
O 'shift' serve para você processar um número indefinido de
parâmetros. Ele funciona excluindo o $1, passando o conteúdo de $2
para $1, de $3 para $2 e assim por diante. Então você deve salvar
estes parâmetros em alguma variável para que não perca esta
informação. Uma forma é utilizando vetores (arrays).
Outro problema com o seu script que notei foi que não há condição de
parada, então no final ele sempre testa "" (vazio) como se fosse um
parâmetro passado. Você deve processar enquanto "$1 não é vazio",
como no exemplo asseguir:
#!/bin/bash
files=""
i="0"
while [ ! -z "$1" ] ; do
[ ! -f "$1" ] && echo "$1 nao existe" && exit 1
files[$i]=$1
i=$((i+1))
shift
done
echo "Arquivo ${files[0]} :"
echo "Arquivo ${files[1]} :"
Repare que no final eu acesso os nomes dos arquivos pela variável
'files'. Se você quiser saber quantos arquivos foram passados:
echo "Foram passados ${#files[@]} parâmetros"
> -----Original Message-----
> From: Cristiano Amaral
>
> Alguém poderia me explicar o do porque do shift zerar as
variaveis?
> Isto é proprio dele ?
>
> while true ; do
> [ ! -f "$1" ] && echo "$1 nao existe" && exit 1
> shift
> done
>
> echo "Arquivo $1 :"
> echo "Arquivo $2 :"
>
>