Amigos este exemplo eh para mostrar que esse tal de bash
eh um cara versatil e simpatico.
$ stack.sh
#!/bin/bash
# $Id:$
# Federal University of Rio de Janeiro
# Author: Ivan carlos da Silva Lopes
# Mail: lopesivan (dot) ufrj (at) gmail (dot) com
#
# License: GPL
# Language: shell script
# File: stack.sh
# Description:
#
# + Operacoes primitivas
# 1- push(s,1) incluir item na pilha, empilhar.
# 2- pop(s) exclui item no topo da pilha e retorna o item.
#
# + Operacoes adicionais
# 1- isempty(s) verificar se a pilha encontra-se vazia.
# 2- stacktop(s) retorna o item no topo da pilha.
# map <F5> :call CommentInLine(0, "#", "-", "#", " ")<cr>
# Global variables
declare -a STACK # array
declare -r SIZE_STACK=5 # read only
declare -i i=0 # integer
##############################################################################
# push(s,1) #
#----------------------------------------------------------------------------#
# Description: #
# incluir item na pilha, empilhar. #
# Input: #
# stack -- nome da pilha utilizada. #
# item -- valor adicionado na cabeca da pilha. #
# Output: #
# #
# Return: #
# #
##############################################################################
function push()
{
test ! $# -eq 2 && \
echo "Usage: push stack item" >&2 && \
exit 1
local stack=$1
local item=$2
if [[ $i == $SIZE_STACK ]]
then
echo "Stack Overflow" >&2
exit 1
fi
eval $stack[i++]=$item
}
##############################################################################
# pop(s) #
#----------------------------------------------------------------------------#
# Description: #
# exclui item no topo da pilha e retorna o item. #
# Input: #
# stack -- nome da pilha utilizada. #
# Output: #
# #
# Return: #
# item -- item removido da pilha. #
##############################################################################
function pop()
{
test ! $# -eq 1 && \
echo "Usage: pop stack" >&2 && \
exit 1
local stack=$1
if isempty
then
echo "Stack Underflow" >&2
exit 1
fi
eval unset $stack[--i]
}
##############################################################################
# isempty() #
#----------------------------------------------------------------------------#
# Description: #
# verificar se a pilha encontra-se vazia. #
# Input: #
# #
# Output: #
# #
# Return: #
# stack_empty -- boleano referente ao estado da pilha. #
##############################################################################
function isempty(){
local stack_empty=1
if [[ $i == 0 ]]
then
stack_empty=0
fi
return $stack_empty
}
function show()
{
test ! $# -eq 1 && \
echo "Usage: push stack" >&2 && \
exit 1
local stack=$1
eval echo [\${$stack[*]}]
}
##############################################################################
# ---------------------------------- main ---------------------------------- #
##############################################################################
push STACK 1
show STACK
push STACK 2
show STACK
push STACK 3
show STACK
push STACK 4
show STACK
push STACK 5
show STACK
pop STACK
show STACK
pop STACK
show STACK
pop STACK
show STACK
pop STACK
show STACK
pop STACK
show STACK
pop STACK
show STACK
exit 0 # end-of-file
--
[ ]'s
Ivan Carlos Da Silva Lopes
Engenheiro Eletronico e Computacao
UFRJ
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: [EMAIL PROTECTED]
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
Links do Yahoo! Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/
<*> Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]
<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html