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

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

Re: [shell-script] arrays -- foreach


From: Ricardo A. Reis
Subject: Re: [shell-script] arrays -- foreach
Date: Fri, 21 Apr 2006 13:38:09 -0300
User-agent: Opera Mail/9.00 (FreeBSD)



Eu nao tenho certeza mais acho isso nao e possivel com bash, talvez com zsh!!
o qual mesmo usando nao conheco muito,

Eu melhoraria o seu codigo, voltando o loop .. algo assim

homes=(`awk -F: '($3 >= 1001) && ($3 != 65534) { print $6 }' /etc/passwd`);

for home in ${homes[@]};do
        if [ -d  $home/Defaults ];then
                x=(`ls -d $home/Defaults/*`)
echo -e ${x[*]//%/\/$gs_defaults\/$(wmaker)\\\n} | sed 's#^# apply_fix #g'
        fi
done

Pra simular um hash do perl, eu ja usei varias vezes algo como

while read key element;do
      if   [ $key == "fruta" ];then
                echo $element
      elif [ $key == "verdura" ];then
                echo $element
        else
                echo "NADA"
        fi
done < /tmp/XXXXX

Onde eu usava paste pra concatenas colunas e relacionando a primeira a segunda,

algo como

fruta banana
fruta pera
verdura xxxx
verdura xxxx

Tomara que isso tenha ajudadi de alguma forma, qualquer coisa me manda um email


Atenciosamente

Ricardo A. Reis
UNIFESP
Unix and Network Admin
On Tue, 18 Apr 2006 14:42:24 -0300, oteb_04 <address@hidden> wrote:

 Olá

 Estou vendo como resolver um item da lista de coisas a serem feitas
em um script(upgrade-windowmaker-defaults do pct .deb). Uma das coisas
que estimula a tarefa é que talvez isso matenha o script em #!/bin/bash
e o autor não faça a tradução para perl.

 O item: * Fix that ugly hack with fix*
#Is there something in the shell like Perl's hashes? It could be nice to
#do something like "foreach $var (keys %fixes)" to associate fixes with
#file names so I don't have to track things all over the place

 Vi no capitulo 26 do guia abs[0] uma menção ao for-each(Example
26-4), mas
não sei bem como é isso em perl. A pergunta é: como se faz um
"foreach $var (keys %fixes)" em shellscript?

 O que fiz até agora foi, ao invéz de usar um loop for, como no
script:

for dir in `cut -d : -f 6 /etc/passwd | sort -u` ; do
  apply_fix $dir/$gs_defaults/WindowMaker "$fix1" "$fix2" $fix6"
  apply_fix $dir/$gs_defaults/WMState "$fix3"
  apply_fix $dir/$gs_defaults/WMWindowAttributes "$fix4"
done

usar uma linha dessas:
x=( `ls -d /home/*` )
echo -e ${x[*]//%/\/$gs_defaults\/$(wmaker)\\\n} | sed
's#^# apply_fix#g'

 Isso retorna uma linha para cada usuário:
apply_fix /home/user/Defaults/WindowMaker $1 $2 $3
...

sendo $(wmaker) uma chamada para a função que contém os $fixn. Teria
que ter uma linha para cada um dos WindowMaker, WMState,
WMWindowAttributes.

Fora o uso do 'ls -d /home/*' para filtrar melhor os diretórios, não vejo
alguma melhora do que fiz em relação ao que já existe. Se alguém
puder esclarecer um pouco o assunto seria muito bom.


 []
 hpfn


[0] - http://www.tldp.org/LDP/abs/html/arrays.html

- a função apply_fix
apply_fix ()
{
  file_to_fix=$1; shift
  if [ -e $file_to_fix ] ; then
    echo -n "Fixing $file_to_fix... "
    while [ $# -gt 0 ] ; do
      sed -e "$1" $file_to_fix > $tempfile
      cat $tempfile > $file_to_fix
      shift
    done
    echo done.
  fi
}

- a função wmaker
wmaker(){
 echo -n 'Wmaker $1 $2 $3';
}






---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil

Links do Yahoo! Grupos









--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/

                
_______________________________________________________ Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. http://br.info.mail.yahoo.com/


reply via email to

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