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

Publicado por Leandro Santiago 13/06/2007

[ Hits: 8.984 ]

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

Configurar a rede no Debian, Kurumim e Ubuntu

Pesquisar extensao 4

media de alunos

Qual o maior número da variável RANDOM?

DNS SLAVE - Criacao de entradas


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts