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

[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 :"
> 
> 



reply via email to

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