Ajuda em alguns scripts [RESOLVIDO]

1. Ajuda em alguns scripts [RESOLVIDO]

Daniela Maria
danielamaria151

(usa Outra)

Enviado em 19/05/2011 - 20:03h

Boa noite pessoal preciso de ajuda para resolver estes exercícios vocês poderiam me ajudar?

Fazer uma função que receba uma string como parâmetro e imprima somente os caracteres de A até Z, maiúsculos ou minúsculos.

Fazer um script que liste o username e o nome completo de todos us usuários do sistema que possuam senha. Será preciso ter acesso ao arquivo “/etc/shadow”.

Fazer um script que liste todos os usuários do sistema, mostrando apenas seu primeiro nome e sem repetição de nome.

Fazer um script que mostre todos os parâmetros recebidos pela linha de comando e no final informe quantos parâmetros foram passados.

Leia o nome de 4 arquivos e no final gere uma lista com o conteúdo dos 4 arquivos ordenados e sem repetição.

Fazer um script que entro com o nome de um arquivo, um texto a ser buscado e um texto para substituir o texto buscado. O script deverá mostrar na tela um novo texto com as substituições realizadas.

Fazer um script que receba duas datas no formato DDMMAAAA e retorne a diferença de dias entre elas.

Fazer uma função para varrer uma árvore de diretórios e listar todos os arquivos encontrados. A listagem deverá estar ordenada pelo nome do arquivo e conter, ao lado do nome do arquivo, o diretório onde ele se encontra.



  


2. Re: Ajuda em alguns scripts [RESOLVIDO]

Renato Carneiro Pacheco
renato_pacheco

(usa Debian)

Enviado em 19/05/2011 - 21:05h

Pow... forçou a barra! Vc quer q façamos todos os seus exercícios, né? Pq vc não começa tentando e, depois q vc "travar", vc põe o q vc tava fazendo aki? Ae, sim, ajudaremos.


3. Re: Ajuda em alguns scripts [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 19/05/2011 - 21:17h

a melhor maneira de aprender é fazendo mas uma dica de uma olhada na parte dos scripts
mas lembrando sempre é bom saber o que o script esta executando ; por isso você tem que saber o que o script esta fazendo e entenda a logica .



4. Ajuda?

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 20/05/2011 - 17:22h

Como bem já disseram antes, ajudar é bem diferente do que fazer pra ti. Na tua postagem (e nos dois emails que me enviastes) tu não manifesta dúvida alguma. Apenas passas a listas de exercícios e espera que te enviemos as respostas?

Vamos por partes:
"Fazer uma função que receba uma string como parâmetro e imprima somente os caracteres de A até Z, maiúsculos ou minúsculos."

Sabes como definir uma função em bash? Como enviar parâmetros a ela? Comece por ai. Que tal um ponto de partida, uma função que recebe uma string e apenas a imprime em maiúscula?

#---- INICIO
#!/bin/bash
function maiusculas()
{
echo $* | tr a-z A-Z
}

maiusculas apenas um teste
maiusculas "Isto eh Outro teste"
#---- FIM
Comece testando este script. A partir disto, fazendo uso de cut (para cortar a string caractere por caracter) e grep (para ver se o caractere é uma letra) deve ser suficiente (mas não vou fazer pra ti).


"Fazer um script que liste o username e o nome completo de todos us usuários do sistema que possuam senha. Será preciso ter acesso ao arquivo “/etc/shadow”.

Não entendi o contexto desta questão. O que se quer dizer com "possuem senha"? Isto tem várias interpretações e certamente a correta depende do que se estava estudando quando o exercício foi sugerido.

Alguém que tem o campo de senha vazio é considerado sem senha? Alguém que sequer tem entrada no /etc/shadow é considerado sem senha? Alguém que teve a conta bloqueada é considerado sem senha? Estranho, porque os nomes dos usuários estão em /etc/passwd e as "senhas" no /etc/shadow. Para cada entrada no /etc/passwd deveria ter uma no /etc/shadow

De qualquer manera um laço pegando o username em /etc/passwd (com um cut -d: -f1), e depois para cada username verificando (com grep) se ele existe e se tem senha (???) em use grep para pegar o nome dele no /etc/passwd. Acredito que um grep "^${username}:" /etc/passwd | cut -d: -f5 |cut -d, -f1 deva ser suficiente (username deve ser a variável do laço).

"Fazer um script que liste todos os usuários do sistema, mostrando apenas seu primeiro nome e sem repetição de nome."

Nada como o cut semelhante ao que sugeria acima (cut -d: -f5|cut -d: -f1) o resto tu faz. Podes usar o sort ou o uniq para remover nomes duplicados.


"Fazer um script que mostre todos os parâmetros recebidos pela linha de comando e no final informe quantos parâmetros foram passados."

Este é o mais fácil de todos. Todos os parâmetros estão em $*. A quantidade deles pode ser obtida por $#


"Leia o nome de 4 arquivos e no final gere uma lista com o conteúdo dos 4 arquivos ordenados e sem repetição."

Terás que usar read para ler os nomes de cada arquivo. Para cada arquivo um sort com os devidos parâmetros, faz o trabalho completo (o próprio sort tem um parâmetro para eliminar duplicadas. Pesquise)


"Fazer um script que entro com o nome de um arquivo, um texto a ser buscado e um texto para substituir o texto buscado. O script deverá mostrar na tela um novo texto com as substituições realizadas."

Novamente usa-se read para ler as entradas. Depois o sed faz todo o trabalho: sed '/TEXTO_PROCURA/TEXTO_SUBSTITUIR/g' arquivo

"Fazer um script que receba duas datas no formato DDMMAAAA e retorne a diferença de dias entre elas."

Pegadinha. Pra fazer isto de forma precisa terias que considerar mêses de 31 dias e anos bisexto. Muito complicado na mão.

Mas podes usar o comando date para retornar a quantidade de segundos da data! O comando date "+%s" retorna a quantidade de segundo AGORA. Mas pode pedir para ele retornar a quantidade para qualquer data:

date "+%s" -d 20110510
(para o dia 10 de Maio de 20011)

Então, se tu pegar em segundos a data final, diminuir da data inicial, terá quantos segundos se passaram. Divide por 3600 e depois por 24 e terás quantos dias se passaram.

Exemplo:
DATA2="20110530" # 30 de Maio deste ano
DATA1="20110430" # 30 de Abril deste ano

SEG1="`date "+%s" -d $DATA1`"
SEG2="`date "+%s" -d $DATA2`"

SEGUNDOS=$(( $SEG2 - $SEG1 ))
DIAS=$(( $SEGUNDOS / 3600 / 24 ))

echo "De $DATA2 ate $DATA1 passaram-se $DIAS dias"

Execute o código acima e altere ele para o programa acima.


"Fazer uma função para varrer uma árvore de diretórios e listar todos os arquivos encontrados. A listagem deverá estar ordenada pelo nome do arquivo e conter, ao lado do nome do arquivo, o diretório onde ele se encontra."

Podes usar o find para isto, que já retorna o path inteiro.

A saida do find pode ser concatenada com um sed, para separar o diretorio do nome, e tudo isto passando pelo sort.

Isto pode ser feito em uma única linha de comando!
Como esta solução por linha de comando é complexa, talvez tenhas mais suecesso e alimentar um while pela saida do laço. Cada iteração do laço pode extrair o arquivo com o basename e o diretorio com dirname.

Exemplo:
PATHCOMPLETO="/usr/lixo/caca/arquivo.txt"

DIR="`dirname $PATHCOMPLETO`"
ARQUIVO="`basename $PATHCOMPLETO`"

echo "$DIR $ARQUIVO"


Se tiver dúvidas, mas que sejam DÚVIDAS pontuais, torne a me contactar. Eu te ajudo de danto o rumo.

Se queres que eu te envie alguma resposta completa de algum destes exercícios, desista. Não farei isto.

PS: Tenha a mais absoluta certeza de que gastei muito, mas MUITO mais tempo te escrevendo este tutorial do que se tivesse feito todos estes scripts e te enviado. Me seria muito menos demorado te enviar a resposta. Mas isto é contra os meus princípios.

[]'s


5. Re: Ajuda em alguns scripts [RESOLVIDO]

Tania
aluna

(usa Outra)

Enviado em 24/05/2011 - 11:24h

Olha estou com os mesmos exercicios e os mesmos problemas. Estou tentando achar uma luz no fim do tunel. Minha esperança é achar alguns exemplos na net. Se eu achar eu posto aqui.
Abraços boa sorte


6. Re: Ajuda em alguns scripts [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 24/05/2011 - 19:11h

Prezados senhores ... vou dar uma forcinha tb:

Q: Fazer uma função que receba uma string como parâmetro e imprima somente os caracteres de A até Z, maiúsculos ou minúsculos.
DICA: echo AbC3Fçp- | sed "s/[^[:alpha:]]//g"

Q: Fazer um script que liste o username e o nome completo de todos us usuários do sistema que possuam senha. Será preciso ter acesso ao arquivo “/etc/shadow”.
DICA: veja o arquivo /etc/passwd o nome das pessoas está lá

Q: Fazer um script que liste todos os usuários do sistema, mostrando apenas seu primeiro nome e sem repetição de nome
DICA: Esse eu vou quebrar o galho ein ... dai vcs podem ter ideias para resolver os outros
who | awk '{ print $1 }' | sort | uniq | while read line; do awk -F: /$line/'{ print $5 }' /etc/passwd | awk '{ print $1}'; done

Q: Fazer um script que mostre todos os parâmetros recebidos pela linha de comando e no final informe quantos parâmetros foram passados.
DICA: Use o wc

Q: Leia o nome de 4 arquivos e no final gere uma lista com o conteúdo dos 4 arquivos ordenados e sem repetição.
DICA: Veja o quebra galho ... tem sort ... tem uniq e tem um loop

Q: Fazer um script que entro com o nome de um arquivo, um texto a ser buscado e um texto para substituir o texto buscado. O script deverá mostrar na tela um novo texto com as substituições realizadas.
DICA: sed "s/abc/cde"

Q: Fazer um script que receba duas datas no formato DDMMAAAA e retorne a diferença de dias entre elas.
DICA: Procura no VOL ... em mesmo já fiz isso

Q: Fazer uma função para varrer uma árvore de diretórios e listar todos os arquivos encontrados. A listagem deverá estar ordenada pelo nome do arquivo e conter, ao lado do nome do arquivo, o diretório onde ele se encontra.
DICA: find . + sort

Boa sorte ... qq coisa vão enviando as dúvidas pontuais ... colem o que já conseguiram fazer ... ok!?!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts