Arquivos de Tags: Shellscript

[Bash] Aprendendo a usar o bc + conversor de base

Segue abaixo o src de algumas funções que estava trabalhando hoje a tarde, elas efetuam a conversão de bases, como decimal para binário, octal para hexadecimal. Utilizei a “calculadora” bc para efetuar as conversões.

Não vou entrar muito nos detalhes sobre as funções. Só precisa compreender o funcionamento do bc. No caso pegaremos como exemplo a primeira função a bin2hex.

Utilizei as “” ao chama o bc de calculadora, pois o bc e bem mais que uma calculadora e um linguagem de programação (sim ele tem suporte a for, if-else, funções). Não vou entrar agora no por menores do bc, isso fica para um artigo no futuro. O bc possui algumas variáveis padrões ou especiais (como preferir), como por exemplo: ibase, obase, scala.

Para realizamos uma operação matemática com o bc basta jogar uma string contendo a operação para ele. por exemplo:

$ echo "2+2" | bc

Opa então se posso jogar uma string que ele resolve então é bem fácil de usar!

Lembram que falei agora pouco sobre as variáveis especiais que ele trabalha? Pois é delas iremos precisar somente de 2 a ibase e obase.

  • Na ibase, você define a base da entrada (por isso o i no inicio da variável, i vem de input significa entrada em inglês) ou seja se os números inseridos serão na base 10 (decimal), 2 (binária) e etc.
  • Na obase, você define a base da saída da operação, por exemplo se você deseja que o resultado da operação 2 + 2 não seja dado em base 10, seja dado em binário, então vai utilizar essa variável.

Então se resolvemos uma operação fazendo um echo “2+2″ | bc podemos setar a variáveis especiais via echo também! Por exemplo:

$ echo "ibase=16" | bc

Viram como e simples trabalhar com o bc? Agora que conhece o minimo dele podemos prosseguir. Existe outra forma de utilizar o bc, e atrás do próprio bc! Executando o bc temos acesso ao seu shell. O funcionamento dele não tem mistério basta digitar 1+1 e pressionar enter que ele vai jogar a resposta da operação na linha seguinte.

Opa temos algo interessante agora, se precisamos pressionar enter então precisamos jogar um \n pelo echo para o bc entender o comando passado. O echo já faz isso naturalmente, por default (padrão) ele salta uma linha ou seja u ultimo caractere que o echo escreve e um \n.

Se explorar mais um pouco o bc, vai perceber que as variáveis especiais precisam ser setadas um por linha! Então quando formos usá-las precisamos colocar somente uma por linha. Como fazemos isso pelo echo? Simples! Usamos o parâmetro -e do echo, ele permite que o echo utilize caracteres de controle como \t, \n, \r e etc.

Então vai ficar assim o echo:

$ echo -e "ibase=$ENTRADA\nobase=$SAIDA"

Setando ENTRADA=1 e SAIDA=2 teremos a seguinte saída:

v0rtex@0fx66:~/Source/shellscript$ ENTRADA=1
v0rtex@0fx66:~/Source/shellscript$ SAIDA=2
v0rtex@0fx66:~/Source/shellscript$ echo -e "ibase=$ENTRADA\nobase=$SAIDA"
ibase=1
obase=2

v0rtex@0fx66:~/Source/shellscript$ ENTRADA=10
v0rtex@0fx66:~/Source/shellscript$ SAIDA=2
v0rtex@0fx66:~/Source/shellscript$ VAR=30
v0rtex@0fx66:~/Source/shellscript$ echo -e "ibase=$ENTRADA\nobase=$SAIDA\n$VAR"
ibase=10
obase=2
30

Viram o resultado echo: Então agora que ele está bonito e o melhor de tudo no formato certo só joga a saída dele no bc.

v0rtex@0fx66:~/Source/shellscript$ ENTRADA=10
v0rtex@0fx66:~/Source/shellscript$ SAIDA=2
v0rtex@0fx66:~/Source/shellscript$ VAR=30
v0rtex@0fx66:~/Source/shellscript$ echo -e "ibase=$ENTRADA\nobase=$SAIDA\n$VAR"
ibase=10
obase=2
30
v0rtex@0fx66:~/Source/shellscript$ echo -e "ibase=$ENTRADA\nobase=$SAIDA\n$VAR" | bc
11110

Pronto, agora só usar a criatividade, eu transportei isso para um pequeno script.

 

########################
## CONVERSAO DE BASE  ##
########################

# bin2hex - Converte binario para hexadecimal.
function bin2hex () {
	echo -e "obase=16\nibase=2\n$1" | bc
}

# bin2dec - Converte binario para decimal.
function bin2dec() {
	echo -e "obase=10\nibase=2\n$1" | bc
}

# bin2oct - Converte binario para octal.
function bin2oct () {
	echo -e "obase=8\nibase=2\n$1" | bc
}

# dec2bin - Converte decimal para binario.
function dec2bin () {
	echo -e "obase=2\nibase=10\n$1" | bc
}

# dec2oct -Converte decimal para octal.
function dec2oct () {
	echo -e "obase=8\nibase=10\n$1" | bc
}	

# dec2hex - Converte de decimal para hexadecimal
function dec2hex () {
	echo -e "obase=16\nibase=10\n$1" | bc
}

# oct2bin - Converte octal para binario.
function oct2bin () {
	echo -e "obase=2\nibase=8\n$1" | bc
}

# oct2dec - Converte octal para decimal.
function oct2dec () {
	echo -e "obase=8\nibase=10\n$1" | bc
}

# oct2hex - Converte octal para hexadecimal.
function oct2hex () {
	echo -e "obase=8\nibase=16\n$1" | bc
}

# hex2bin - Converte hexadecimal para binario.
function hex2bin () {
	echo -e "obase=16\nibase=2\n$1" | bc
}

# hex2oct - Converte hexadecimal para octal.
function hex2oct () {
	echo -e "obase=16\nibase=8\n$1" | bc
}

# hex2dec - Converte hexadecimal para decimal.
function hex2dec() {
	echo -e "obase=16\nibase=10\n$1" | bc
}

Poderia otimizar o uso das funções passando a base original e a resultando por parâmetros, mas preferi dessa forma, não sei por que, mas achei mais divertido assim e melhor para praticar a sintaxe do bc + echo.

Bom por hoje e só pessoal, bom final de semana e excelentes estudos. É lembre-se o shell é poder!

[Bash] Portscan

Segue abaixo o source de um portscan escrito em shellscript :)

Resumo do funcionamento: Ele simplesmente se conecta a cada porta do ip informado, envia um pacote tcp naquela porta e aguarda resposta (da mesma forma que um portscan feito com o netcat), logo em seguida se a porta estiver aberta ele salva ela no arquivo open.txt, e no final do portscan ele exibi uma lista com as portas abertas.

#!/bin/bash
# [portscan.sh]
# Portscan escrito em shellscript. Requer bash 4.0
#

if [ $1 -z ]
then
        echo -e "Erro!!!\nUse:\nportScan IP"
else 

        # Info do host
        HOST=$1

        # Porta minima
        MIN=1

        # Porta maxima
        MAX=1024

        # Armazena as portas abertas
        FILE=open.txt
        echo "Resultado do portscan" > open.txt

        port=$MIN

        while [ $port -le $MAX ]
        do
            echo teste > /dev/tcp/${HOST}/${port}
            [ "$?" = "0" ] && echo ${port} está aberta. >> $FILE

            let port++
        done
        clear
        cat open.txt
fi

É ainda tem gente que não respeita um bom shell :p
[]‘s

[Bash] Efeito matrix no bash

Abre o seu bash e execute o comando:

echo -e "\e[1;40m" ; clear ; while :; do echo $LINES $COLUMNS $(( $RANDOM % $COLUMNS)) $(( $RANDOM % 72 )) ;sleep 0.05; done|gawk '{ letters="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@#$%^&*()"; c=$4; letter=substr(letters,c,1);a[$3]=0;for (x in a) {o=a[x];a[x]=a[x]+1; printf "\033[%s;%sH\033[2;32m%s",o,x,letter; printf "\033[%s;%sH\033[1;37m%s\033[0;0H",a[x],x,letter;if (a[x] >= $1) { a[x]=0; } }}'

É ainda tem gente que acha shellscript inútil…

[Shellscript] Converter strings maiúsculas para minusculas e vice-versa

Podemos converter facilmente uma string minuscula para maiúscula e vice-versa com o poderoso shellscript, utilizando o comando tr:

echo 'string em caixa baixa' | tr [:lower:] [:upper:]

Caso queria converter de maiúsculo para minusculo basta fazer o processo inverso:

echo 'STRING EM CAIXA ALTA' | tr [:upper:] [:lower:]

O poder do shell :)

[]‘s

 

 

[Shellscript]Verificando se o usuário e root

Se existe uma linguagem de scripts que gosto muito e shellscript, sempre me facilitando a vida. O script abaixo e bastante simples, mas muito útil, se bem usado.

#!/bin/bash
# Script que verifica se o usuario e o root.
if [ "$(id -u)" != "0" ]; then
echo
echo "Voce deve executar este script como root! "
else
echo "O usuario esta logado com o root."
fi

Boa sorte e bons estudos.

[]‘s

Pagina 1 of 3123
SEO Powered by Platinum SEO from Techblissonline