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

 



Responder a