[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/
- arrays -- foreach, oteb_04, 2006/04/18
- Re: [shell-script] arrays -- foreach,
Ricardo A. Reis <=
- Re: [shell-script] arrays -- foreach, Felipe Kellermann, 2006/04/21
- Re: arrays -- foreach, oteb_04, 2006/04/22
- Re: [shell-script] Re: arrays -- foreach, Ricardo A. Reis, 2006/04/23
- Re: arrays -- foreach, oteb_04, 2006/04/23
- Re: arrays -- foreach, oteb_04, 2006/04/23
- Re: [shell-script] Re: arrays -- foreach, Ricardo A. Reis, 2006/04/30
- Re: arrays -- foreach, oteb_04, 2006/04/30