• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

maurosmartins

Bash script

8 mensagens neste tópico

Olá a todos.

Para um trabalho que tenho para uma cadeira de sistemas operativos precisava de manipular uma string dentro de um bash scrit.

A string é qualquer coisa do género

campo1:campo2:campo3:campo4:campo5:campo6:campo7

eu queria separar cada campo para poder colocá-lo numa variavel independente.

Alguma ideia? todas as ajudas seriam bem vindas.

Cumps, Mauro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o comando cut para o efeito:

#!/bin/sh

campo1=`cut -d: -f1 $1`
campo2=`cut -d: -f2 $1`
campo3=`cut -d: -f3 $1`
campo4=`cut -d: -f4 $1`
campo5=`cut -d: -f5 $1`
campo6=`cut -d: -f6 $1`
campo7=`cut -d: -f7 $1`

echo $campo1; echo $campo2; echo $campo3; echo $campo4; echo $campo5; echo $campo6; echo $campo7

No ficheiro "teste" coloquei: ananas:banana:cereja:damasco:ervilha:frango:galinha

chmod 755 script
./script teste

ananas
banana
cereja
damasco
ervilha
frango
galinha

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Baderous, mto obrigado pela resposta.

Ao experimentar o código deparei-me com outro "problema".

O comando CUT só pode ser usado em ficheiros?! eu gostaria de usar em variaveis que tivessem uma string.

Existe algum comando que faça o mesmo que o CUT mas para variaveis?!

Cumps, Mauro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se não deres um ficheiro para input ele lê do stdin. Não serve?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que eu queria fazer era algo deste género


for i in $info
do
echo $i > temp
campo1=`cut -d: -f1 temp`
#campo2=`cut -d: -f2 i`
#campo3=`cut -d: -f3 $i`
#campo4=`cut -d: -f4 $i`
#campo5=`cut -d: -f5 $i`
#campo6=`cut -d: -f6 $i`
#campo7=`cut -d: -f7 $i`

        echo "<p>$campo1</p>\n" >> $filename
#echo $campo2 >> $filename
#echo $campo3 >> $filename
#echo $campo4 >> $filename	

done

em que info recebe o output do comando getent passwd.

Eu neste exemplo estou a usar um artificio de escrever primeiro para um ficheiro e dps usar o CUT, mas nao deve ser a soluçao mais "elegante" para se fazer.

Se tiverem ideias, agradecia.

Cumps, Mauro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fica outra duvida

for name in `cut -d: -f5 utilizadores | sort -u`

imagine se que o cut retornava uma coisa do tipo 'um dois tres'

o for vai executar o ciclo para as strings 'um', 'dois' e 'tres'

Eu queria que ele executasse o ciclo para a string inteira...

De acrescentar que esse comando é aplicado a um ficheiro no formato

string1:string2:string3:string4....

string5:string6:string7:string8

e eu queria executar o ciclo para por exemplo a terceira coluna de cada string, todas por ordem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens um filtro awk que podes usar para esse efeito

awk -F':' '{print $1,$2,$3}'

podes usar separadores com aspas ou caracteres se procurares por awk na net encontras bastante informação

SP

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenho uma dica que acho vai facilitar, usar array, array é como uma lista de variaveis

ex:

nomes=("jose" "joao" "maria" "carlos")

echo ${nomes[0]}
echo ${nomes[1]}
echo ${nomes[2]}
echo ${nomes[3]}

os indices sempre começa no 0, o indice 0 é jose, o indice 1 é joao, etc.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora