Funções Ni - funções para manipular listas e strings

Publicado por Leandro Santiago 13/06/2007

[ Hits: 8.082 ]

Homepage: http://leandrosan.wordpress.com

Download funcoesNI.sh




Este é um apanhado de funções que  eu fiz na esperança de que sejam úteis a alguém.

Contém 21 funções em bash-script para serem usadas para os mais diversos fins.

Espero que gostem

  



Esconder código-fonte

#!/bin/bash

### Funções NI 0.1###
# funcoesni.sh

## escritas por: Leandro Santiago da Silva
## e-mail: leandrosansilva [AT] gmail [DOT] com
## Maringá/PR - Brasil 08 de Junho de 2007

# Este arquivo tem um apanhado de funções que permitem a manipulação de strings e vetores, para serem usadas em seus bash-scripts.
# Espero que sejam úteis a alguém
# Você pode usá-las como quiser, mas desde que mantenha os créditos do autor (E, se possí­vel, se publica-las em algum lugar, site, ou coisa do gênero, me mande um e-mail, só pra eu saber mesmo ;-)). 

# ChangeLog

# Versão 0.1
# Inclusão das funções
#    V
#   F
#   Not
#   BackupVar
#   RestoreVar
#   OrdenaVetor
#   InsereFinalLista
#   UltimoDaLista
#   RemoveFinalLista
#   ListaVazia
#   RemoveInicioLista
#   PrimeiroDaLista
#   InsereInicioLista
#   SetY
#   EchoElemento
#   SetElemento
#   Str2Ar
#   Ar2Str
#   MudarChar
#   Max
#   Min


#########################

# Funçõe booleanas
# Exemplos de uso:
#
#    booleano=V ## seta booleano como verdadeiro
#   if ! $booleano
#   > then 
#   >   echo "booleano verdadeiro" 
#   > else 
#   >   echo "booleano falso"
#   > fi
#   booleano falso
#   
#   booleano=F ## Seta booleano como falso   
#   booleano=`not $booleano` ## inverto o valor lógico de booleano, que passa a ser verdadeiro
#   echo $booleano
#   V

# Função que retorna 0 (Verdadeiro)
V()
{
       return 0
}

# Função que retorna 1 (Falso)
F()
{
       return 1
}

# Função que imprime V se o valor que recebe como primeiro parâmetro é  F, e F se o dito cujo for V
Not()
{
        $1 && echo F || echo V
}

##############################################

# Funçõe que criam backups e restauram variáveis
# Exemplos de uso:
# Animal="O rato"
# echo "$Animal roeu a roupa do rei de Roma"   
# O rato roeu a roupa do rei de Roma
# BackupVar Animal # crio o backup
# Animal="A Gata"
# echo "$Animal roeu a roupa do rei de Roma"
# A Gata roeu a roupa do rei de Roma
# RestoreVar Animal # restauro o conteúdo da variável
# echo "$Animal roeu a roupa do rei de Roma"
# O rato roeu a roupa do rei de Roma


# Função que cria uma cópia de backup de uma variável simples (string).
# recebe como parâmetro o NOME da variável
BackupVar()
{
        eval $1[1]=\"\$$1\"
}

# Função que restaura uma variável que tenha sido "backupeada" pela Função BackipVar
# Recebe como parâmetro o NOME da variável
RestoreVar()
{
        eval $1='"${'$1'[1]}"'
        eval unset $1[1]
}


##################################################

## Funções referentes ao uso de vetores e listas

# Função que ordena um vetor de números inteiros
# Recebe como parâmetro somente o NOME do vetor
OrdenaVetor()
{
        eval $1'=(`echo ${'$1'[@]} | tr " " "\n" | sort -n`)'
}

# Função que insere um elemento no final de um vetor
# Recebe como parâmetros:
# 1- O NOME do vetor que receberá o elemento
# 2- O valor a ser inserido
InsereFinalLista()
{
        eval local Tamanho='${#'$1'[@]}'
        eval $1\[$Tamanho\]="$2"
}

# Função que remove um elemento de um vetor
# Recebe dois parâmetros:
# 1- O NOME do vetor
# 2- O NOME da variável que receberá o conteúdo do elemento retirado
RemoveFinalLista()
{
        eval local Tamanho='${#'$1'[@]}'
        eval $2='${'$1'['$((Tamanho-1))']}'
        eval unset $1\[$((Tamanho-1))\]
}

# Função que imprime o valor do último elemento de um vetor.
# Recebe como parâmetro o NOME do vetor 
UltimoDaLista()
{
        eval local Tamanho='${#'$1'[@]}'
        eval echo '${'$1'['$((Tamanho-1))']}'
}

# Função que retorna verdadeiro se o vetor não contém elementos
#       e falso, caso contrário
ListaVazia()
{
        eval local Tamanho='${#'$1'[@]}'
        ((Tamanho!=0)) && return 1 || return 0
}

# Função que remove um elemento do iní­cio de um vetor
# parâmetros:
# 1 - NOME do vetor que terá um elemento removido
# 2 - NOME da variável que receberá o conteúdo do elemento removido
RemoveInicioLista()
{
   eval local Tamanho='${#'$1'[@]}'
   eval $2='${'$1'[0]}'
   for ((i=0;i<Tamanho-1;i++))
   do
      eval $1[$i]='${'$1'['$((i+1))']}'
   done   
   eval unset $1[$i]
}

# Função que inprime o prieiro elemento de um vetor 
# Recebe como parâmetro o NOME do vetor
PrimeiroDaLista()
{
        eval echo '${'$1'[0]}'
}

# Função que insere um elemento no iní­cio de um vetor
# Recebe como parâmetros:
# 1- O NOME do vetor que receberá o elemento
# 2- O valor a ser inserido
InsereInicioLista()
{
   eval local Tamanho='${#'$1'[@]}'
   for ((i=Tamanho;i>0;i--))
   do
      eval $1\[$i\]='${'$1'['$((i-1))']}'
   done
   eval $1[0]=\"$2\"
}

########## Funções que emulam um vetor bidimensional ###########


# Função que recebe como parâmetros 
# 1 - Uma lista na forma elem0^elem1^elem2^...^elemN
# 2 - Um índice N 
# 3 - O Valor que será jogado no lugar de elemN 
SetY() # Lista Posição Valor
{
        local IFS='^'
        local VetorDirY=($1)
        VetorDirY[$2]="$3"
        echo ${VetorDirY[@]} | tr " " "^"
}

# Função que recebe três parâmetros
# 1 - O NOME do vetor
# 2 - O índice i 
# 3 - O indice j
# 
# E exbibe o elemento de cordenadas i j do vetor 
EchoElemento() # NomeVetor posX posY
{

        eval local ElemSemEsp=\`echo '${'$1'['$2']} | cut -f'"$(($3+1))"' -d^ | tr "_" " "'\`
        echo $ElemSemEsp
}

# Função que recebe quatro parâmetros:
# 1 - Nome do vetor
# 2 - íncide i
# 3 - indice j
# 4 - Valor
# E atribui ao elemento de coordenada [i,j] do vetor de Valor
SetElemento() # NomeVetor posX posY valor
{
        local ElemSemEsp=`echo $4 | tr " " "_"`
        eval $1[$2]='"`'SetY \"'${'$1'['$2']}'\" \"$3\" \"$ElemSemEsp\"'`"'
}


############# Conversores de vetores e strings ##############################
# Converte uma string num vetor (Cada letra vira um elemento)
# parâmetros:
# 1 - Uma string
# 2 - O NOME de um vetor que receberá 
Str2Ar() # "string" <nome vetor>
{
        local EXP="$1"
        local TAM=${#EXP}
        for ((i=0;i<TAM;i++))
        do
                eval $2[$i]=\""${EXP:$i:1}"\"
        done
}

# Converte um vetor numa string, 
# Recebe como parâmetros:
# 1 - O nome do vetor
# E imprime a string correspondente
Ar2Str() # <nome vetor>
{
        local STRING
        eval local TAM='${#'$1'[@]}'
        for ((i=0;i<TAM;i++))
        do
                eval STRING=\"${STRING}'${'$1'['$i']}'\"
        done
        echo $STRING
}

# Função que recebe como parâmetros:
# 1 - Uma string
# 2 - Um índice
# 3 - Um caractere 
# E imprime a string, mas com o caractere recebido no lugar do de índice recebido 
MudarChar() # "string" indice novocaractere
{
        local ArrAux
        Str2Ar "$1" ArrAux
        ArrAux[$2]="$3"
        Ar2Str ArrAux
}


################ Funções Max e Min #################################

# Função que recebe como parâmetros uma lista de números inteiros e imprime na tela o maor deles
# Exemplo de uso:
# Max 2 5 8 9 20 987 56 30 986
# 987
Max()
{
   local Entrada=($@)
   local Maior=${Entrada[0]}
   for ((i=1;i<${#Entrada[@]};i++))
   do
      ((Entrada[i]>Maior)) && ((Maior=Entrada[i]))
   done
   echo $Maior
}

# Função que recebe como parâmetros uma lista de números inteiros e imprime na tela o menor deles
# Exemplo de uso:
# Min 5 2 8 9 20 987 56 30 986
# 2
Min()
{
   local Entrada=($@)
   local Menor=${Entrada[0]}
   for ((i=1;i<${#Entrada[@]};i++))
   do
      ((Entrada[i]<Menor)) && ((Menor=Entrada[i]))
   done
   echo $Menor
}

Scripts recomendados

Agenda de telefone em Shell usando Dialog

Alterando imagem do Grub no Ubuntu 10.04

Instalador Automático de ZoneMinder em Ubuntu

Limpar bibliotecas não utilizadas

Bloquear contas em servidor Zimbra após 45 dias


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts