prova de hoje

#!/bin/bash

echo "início"

while /bin/true
do
        echo "--------"
        echo "Valor de A: "
        read A
        if [ $A -eq 0 ] ; then
                echo "Fim de programa"
                exit
        fi
        echo "Valor de B: "
        read B
        echo "Valor de C: "
        read C
        # rejeita se for string nula
        if [ -z "$A" -o -z "$B" -o -z "$C" ] ; then
                echo "Valor inválido, nulo"
                continue
        fi
        # rejeita se valores forem iguais
        if [ $A -eq $B -a $B -eq $C ] ; then
                echo "Valores iguais não permitidos"
                continue
        fi
        # ordena
        if [ $B -gt $A ] ; then
                SWAP=$A
                A=$B
                B=$SWAP
        fi
        if [ $C -gt $B ] ; then
                SWAP=$B
                B=$C
                C=$SWAP
        fi
        if [ $B -gt $A ] ; then
                SWAP=$A
                A=$B
                B=$SWAP
        fi

        echo "Valores ordenados"
        echo "A: $A"
        echo "B: $B"
        echo "C: $C"
        echo "--------"
done
Anúncios

engraçado…

Tem umas coisas que se for parar pra pensar…

nat on $ext_if from $internal_net to ! $internal_net -> ($ext_if)

hmmm, um sinal de ->, bem intuitivo.

altq on vr0 hfsc bandwidth 128Kb queue  { dflt_out1, local1 }
queue dflt_out1 bandwidth 5% hfsc(default)
queue local1 bandwidth 95%

Show de bola, às vezes usa {}, às vezes (), bem conciso.
E pra ficar power mesmo, um natd rodando em user space. Um natd para cada interface na qual se queira fazer NAT.

Voltando agora ao título do post, uma coisa que eu acho engraçada é que mais de uma vez na lista vi gente expressando que a sintaxe do iptables é bizarra, ou exótica (em oposição ao que se usa no FreeBSD).

Sei lá, eu procuro ser mente aberta, comecei a usar BSD por ouvir falar bem, principalmente para a parte de rede. Não me arrependo de ter começado a usá-lo em algumas aplicações, isso só aumentou meu conhecimento. Mas não posso concordar sobre a afirmações sobre a sintaxe dele quando comparadas com os trechos que citei.

fork bomb shell

:(){ :|:& };:
  • :() declaração de uma função de nome :
  • :|:&
    chamada da função : com um pipe para ela mesma e em segundo plano (|:&)
  • } fechamento da declaração da função
  • : chamada da função :

Vamos escrever de uma outra forma para ficar mais fácil:

bomb(){ bomb|bomb& };bomb

ou:


bomb() {
    bomb | bomb &
}

bomb

Resultado: uma função recursiva que causa um loop de fork de processos, que pode ocasionar uso excessivo de processamento e memória causando lentidão na máquina. Assustador, uma linha de comando destruidora em alguns casos. Mas existem maneiras de prevenir este tipo de situação 🙂

SEE ALSO
    ulimit
    man -a ulimit

processando opções da linha de comando

Uma boa forma de implementar tratamento de opções fornecidas na linha de comando em shell script é usando getopts:

usage() {
    echo "Script para backup"
    echo "$(basename $0) opções"
    echo "-v verbose mode"
    echo "-a backup total"
    echo "-d backup apenas dos dados do servidor de arquivos"
    echo "-m DATABASE backup da base DATABASE do mysql"
    echo "-z DOMINIO backup do arquivo de zona do DOMINIO"
    echo "-h descrição de uso"
    exit
}

while getopts 'vadhm:z:' opcao
do
    case ${opcao} in
        v)  VERBOSE="-v"
            ;;
        a)  WHATBAK="all"
            ;;
        d)  WHATBAK="dados"
            ;;
        m)  WHATBAK="mysql"
            DBTARGET=${OPTARG}
            ;;
        z)  WHATBAK="zona"
            ZNTARGET=${OPTARG}
            ;;
        h)  usage
            ;;
        ?)  echo "Erro. Parâmetro incorreto."
            usage
            ;;
    esac
done

Na linha:
while getopts 'vadhm:z:' opcao

temos as opções que serão aceitas. Opções seguidas de : requerem argumento adicional (obtido via ${OPTARG}). E o ? trata os argumentos inválidos.

lab de redes

Excelente a aula de hoje. Protocolos ppp, x25, hdlc, lcp, ncp, cdp, configuração dos roteadores na camada 1, 2 e 3, troubleshotting para discovery da rede, opções avançadas do ping, explanação sobre problemas comuns na prática, problemas de fragmentação, TOS, …
Até passou um pouco do horário a aula, mas aulas desse nível valem a pena.

aula jaguara

Aula de Sistemas Operacionais II, sobre shell script. O professor poderia melhorar um pouco em alguns aspectos. Por um lado, em certas horas, tenta motivar ou mexer com a turma, para que o pessoal participe mais. Muito louvável. Porém, em outras horas usa de palavreado inadequado, que foge a seriedade que deveria ter. Também é comum ele dar bolas foras, falar coisa errada, e não parece muito receptivo a comentários.

Exemplos:

  • V="
  • A variável V teria um valor nulo. Mas da forma como passou no quadro, ficou parecendo que se usou apenas uma “aspas duplas”, ou seja, daria erro de sintaxe.

  • V="um quadrado com uma / atravessada"
  • Alguma dose de imaginação é requerida, para imaginar que isso ai seria um espaço em branco.

  • código ASCII do espaço
  • Segundo o professor, não saber de cor o código ASCII de certo caracter == ser pedreiro. Falou que o código era 20, mas se esqueceu de falar que era 20 em hexadecimal.

  • valores de retorno em shell
  • Pelo menos no bash, sempre soube que um valor de retorno 0 corresponde a true, e um valor diferente disso significa false. Mas na aula o professor falou que quando era true retornava 1

  • pentelho
  • A distância entre a cabeça de leitura/gravação e o prato de um HD é de “pentelhésimos”, ou menor que a largura de um pentelho.

  • udev
  • É, parece que algumas distribuições começaram a usar udev né?

  • alunos == jaguaras
  • Falou que tava tendo problemas de fechamento do horário e turmas das aulas, devido aos alunos “jaguaras” que não tinham resolvido a matricula. Na verdade, a matéria seria dividida originalmente em duas turmas. Só que a instuição de ensino com muita seriedade e competência havia escalado um professor sem domínio da matéria para uma das turmas. O professor, sabiamente, declinou em lecionar a matéria, o que forçou a união da turma em uma única. Na ausência de uma definição de horário, e sem uma declaração oficial da instituição seríssima de ensino, o aluno que não conseguir ligar sua bola de cristal e adivinhar o que está acontecendo é tratado solenemente como “jaguara”.

crase x acento grave

Crase é uma palavra grega que significa fusão. No caso, a fusão de um “a” com outro “a”. Comumente, da preposição “a” com o artigo “a”. Assim, crase é o fenômeno da língua, o fenômeno da fusão, que é assinalado com o acento grave.

Portanto a “crase“, tecnicamente, NÃO É o nome do acento. Na verdade, o acento chama-se grave.

Acento grave

Crase
Acento grave

Em aulas sobre shell script tem se o costume de se referir ao acento ` como crase, quando na verdade, tecnicamente, trata-se do acento grave.

pastas

“Diretório é do sistema
Pasta é do usuário”

ANALISTA OU GERENTE

Um homem caminha pela rua em um pequenino povoado, quando de repente percebe bem acima de sua cabeça, um balão de ar quente. No cesto desse b alão, há um senhor que lhe acena desesperadamente. Com curiosidade, ele se aproxima o máximo possível e o ouve com atenção. Por fim, o piloto consegue fazer com que o balão baixe mais um pouco, e lhe grita:

– “Desculpe, senhor, mas poderia ajudar-me? Prometi a um amigo que me encontraria com ele às duas da tarde, porém já são duas e meia e não sei onde me encontro!”.

O outro homem, com muita cortesia, respondeu:

– “Mas claro que posso ajudá-lo! Você se encontra em um balão de ar quente, flutuando a uns vinte metros acima da rua. Está a quarenta graus de latitude norte e a cinqüenta e oito graus de longitude oeste”.

O balonista escuta com atenção e depois pergunta-lhe com um sorriso:

– “Amigo, você é um analista?”

– “Sim senhor, ao seu dispor! Como conseguiu adivinhar?”

– “Porque tudo o que você me disse está tecnicamente correto, porém esta informação me é totalmente inútil, pois continuo perdido”.

O analista fica calado por alguns segundos e finalmente pergunta ao balonista:

– “E você, não seria por acaso um gerente?”

– “Sim, sou gerente de uma empresa. Como descobriu?”

– “Ah, foi muito fácil! Veja só: você não sabe onde está e nem para onde vai. Fez uma promessa da qual não tem a mínima idéia de como irá cumprir e ainda por cima espera que outra pessoa resolva o seu problema. Continua exatamente tão perdido quanto antes de me perguntar. Porém agora, por um estranho motivo, a culpa passou a ser minha!…

never delete?

Gmail antes do login:
“Lots of space
Over 2886.978371 megabytes (and counting) of free storage so you’ll never need to delete another message.”

depois de logar:

You are almost out of space for your Gmail account.
You can view our tips on reducing your email storage or purchase additional storage.

« Older entries