Pesquisar neste blog

Mostrando postagens com marcador SHELL. Mostrar todas as postagens
Mostrando postagens com marcador SHELL. Mostrar todas as postagens

segunda-feira, 22 de julho de 2013

DICAS DO COMANDO TEST - Shell Script

O comando test serve para testar condições em shell script e neste "post" irei mostrar algumas opções desse poderoso comando.
Opções do comando test para testar arquivos.
  •  OPÇÃO          :          verdadeiros se
  1. -e                               Arquivo existe.
  2. -s                               Arquivo existe e é maior que zero.
  3. -f                               Arquivo existe e é um arquivo regular.
  4. -d                              Arquivo existe e é um diretório
  5. -nt                             O arquivo é mais recente (newer than)
  6. -ot                             O arquivo é mais antigo (older than)
  7. -ef                             O arquivo é o mesmo  (equal file)
  8. -a                              e lógico (and)
  9. -o                             ou lógico (or)
  10. -r                              Arquivo existe e tem permissão de leitura
  11. -w                            Arquivo existe e tem permissão de escrita
  12. -x                             Arquivo existe e tem permissão  de execução
Opções do comando test para testar variáveis
  • OPÇÃO          :          verdadeiros se
  1. -z                               String é nula         
  2. -n                               String não nula
  3.                                String igual
  4. !=                               String diferente
  5. -lt                               Número é menor que (less than)
  6. -gl                              Número é maior que (greater than)
  7. -le                              Número é menor igual (less equal)
  8. -ge                             Número é maior igual  (greater equal)
  9. -eq                             Número é igual (equal)
  10. -ne                             Número é diferente  (not equal)

Fonte: Technolivre

quarta-feira, 28 de março de 2012

Apagando linhas em branco

Apagando linhas em branco no vim



Essa pode ser útil para muitos, para apagar todas as linhas em branco de um arquivo aberto no vim, digite o seguinte comando no editor:

:g/^$/:delete

ou seja:
g = global, documento inteiro
^ = início de linha
$ = final de linha
PS.: o padrão ^$ significa tudo que não tem nada entre o início e final de linha
:delete = apagar a linha que casa com o padrão acima



ou

Eliminando linhas em branco



Para eliminar linhas em branco de um arquivo texto, utilize qualquer um dos comandos:

$ sed '/^$/d' arquivo.txt > novoarquivo.txt
ou
$ awk 'NF>0' arquivo.txt > novoarquivo.txt

Qualquer um dos dois comandos funciona.

quinta-feira, 1 de março de 2012

VIM - Substituindo tabs por espaços

Se você estiver precisando trocar "Tab" por espaços para identação basta fazer o seguinte:

:set tabstop=n // seta para cada tab o número n de espaços
:set expandtab // troca a tab por espaço

Note que para as tabs já existentes no código estes comandos não funcionarão, para ajustar isto basta fazer:

:retab 

Shellscript - Como converter strings maiúsculas para minusculas e vice-versa

echo 'string em caixa baixa' | tr [:lower:] [:upper:]
Caso queria converter de maiúsculo para minusculo basta fazer o processo inverso:
echo 'STRING EM CAIXA ALTA' | tr [:upper:] [:lower:]

terça-feira, 20 de dezembro de 2011

Uma Rapidinha nos Principais Sabores de Shell

Visão do shell em relação do Kernel do Linux
O Ambiente Shell
Bom já que para chegar ao núcleo do Linux, no seu kernel que é o que interessa a todo aplicativo, é necessária a filtragem do Shell, vamos entender como ele funciona de forma a tirar o máximo proveito das inúmeras facilidades que ele nos oferece.
O Linux por definição é um sistema multiusuário - não podemos nunca esquecer disto – e para permitir o acesso de determinados usuários e barrar a entrada de outros, existe um arquivo chamado /etc/passwd que além fornecer dados para esta função de "leão-de-chácara" do Linux, também provê informações para o login daqueles que passaram por esta primeira barreira. O último campo de seus registros informa ao sistema qual Shell a pessoa vai receber ao se "logar" (ARGH!!!).

Lembra que eu te falei de Shell, família, irmão? Pois é, vamos começar a entender isto: o Shell, que se vale da imagem de uma concha envolvendo o sistema operacional propriamente dito, é o nome genérico para tratar os filhos desta idéia que, ao longo dos anos de existência do sistema operacional Unix foram aparecendo. Atualmente existem diversos sabores deShell, dentre estes eu destaco o sh (Bourne Shell), o ksh (Korn Shell), bash (Bourne Again Shell) e o csh (C Shell).



Bourne Shell (sh)
Desenvolvido por Stephen Bourne da Bell Labs (da AT&T onde também foi desenvolvido o Unix), este foi durante muitos anos o Shell default do sistema operacional Unix. É também chamado de Standard Shell por ter sido durante vários anos o único e até hoje é o mais utilizado até porque ele foi portado para todos os ambientes Unix e distros Linux.


Korn Shell (ksh)
Desenvolvido por David Korn, também da Bell Labs, é um superset do sh, isto é, possui todas as facilidades do sh e a elas agregou muitas outras. A compatibilidade total com o sh vem trazendo muitos usuários e programadores de Shell para este ambiente.


Boune Again Shell (bash)
Este é o Shell mais moderno e cujo número de adeptos mais cresce em todo o mundo, seja por ser o Shell default do Linux, seu sistema operacional hospedeiro, seja por sua grande diversidade de comandos, que incorpora inclusive diversos instruções características do C Shell.


C Shell (csh)
Desenvolvido por Bill Joy da Berkley University é o Shell mais utilizado em ambientes *BSD e Xenix. A estruturação de seus comandos é bem similar à da linguagem C. Seu grande pecado foi ignorar a compatibilidade com o sh, partindo por um caminho próprio.
Além destes Shells existem outros, mas irei falar contigo somente sobre os três primeiros, tratando-os genericamente por Shell e assinalando as especificidades de cada um que porventura hajam.


Explicando o funcionamento do Shell
O Shell é o primeiro programa que você ganha ao se "logar" no Linux. É ele que vai resolver um monte de coisas de forma a não onerar o kernel com tarefas repetitivas, aliviando-o para tratar assuntos mais nobres. Como cada usuário possui o seu próprio Shell interpondo-se entre ele e o Linux, é o Shell quem interpreta os comandos que são teclados e examina as suas sintaxes, passando-os esmiuçados para execução.


    - Êpa! Esse negócio de interpreta comando não tem nada a haver com interpretador não, né?
    - Tem sim, na verdade o Shell é um interpretador (ou será intérprete) que traz consigo uma poderosa linguagem com comandos de alto nível, que permite construção de loops (laços), de tomadas de decisão e de armazenamento de valores em variáveis, como vou te mostrar.


Vou te explicar as principais tarefas que o Shell cumpre, na sua ordem de execução. Preste atenção nesta ordem porque ela é fundamental para o entendimento do resto do nosso bate papo.


Exame da Linha de Comandos
Neste exame o Shell identifica os caracteres especiais (reservados) que têm significado para interpretação da linha, logo após verifica se a linha passada é uma atribuição ou um comando.


Atribuição
Se o Shell encontra dois campos separados por um sinal de igual (=) sem espaços em branco entre eles, identifica esta seqüência como uma atribuição.




Fonte: Wiki Softwarelivre

sexta-feira, 9 de dezembro de 2011

Índice de A-Z de linhas de comando do Bash

Olá pessoal,
segue abaixo um campo de busca em um site chamado http://ss64.com/bash/ onde podemos pesquisar a sintaxe dos principais comandos do bash.

Digite aqui o nome do comando para retornar a syntax: 




segunda-feira, 24 de janeiro de 2011

Shell Script Básico

Shell script - Bash

Estrutura geral de um script Shell

Os scripts permitem construir esquemas de execução complexos a partir dos comandos básicos do shell. A forma mais elementar de arquivo de script é apenas um conjunto de comandos em um arquivo texto, com permissões de execução habilitadas.

Parâmetros de entrada

Os argumentos da linha de comando são passados para o shell através da variável local $argv. Os campos individuais dessa variável podem ser acessados como em uma variável local qualquer. Além disso, uma série de atalhos é definida para facilitar o acesso a esses parâmetros:
  • $0 : o nome do script
  • $n : o n-ésimo argumento da linha de comando
  • $* : todos os argumentos da linha de comando
  • $# : número de argumentos
  • $? : status do último comando executado (status <> 0 indica erro)
  • $$ : número de processo (PID) do shell que executa o script
Exemplo através do script listaparams:

#!/bin/bash 
# exemplo de uso dos parâmetros de entrada 
echo "Nome do script : $0"
echo "Primeiro parâmetro : $1" 
echo "Todos os parâmetros : $*" 
echo "Numero de parametros : $#" 
echo "Numero deste processo : $$" 
exit 0
Chamando o script acima com alguns parâmetros se obtém a seguinte resposta:

~> listaparams banana tomate pessego melao pera uva 
Nome do script : listaparams 
Primeiro parâmetro : banana 
Todos os parâmetros : banana tomate pessego melao pera uva 
Numero de parametros : 6 
Numero deste processo : 2215 
~>

Controle de fluxo

Existem diversos construtores de controle de fluxo que podem ser usados em scripts BASH-Shell. Os principais são descritos a seguir.

Condições

Como na maioria das linguagens, no shell Bash, testes de condições são realizados por estruturas do tipo if-then-else. As condições testadas são os status de saída da execução de comandos (o valor inteiro retornado pela chamada de sistema exit() do comando). Caso o status seja zero (0), a condição é considerada verdadeira:
if cmp $file1 $file2 >/dev/null   # testa o status do comando cmp
then
   echo "os arquivos são iguais"
else
   echo "os arquivos são distintos"
fi

Essa lógica “ao contrário” pode causar uma certa confusão aos iniciantes. Assim, para simplificar a programação de scripts, é definido um operador test condition, que também pode ser representado por [ condition ] e retorna zero (0) se a condição testada for verdadeira:

if [ $n1 -lt $n2 ]          # $n1 é menor que $n2?
then
   echo "$n1 é menor que $n2"
fi

if test $n1 -lt $n2         # $n1 é menor que $n2?
then
   echo "$n1 é menor que $n2"
fi

Os principais operadores de teste disponíveis são:
Operador if-then
if comando
then
   ... 
fi

# testa o status do comando cmp
if cmp file1 file2 >/dev/null
then
   echo "Os arquivos são iguais"
fi
Operador if-then-else
if comando
then
   ... 
else
   ...
fi

# testa a existência de $file1
if [ -e "$file1" ]
then
   echo "$file1 existe"
else
   echo "$file1 não existe"
fi
Operador if-then-elif-else
if comando 1
then
   ...
elif comando 2
then
   ...
else
   ...
fi

# compara as variáveis $n1 e $n2
if [ $n1 -lt $n2 ]
then
   echo "$n1 < $n2"
elif [ $n1 -gt $n2 ]
then
   echo "$n1 > $n2"
else
   echo "$n1 = $n2"
fi
Operador case
case variável in 
   "string1") 
      ... 
      break;; 
   "string2") 
      ... 
      break;; 
   *): 
      ... 
      break;; 
esac

case $opt in
   "-c") complete=1 ;;
   "-s") 
         short=1 ;
         name="" ;;
   *)
         echo "opção $opt desconhecida" ;
         exit 1 ;;
esac    
Os principais tipos de teste disponíveis são:
  • Comparações entre números
    • -eq : igual a
    • -ne : diferente de
    • -gt : maior que
    • -ge : maior ou igual a
    • -lt : menor que
    • -le : menor ou igual a
    • -a : AND binário (bit a bit)
    • -o : OR binário (bit a bit)
  • Comparações entre strings usando []
    • = : igual a
    • != : diferente de
    • -z : string de tamanho zero
  • Comparações entre strings usando [[]]
    • : menor ou igual a (lexicográfico)
    • >= : maior ou igual a (lexicográfico)
  • Associações entre condições
    • && : AND lógico
    • || : OR lógico
Os operadores de teste em arquivos permitem verificar propriedades de entradas no sistema de arquivos. Eles são usados na forma -op, onde op corresponde ao teste desejado. Os principais testes são:
  • e : a entrada existe
  • r : a entrada pode ser lida
  • w : a entrada pode ser escrita
  • O : o usuário é o proprietário da entrada
  • s : tem tamanho maior que zero
  • f : é um arquivo normal
  • d : é um diretório
  • L : é um link simbólico
  • b : é um dispositivo orientado a bloco
  • c : é um dispositivo orientado a caracatere
  • p : é um named pipe (fifo)
  • S : é um socket special file
  • u : tem o bit SUID habilitado
  • g : tem o bit SGID habilitado
  • G : grupo da entrada é o mesmo do proprietário
  • k : o stick bit está habilitado
  • x : a entrada pode ser executada
  • nt : Verifica se um arquivo é mais novo que outro
  • ot : Verifica se um arquivo é mais velho que outro
  • ef : Verifica se é o mesmo arquivo (link)
Eis um exemplo de uso de testes em arquivos:
arquivo='/etc/passwd' 

if [ -e $arquivo ] 
then 
   if [ -f $arquivo ] 
   then 
      if [ -r $arquivo ] 
      then 
         source $arquivo 
      else 
         echo "Nao posso ler o arquivo $arquivo"
      fi 
   else 
      echo "$arquivo não é um arquivo normal"
   fi 
else 
   echo "$arquivo não existe"
fi

Laços

Laço for
for variável in lista de valores
do 
   ... 
done

for i in *.c
do
   echo "compilando $i"
   cc -c $i
done
Laço while
while condição
do 
   ... 
done

i=0
while [ $i -lt 10 ]
do
   echo $i
   let i++
done
Operador select
select variável in lista de valores
do 
   ...
done

select f in "abacate" "pera" "uva" "banana" "morango"
do
   echo "Escolheu $f"
done
Além das estruturas acima, algumas outras podem ser usadas para executar comandos em situações específicas:
  • `comando` : substitui a expressão entre crases pelo resultado (stdout) da execução do comando. Por exemplo, a linha de comando abaixo coloca na variável arqs os nomes de arquivos retornados pelo comando find:
arqs=`find /etc -type f -iname '???'`
  • comando1; comando2; comando3 : executa seqüencialmente os comandos indicados

Operadores aritméticos

Variáveis contendo números inteiros podem ser usadas em expressões aritméticas e lógicas. A atribuição do resultado de uma expressão aritmética a uma variável pode ser feita de diversas formas. Por exemplo, as três expressões a seguir têm o mesmo efeito:
i=$((j + k))

let i=j+k

i=`expr $j + $k`
Os principais operadores aritméticos disponíveis são:
  • + - * / : aritmética básica
  • ** : potenciação
  • % : módulo (resto)
  • += -= *= /= %= : aritmética e atribuição (como em C)
  • « » : deslocamento de bits
  • «= »= : deslocamento e atribuição
  • & | : AND e OR binários
  • &= |= : AND e OR binários com atribuição
  • ! : NOT binário
  • ^ : XOR binário
  • && || : AND e OR lógicos

 
OBS:
#!/bin/bash --noprofile
# A opção --noprofile inibe a leitura dos arquivos de inicialização
# do shell, tornando o lançamento do script muito mais rápido. 
--
Fonte: Shell Script