quinta-feira, 10 de maio de 2007

moonwalk.sh

Hoje estou animado.

Em homenagem ao Curupira e ao Michael Jackson, fiz a primeira variação do script pes.sh. Vem mais por aí...

--------------8< corte aqui 8<--------------

#!/bin/bash
# autor: Valtoir dos Santos Jardim
# e-mail: valtoirjardim at gmail dot com
# blog: valtoir.blogspot.com
# data: 2007-05-10
# versao: 0.2
trap "clear; setterm -reset; pkill moonwalk.sh; exit" 2
while getopts "hc:" opt; do
~~~~case $opt in
~~~~~~~h) echo -e "\nUso: pes.sh -h | -c "
~~~~~~~~~~echo -e "\nParametros:"
~~~~~~~~~~echo -e " -h: Mostra essa (grande) ajuda"
~~~~~~~~~~echo -e " -c : Limpa a tela e define caractere de preenchimento"
~~~~~~~~~~echo -e "\nExemplo:"
~~~~~~~~~~echo -e " pes.sh -c#\n"
~~~~~~~~~~exit;;
~~~~~~~c) clear;
~~~~~~~~~~for i in $(seq 0 `tput lines`); do
~~~~~~~~~~~~~for w in $(seq 1 `tput cols`); do
~~~~~~~~~~~~~~~~~echo -e "$OPTARG\c"
~~~~~~~~~~~~~done;
~~~~~~~~~~~~~tput cup $i;
~~~~~~~~~~done;;
~~~~~~~?) exit -1;
~~~~esac
done
moonwalk () {
~~~~colors=(31 32 33 34 35 36 37)
~~~~signal=( + - )
~~~~setterm -cursor off -bold on
~~~~while :; do
~~~~~~~moreorless=$((RANDOM%2))
~~~~~~~color=${colors[$(($RANDOM%${#colors[*]}))]}
~~~~~~~delay=.$(((RANDOM%8)+4))
~~~~~~~left_foot=$(($RANDOM%$((`tput cols` - 12))))
~~~~~~~right_foot=$(($left_foot + 8))
~~~~~~~lines=$(($(tput lines) - 6))
~~~~~~~[ "$moreorless" == "1" ] && {
~~~~~~~~~~tput cup $((lines + 4)) $((left_foot + 3))
~~~~~~~~~~echo -e "\e[$color;1m_\c\e[m"
~~~~~~~~~~tput cup $((lines + 5)) $((left_foot + 2))
~~~~~~~~~~echo -e "\e[$color;1m/ )\c\e[m"
~~~~~~~}
~~~~~~~for line in `seq $((($lines ${signal[$moreorless]} 1))) -10 5`; do
~~~~~~~~~~sleep $delay
~~~~~~~~~~tput cup $((line++)) $((right_foot + 1))
~~~~~~~~~~echo -e "\e[$color;1m_\c\e[m"
~~~~~~~~~~tput cup $((line++)) $right_foot
~~~~~~~~~~echo -e "\e[$color;1m( \ \c\e[m"
~~~~~~~~~~tput cup $((line++)) $((right_foot + 1))
~~~~~~~~~~echo -e "\e[$color;1m) \ \c\e[m"
~~~~~~~~~~tput cup $((line++)) $right_foot
~~~~~~~~~~echo -e "\e[$color;1m( )\c\e[m"
~~~~~~~~~~tput cup $((line++)) $right_foot
~~~~~~~~~~echo -e "\e[$color;1mOooo˙\c\e[m"
~~~~~~~~~~sleep $delay
~~~~~~~~~~tput cup $((line - 10)) $((left_foot + 3))
~~~~~~~~~~echo -e "\e[$color;1m_\c\e[m"
~~~~~~~~~~tput cup $((line - 9)) $((left_foot + 2))
~~~~~~~~~~echo -e "\e[$color;1m/ )\c\e[m"
~~~~~~~~~~tput cup $((line - 8)) $((left_foot + 1))
~~~~~~~~~~echo -e "\e[$color;1m/ (\c\e[m"
~~~~~~~~~~tput cup $((line - 7)) $left_foot
~~~~~~~~~~echo -e "\e[$color;1m( )\c\e[m"
~~~~~~~~~~tput cup $((line - 6)) $left_foot
~~~~~~~~~~echo -e "\e[$color;1m˙oooO\c\e[m"
~~~~~~~done
~~~~~~~sleep $delay
~~~~~~~[ $((line -15)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 15)) $((right_foot + 1))
~~~~~~~~~~echo -e "\e[$color;1m_\c\e[m"
~~~~~~~}
~~~~~~~[ $((line -14)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 14)) $right_foot
~~~~~~~~~~echo -e "\e[$color;1m( \ \c\e[m"
~~~~~~~}
~~~~~~~[ $((line -13)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 13)) $((right_foot + 1))
~~~~~~~~~~echo -e "\e[$color;1m) \ \c\e[m"
~~~~~~~}
~~~~~~~[ $((line -12)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 12)) $right_foot
~~~~~~~~~~echo -e "\e[$color;1m( )\c\e[m"
~~~~~~~}
~~~~~~~[ $((line -11)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 11)) $right_foot
~~~~~~~~~~echo -e "\e[$color;1mOooo˙\c\e[m"
~~~~~~~}
~~~~~~~sleep $delay
~~~~~~~[ $((line -19)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 19)) $((left_foot + 2))
~~~~~~~~~~echo -e "\e[$color;1m/ )\c\e[m"
~~~~~~~}
~~~~~~~[ $((line -18)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 18)) $((left_foot + 1))
~~~~~~~~~~echo -e "\e[$color;1m/ (\c\e[m"
~~~~~~~}
~~~~~~~[ $((line -17)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 17)) $left_foot
~~~~~~~~~~echo -e "\e[$color;1m( )\c\e[m"
~~~~~~~}
~~~~~~~[ $((line -16)) -lt 0 ] || {
~~~~~~~~~~tput cup $((line - 16)) $left_foot
~~~~~~~~~~echo -e "\e[$color;1m˙oooO\c\e[m"
~~~~~~~}
~~~~done
}
moonwalk &
read -rs -n 1
setterm -reset
clear
pkill moonwalk

--------------8< corte aqui 8<--------------

pes.sh versao 0.2 :)

Agora até parece um screensaver de verdade!

Instruções no post abaixo.

--------------8< corte aqui 8<--------------

#!/bin/bash
# autor: Valtoir dos Santos Jardim
# e-mail: valtoirjardim at gmail dot com
# blog: valtoir.blogspot.com
# data: 2007-05-10
# versao: 0.2
trap "clear; setterm -reset; pkill pes.sh; exit" 2
while getopts "hc:" opt; do
~~~case $opt in
~~~~~~h) echo -e "\nUso: pes.sh -h | -c "
~~~~~~~~~echo -e "\nParametros:"
~~~~~~~~~echo -e " -h: Mostra essa (grande) ajuda"
~~~~~~~~~echo -e " -c : Limpa a tela e define caractere de preenchimento"
~~~~~~~~~echo -e "\nExemplo:"
~~~~~~~~~echo -e " pes.sh -c#\n"
~~~~~~~~~exit;;
~~~~~~c) clear;
~~~~~~~~~for i in $(seq 0 `tput lines`); do
~~~~~~~~~~~~for w in $(seq 1 `tput cols`); do
~~~~~~~~~~~~~~~~echo -e "$OPTARG\c"
~~~~~~~~~~~~done;
~~~~~~~~~~~~tput cup $i;
~~~~~~~~~done;;
~~~~~~?) exit -1;
~~~esac
done
pes () {
~~~colors=(31 32 33 34 35 36 37)
~~~signal=( + - )
~~~setterm -cursor off -bold on
~~~while :; do
~~~~~~moreorless=$((RANDOM%2))
~~~~~~color=${colors[$(($RANDOM%${#colors[*]}))]}
~~~~~~delay=.$(((RANDOM%8)+4))
~~~~~~left_foot=$(($RANDOM%$((`tput cols` - 12))))
~~~~~~right_foot=$(($left_foot + 8))
~~~~~~lines=$(($(tput lines) - 5))
~~~~~~[ "$moreorless" == "1" ] && {
~~~~~~~~~tput cup $((lines + 5)) $left_foot
~~~~~~~~~echo -e "\e[$color;1m.oooO\c\e[m"
~~~~~~}
~~~~~~for line in `seq $((($lines ${signal[$moreorless]} 1))) -10 5`; do
~~~~~~~~~sleep $delay
~~~~~~~~~tput cup $((line++)) $right_foot
~~~~~~~~~echo -e "\e[$color;1mOooo.\e[m"
~~~~~~~~~tput cup $((line++)) $right_foot
~~~~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~~~~~~~tput cup $((line++)) $((right_foot + 1))
~~~~~~~~~echo -e "\e[$color;1m) /\e[m"
~~~~~~~~~tput cup $((line++)) $right_foot
~~~~~~~~~echo -e "\e[$color;1m(_/\c\e[m"
~~~~~~~~~sleep $delay
~~~~~~~~~tput cup $((line - 9)) $left_foot
~~~~~~~~~echo -e "\e[$color;1m.oooO\e[m"
~~~~~~~~~tput cup $((line - 8)) $left_foot
~~~~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~~~~~~~tput cup $((line - 7)) $((left_foot + 1))
~~~~~~~~~echo -e "\e[$color;1m\ (\e[m"
~~~~~~~~~tput cup $((line - 6)) $((left_foot + 2))
~~~~~~~~~echo -e "\e[$color;1m\_)\e[m"
~~~~~~done
~~~~~~sleep $delay
~~~~~~[ $((line -14)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 14)) $right_foot
~~~~~~~~~echo -e "\e[$color;1mOooo.\e[m"
~~~~~~}
~~~~~~[ $((line -13)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 13)) $right_foot
~~~~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~~~~}
~~~~~~[ $((line -12)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 12)) $((right_foot + 1))
~~~~~~~~~echo -e "\e[$color;1m) /\e[m"
~~~~~~}
~~~~~~[ $((line -11)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 11)) $right_foot
~~~~~~~~~echo -e "\e[$color;1m(_/\e[m"
~~~~~~}
~~~~~~sleep $delay
~~~~~~[ $((line -18)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 18)) $left_foot
~~~~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~~~~}
~~~~~~[ $((line -17)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 17)) $((left_foot + 1))
~~~~~~~~~echo -e "\e[$color;1m\ (\e[m"
~~~~~~}
~~~~~~[ $((line -16)) -lt 0 ] || {
~~~~~~~~~tput cup $((line - 16)) $((left_foot + 2))
~~~~~~~~~echo -e "\e[$color;1m\_)\e[m"
~~~~~~}
~~~done
}
pes &
read -rs -n 1
setterm -reset
clear
pkill pes

--------------8< corte aqui 8<--------------

domingo, 6 de maio de 2007

pes.sh

Vou passar a publicar aqui alguns scripts em bash que faço. Chamei o script abaixo de pes.sh (pés). Foi feito como exercício de programação e lógica, e serve como pseudo screensaver em modo caractere.

Nota: para manter a identação, substituí os espaços em branco iniciais por til (~). Basta copiar o texto abaixo, colar num arquivo texto e (imaginado que você nomeie o arquivo com o mesmo nome que eu) executar algum terminal com bash e rodar :

sed -i 's/~/ /g' pes.sh

Isso irá substituir todos os "~" por " ". Feito isso, torne o arquivo executável:

chmod +x pes.sh

E pronto, agora é só rodar:

./pes.sh

--------------8< corte aqui 8<--------------


#!/bin/bash
# autor: Valtoir dos Santos Jardim
# e-mail: valtoirjardim_at_gmail_dot_com
# blog: valtoir.blogspot.com
# data: 2007-05-05
# versao: 0.1
trap "clear; setterm -reset; exit" 2
colors=(31 32 33 34 35 36 37)
signal=( + - )
while getopts "hc:" opt; do
~~~case $opt in
~~~~~~h) echo -e "\nUso: pes.sh -h | -c "
~~~~~~~~~echo -e "\nParametros:"
~~~~~~~~~echo -e " -h: Mostra essa (grande) ajuda"
~~~~~~~~~echo -e " -c : Limpa a tela e define caractere de preenchimento"
~~~~~~~~~echo -e "\nExemplo:"
~~~~~~~~~echo -e " pes.sh -c#\n"
~~~~~~~~~exit;;
~~~~~~c) clear;
~~~~~~~~~for i in $(seq 0 `tput lines`); do
~~~~~~~~~~~~for w in $(seq 1 `tput cols`); do
~~~~~~~~~~~~~~~~echo -e "$OPTARG\c"
~~~~~~~~~~~~done;
~~~~~~~~~~~~tput cup $i;
~~~~~~~~~done;;
~~~~~~?) exit -1;
~~~esac
done
setterm -cursor off -bold on
while :; do
~~~moreorless=$((RANDOM%2))
~~~color=${colors[$(($RANDOM%${#colors[*]}))]}
~~~delay=.$(((RANDOM%8)+4))
~~~left_foot=$(($RANDOM%$((`tput cols` - 12))))
~~~right_foot=$(($left_foot + 8))
~~~lines=$(($(tput lines) - 5))
~~~[ "$moreorless" == "1" ] && {
~~~~~~tput cup $((lines + 5)) $left_foot
~~~~~~echo -e "\e[$color;1m.oooO\c\e[m"
~~~}
~~~for line in `seq $((($lines ${signal[$moreorless]} 1))) -10 5`; do
~~~~~~sleep $delay
~~~~~~tput cup $((line++)) $right_foot
~~~~~~echo -e "\e[$color;1mOooo.\e[m"
~~~~~~tput cup $((line++)) $right_foot
~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~~~~tput cup $((line++)) $((right_foot + 1))
~~~~~~echo -e "\e[$color;1m) /\e[m"
~~~~~~tput cup $((line++)) $right_foot
~~~~~~echo -e "\e[$color;1m(_/\c\e[m"
~~~~~~sleep $delay
~~~~~~tput cup $((line - 9)) $left_foot
~~~~~~echo -e "\e[$color;1m.oooO\e[m"
~~~~~~tput cup $((line - 8)) $left_foot
~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~~~~tput cup $((line - 7)) $((left_foot + 1))
~~~~~~echo -e "\e[$color;1m\ (\e[m"
~~~~~~tput cup $((line - 6)) $((left_foot + 2))
~~~~~~echo -e "\e[$color;1m\_)\e[m"
~~~done
~~~sleep $delay
~~~[ $((line -14)) -lt 0 ] || {
~~~~~~tput cup $((line - 14)) $right_foot
~~~~~~echo -e "\e[$color;1mOooo.\e[m"
~~~}
~~~[ $((line -13)) -lt 0 ] || {
~~~~~~tput cup $((line - 13)) $right_foot
~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~}
~~~[ $((line -12)) -lt 0 ] || {
~~~~~~tput cup $((line - 12)) $((right_foot + 1))
~~~~~~echo -e "\e[$color;1m) /\e[m"
~~~}
~~~[ $((line -11)) -lt 0 ] || {
~~~~~~tput cup $((line - 11)) $right_foot
~~~~~~echo -e "\e[$color;1m(_/\e[m"
~~~}
~~~sleep $delay
~~~[ $((line -18)) -lt 0 ] || {
~~~~~~tput cup $((line - 18)) $left_foot
~~~~~~echo -e "\e[$color;1m( )\e[m"
~~~}
~~~[ $((line -17)) -lt 0 ] || {
~~~~~~tput cup $((line - 17)) $((left_foot + 1))
~~~~~~echo -e "\e[$color;1m\ (\e[m"
~~~}
~~~[ $((line -16)) -lt 0 ] || {
~~~~~~tput cup $((line - 16)) $((left_foot + 2))
~~~~~~echo -e "\e[$color;1m\_)\e[m"
~~~}
done

--------------8< corte aqui 8<--------------