1 - Sobre o bash | ||||
2 - Caracteres | ||||
3 - Funções | ||||
4 - Variáveis | ||||
5 - Controle de Fluxo | (case, | goto, | if e | onintr) |
6 - Laços | (for e | while) | ||
7 - Exemplos Diversos | ||||
8 - Exemplos comando Dialog | ||||
9 - Comentarios |
Estarei usando a notação do Emacs:
C-a significa "segure a tecla Ctrl e aperte a tecla a"
M-a significa "Use a tecla Meta junto com a tecla a", em que a
tecla Meta pode ser o Alt da esquerda, a tecla de função do windows ao lado
dela ou o Esc (nesse último caso, não é preciso manter o Esc apertado
enquanto se aperta o "a", basta apertar o Esc e em seguida o "a"). A tecla
que responde pela Meta varia com cada configuração de teclado.
Além disso, estou assumindo uma configuração padrão do bash. Há
configurações alternativas e configurações customizadas podem ser feitas no
arquivo ~/.inputrc . Para mais informações, man bash .
C-a : Ir para o começo da linha
C-e : Ir para o final da linha
M-f : Andar com o cursor uma palavra para a frente
M-b : Andar com o cursor uma palavra para a trás
C-w : Apagar do cursor até o começo da palavra
C-u : Apagar do cursor até o começo da linha
C-k : Apagar do cursos até o final da linha
C-y : Re-inserir o último trecho apagado com C-u, C-k ou C-w
C-d : Apaga o caracter sob o cursor (como o "Delete", no DOS e em algumas
configurações de teclado no Linux)
C-h : Apaga o caracter anterior ao cursor. Era o comportamento padrão da
tecla Delete, até não muito tempo atrás.
C-t : Inverte o caracter sob o cursor e o imediatamente anterior a ele
(Para, por exemplo, quando você digitar "celar" ao invés de "clear")
C-r : Faz busca incremental para trás no histórico de comandos.
Durante uma busca incremental, para se executar o comando exibido na
linha, basta usar Enter. Para simplesmente deixar a linha pronta para
execução ou edição, use Esc. Para cancelar a busca sem utilizar a
linha que estiver na tela, use C-g.
Fonte: http://www.onlinux.com.br/dicas/dicasinformatica/atalhos.htm
----------------------------------------------------------------------------
Para coloca um comentario use /* texto */ ou preceda o texto por #
O Shell utiliza os caracteres abaixo para proteger simbolos que tem significado especial
♦ Aspas ("...")
♦ Apostrofe (`...`)
♦ Barra invertida (/)
Os caracteres > < # * ? & | ( ) ] ^ ' ' mais o newline e tabs perderao seu significado
especial quando envolvidos por aspas duplas ou precedidos da barra invertida
A barra invertida (\), o dolar ($) e o acento grave (`) sao interpretados mesmo entre
aspas duplas, nao perdendo seu significado especial dentro do shell.
Apostrofes removem o significado especial de $, ` e \.
A barra invertida remove o significado especial de qualquer caracter
Se informar a opcao -x o shell mostra cada instrucao precedida por um sinal "+"
antes de executa-la. sh -x script.src
Para chamar a funcao dentro do sctript basta chamar: ver_data
ver_data()
{
date
}
Para obter o numero de parametros utilize $?
Para obter o valor dos parametros utilize de $1 ate $9
O comando set pode ser utilizado para definir variaveis de comando: $1,$2,$3 etc.
Para definir essas variaveis a todos os nomes de arquivo no diretorio corrente, use
o seguinte comando: set - *
Ou set - "novo valor para $1" "novo valor para $2" Veja exemplo de utilização deste recurso
Veja no script abaixo um exemplo de atribuição com set -
Suponha que haja o arquivo ver_usuario.sh em uma pasta e executo o comando:
ls -l ver_usuario.sh
Que mostrou o seguinte resultado:
-rwxrwxrwx 1 bira sercon 181 Jan 13 2004 ver_usuario.sh
Suponha que o script abaixo esteja salvo no linux com o nome de llb e com permissão de execução e você digite:
llb ver_usuario.sh
#!/bin/bash
# Script para testar o comando set atribuindo valores a variaveis do shell
# e passa os campos do comando ls -ldh para as variaveis $1 a $9
# urs.bira (urs.bira@uol.com.br)
if [ $# -eq 0 ] # Verifica se forneceu um nome de arquivo
then
printf "\n\tForneca um nome de arquivo para a ser listado\n"
printf "\tSintaxe: `basename $0` nome_arquivo\n\n"
else
if [ -e $1 ] # Verifica se o arquivo existe
then
set - `ls -ldh $1` # d para listar diretorios como arquivo
printf "\nPermissao: ${1}\n"
printf "Link : ${2}\n"
printf "Dono : ${3}\n"
printf "Grupo : ${4}\n"
printf "Tamanho : ${5}\n"
printf "Mes : ${6}\n"
printf "Dia : ${7}\n"
printf "Ano ou H : ${8}\n"
printf "Nome : ${9}\n\n"
else
printf "\n\tArquivo $1 nao localizado!\n\n"
fi
fi
O script acima salvo como llb e com permissão de execução quando executado:
llb ver_usuario.sh
Apresentara o seguinte texto:
Permissao: -rwxrwxrwx
Link : 1
Dia : 13
Mes : Jan
Ano ou H : 2004
Dono : bira
Grupo : sercon
Tamanho : 181
Nome : ver_usuario.sh
Use $* e $@ quando uma procedure do Shell chamar outra com a lista de argumento. As duas sao quase identicas, exceto como elas passam os argumentos. $* passa todos os argumentos ao comando receptor como um unico argumento out.src "$*" e o mesmo que rm "arq1 arq2 arq3" $1 seria "arq1 arq2 arq3" out.src "$@" e o mesmo que rm "arq1" "arq2" "arq3" $1="arq1" $2="arq2" e $3="arq3"scritp.src -a arq1 arq3 arq5
$0 $1 $2 $3 $4 # Testar em um programa shell que espera um unico argumento # alem de verificar um arquivo validoif [ $# -eq 1 ] Se o numero de argumentos for igual a 1 then if [ -f $1 ] se o argumento 1 for um arquivo e tiver texto then more $1 else echo "$1 arquivo invalido" fi else echo "sintaxe de $0:$0 arquivo" fi
Se o usuario colocar as opcoes como -abct que seriam -a -b -c -t o comando especial getopt pode analisar $* e separar os sinalizadores. Para usar getopt basta resetar os parametros posicionais do Shell, $*, fornecendo uma cadeia de opcoes: set `getopt abct $*` Quando os parametros tiverem sido resetados usando getopt, um programa com mais de um argumentos podera usar a construcao CASE para cuidar das edicoes de argumentos: case $# in 0) #nenhum argumento echo "Entre argumento 1" read arg1 echo "Entre argumento 2" read arg2 ;; 2) arg1=$1 arg2=$2 ;; *) echo "sintaxe de $0:$0 arg1 arg2" ;; esac Quando um scritp esperar uma serie de opcoes, nomes de arquivos ou outros. As opcoes devem ser separadas dos argumentos restantes: while [ `echo $1 | cut -c1` = "-" ] do case $1 in -a|-b|-c) opcoes="${opcoes}$1" ;; *) echo "$1 nao e uma opcao valida" ;; esac shift doneObervações: Se um arquivo existir e puder ser lido, o resultado sera verdadeiro(0) if [ -r nomearq ] then echo "arquivo existe" else echo "arquivo não existe" fi
#Pode-se testar se um parametro possui um valor e tomar uma ação if [ "$PATH" ] then echo $PATH else echo "Nenhum caminho especificado" fi
Observações sobre test e retorno do Shel sobre a execução de um comando:
test, com qualquer outro comando do Shell, sempre retorna um valor verdadeiro (0) ou falso(1) na variável do Shell $?. Todos os comandos do Shell devem retornar um zero(0) quando tiverem sucesso e um valor não-zero (geralmente 1 ou -1) quando falharem.
Quando a comparação contiver pelo menos uma cadeia, e coveniente colocar todas entre aspas, com isso se uma for nula, o comando test tera como avaliar a comparação. Ex.: test "${variável}" = "xyz"
No Shell Bourne pode-se delimitar as condições com colchetes if [ -r arquivo ] No Shell C usa parenteses : if ( -r arquivo ) thenPara usar o shell como editor até que a palavra fim seja digitada no inicio de uma linha seguido ENTER: > documento.txt >> fim
Voce pode especificar um valor default para uma variavel Veja o caso abaixo: cd $temp rm -rf * Se $temp nao tiver valor, o Shell passara para $HOME e removera todos os seus arquivos. Isso poderia ser evitado usando um valor default de /tmp cd ${temp:=/tmp} rm -rf * que removeria somente os arquivos em /tmp if [-d ${dirdoc:=/oracle/dat0/tmp} Neste exemplo o Shell verifica se dirdoc tem valor se tiver ele usa; caso contrario ele usa /oracle/dat0/tmp.
#Exemplo de script que trata argumentos status_edic=TRUE for arg in $* do case ${arg} -a) processa opcao -a ;; -k) processa opcao -k ;; *) if [`echo ${arg} cut -c1` = `-` then echo "Opcao: ${arg}, invalida" status_edic=FALSE elif [ -f ${arg}] then processa ${arg} else echo "Nome de arquivo ${arg} Invalido" fi esac done exit ${staus_edic}
#!/bin/bash
tput clear
HOJE=`date +%d/%m`
case $HOJE in
01/01) echo Confraternização universal ;;
07/01) echo Finalizacao do processo ;;
24/06) echo Sao Joao ;;
07/09) echo Independencia ;;
15/11) echo Procl. Republica ;;
25/12) echo Natal ;;
*) echo hoje e um dia como qualquer outro ;;
esac
Veja abaixo o mesmo script acima escrito sem o case
#!/bin/bash
tput clear
HOJE=`date +%d/%m`
cat $0 | grep ${HOJE}
#DD/MM/AAAA Texto do acontecimento
#01/01 Confraternizacao universal
#15/01 Dia 15 de janeiro
#07/01 Finalizacao do processo
#24/06 Sao Joao
#07/09 Independencia
#15/11 Procl. Republica
#25/12 Natal
#Exemplos 01 trap "exit" 1 2 3 case $LOGNAME in root) echo "superusuario" PS1="Superusuario" sleep 2 ;; bira) echo "usuario Sercon" ;; esac Para ver a tabela com todos os valores de trap clique aqui
#Exemplos 02 case $data_atual in 01|Jan|Janeiro) clear echo "Janeiro" ;; Em linguagem C seria: switch ($data_atual) case "01":case "Jan":case"Janeiro": clear echo "Janeiro" breaksw endsw #Exemplos 03 case $LOGNAME in root) COBSW=-N-v+b1+P3+K-F cobrun serc00 `tty` 2>>.erro ;; bira) COBSW=-N-v+b1+P3+K cobrun srcn `tty` 2>>.erro ;; esac
#Exemplo 4 mes_atual=`date + '%m'` case ${mes_atual} in 01) comandos de janeiro ;; 02) comandos de fevereiro ;; . . 12) comandos de dezembro ;; *) echo "Ocorreu um erro de definicao do mes" ;; esac #Exemplo 5 case ${mes_atual} in 01|Jan|Janeiro) Comandos de janeiro ;; 02|Fev|Fevereiro Comandos de fevereiro ;; ... esac
#Exemplo do uso do if a=5 if ((a>0)) && ((a<=10)) then echo "A é maior que zero e menor ou igual que 10" fi Fonte: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5867&pagina=2
#Funcao : Localiza o texto informado na linha de comando no arquivo especificado tput clear # Este primeiro if verifica se foram informados no mínimo dois argumentos if [ $# -lt 2 ] then printf "\t\t\n\nSintaxe : palavara_local palavra_a_procurar arquivo_a_procurar\n\n" else # Este segundo if verifica se o arquivo (segundo argumento) existe e é legivel. if [ -r ${2} ] then resulta=`cat ${2} | sed -n '/'${1}'/p'` printf "A palavra pesquisada ${resulta} foi encontrada no arquivo ${2}\n\n" else printf "\t\t\n\nErro: o arquivo ${2} nao existe\n\n" fi fi
#Exemplo 01 # Este programa conta de 1 a 8 # for var_num in 1 2 3 4 5 6 7 8 do echo $var_num onintr termino done #label para tratamento do erro termino: echo "Processo interrompido pelo usuario" exit
#Uso do for com comando continue for myloop in 1 2 3 4 5 do if [ "$myloop" -eq 3 ] then continue # Skip rest of this particular loop iteration. fi echo -n "$myloop" done
#Exemplo de uso do for
for((i=1; i <= 100; i++));
do
echo "$i"
done
#Outro exemplo de uso do for
for ((var=1;var<10;var++))
do
echo $var
done
Fonte: http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=5867&pagina=2
#Exemplo 01 #Este programa conta de 1 a 6 # for var_num in 1 2 3 4 5 6 do echo $var_num done
#Exemplo 02 for i in `dosls a:` do doscp a:$i . done
#Exemplo 03 for i in * do nometmp = `echo $i | tr "[A-Z]" "[a-z]"` clear echo -ne "$i =>> $nometmp" mv $i $nometmp done
#Exemplo 04 # Procura uma palavra dentro de um texto for a in `cat bira.txt` do echo "$a" if [ $a = "positivo" ] then echo "encontrada palavra positivo" fi done
#Exemplo 05 # edita todos os arquivos bira* e substitue "menu" por "Menu" for arquivo in bira* do ed -${arquivo} <eof! g/menu/s//Menu/g w q eof! done
#Exemplo 06 # edita todos os arquivos bira* e substitue "menu" por "Menu" # Igual ao anterior so que o nome dos arquivos sao diferentes for arquivo in bira01.txt diana02.txt ivan03.txt do ed -${arquivo} <eof! g/menu/s//Menu/g w q eof! done
#Exemplo 07 #Processa comandos em varios diretorios for dir /oracle/prg/new /oracle/prg/sps /oracle/prg/out do cd ${dir} for programa in *.int do if [ -f ${programa} ] then chmod 666 ${programa} fi done cd .. done
i=1
while [ i -le 100 ]; do
echo "$i"
done
#Modelo de laco infinito while [ 1 ] do processa algo... done
#Modelo de laco com opcao de finalizacao while [ 1 ] do if [ condicao de fim ] then break else processar algo... fi done
#Modelo onde o processamento podera continuar sem processar nada while [ 1 ] do echo "Digite o nome do arquivo" read n_arq if [ -r ${n_arq} ] then processa ${n_arq} else continue fi echo "Processando arquivo ${n_arq}" done
#Comando while testando nomes de variaveis e arquivos while [ "${var}" = "dado01" ] do processa ${var} done
#Contar ate 10 a=0 while [ ${a} -lt 10 ] do echo "O valor de a e $a" a=`expr $a + 1` done echo `fim do loop.` #Comando while testando nomes de variaveis e arquivos ls | = while rear arq do processa ${arq} done
#Exemplo 01 # Este script conta de 10 a 1 # var_num = 10 while [ "$var_num" -gt 0 ] do echo $var_num expr $var_num - 1 done
#Exemplo 02 count=0 while true do count=`expr "$count" + 1` tput cup 10 10 echo $count if test "$count" -gt 5 then break else sleep 1 fi done
# Exemplo 03 #Um loop ate que voce digite CTRL P ou C ou K while true do who -u sleep 2 clear done
#Exemplo 04 #Script com menu de opcoes while true do clear echo "Menu Geral 1) Backup Diario 2) Encerra Digite Opcao:\c" read o case $o in 1) clear echo "iniciar backup" tar -cv /sercon/dat0/arq/* ;; 2) clear echo "Fim de script" exit ;; *) clear echo "Opcao invalida. Digite ENTER\c" read inv ;; esac done
!/bin/bash # urs.bira@uol.com.br # Verifica se a pasta corrente ou o nome fornecido e uma pasta e se esta vazia tam=0 # Verifica se foi passado algum nome de pasta if [ ${1}x = x ] then # Se nao forneceu um nome de pasta assume que a pasta e . set - "." fi # Verifica se o nome passado realmente e uma pasta if [ -d ${1} ] then # Conta quantos arquivos ha na pasta eliminando o . e o .. tam=`ls -la ${1}| tail +4 | wc -l` # Verifica se a quantidade de arquivos encontrados e igual a zero if [ ${tam} -eq 0 ] then # Os caracteres \" sao para poder o nome da pasta ficar entre aspas printf "\n\t\tA pasta \"${1}\" esta vazia\n" else printf "\n\t\tA pasta \"${1}\" esta cheia\n" fi else printf "\n\t\t\"${1}\" nao e uma pasta\n" fi
#!/bin/bash # Verifica diretorio if [ -d ${1} ] then echo "E um diretorio" lista=`ls -la $1 | tail +4 | wc -l` if [ ${lista} -eq 0 ] then echo "E esta vazio" else echo "E nao esta vazio" fi else echo "Nao e um diretorio" fi
#!/bin/bash #Lista os arquivos da pasta mostrando os nomes como estao e em minusculo # depois pergunta se deseja renomear de maiusculo para minusculo # urs.bira@uol.com.br tput clear # For para listar os nomes como estao e em minusculo for i in * do [ -r ${i} ] && printf "${i}\t\t\t" ; echo ${i} | tr [A-Z] [a-z] done resp="S" printf "\n\tDeseja renomear os nomes MAIUSCULOS para minusculos [s/n] ? " read -n1 resp # Testa se respondeu s ou S if [ "${resp}x" = "sx" -o "${resp}x" = "Sx" ] then # For para renomear os arquivos for i in * do # Guarda o nome minusculo para depois testar se ele ja existe nnome=`echo ${i} | tr '[A-Z]' '[a-z]'` # Testa se o nome em minusculo nao existe if [ ! -r ${nnome} ] then mv -i $i `echo ${i} | tr '[A-Z]' '[a-z]'` fi done fi printf "\n\tFim\n"
#!/bin/bash #Mata todos os processos do usuarios informado como parametro na linha de comando #urs.bira@uol.com.br #--------------------------------------------------------------------- tput clear if [ ${1}x = x ] then printf "\n\n\tSintaxe:$0 nome_do_usuario\n\n" else if test "${1}" = "root" then printf "\n\t\tEste script nao permite matar processos do root!\n" else printf "Matar processo(s):\n" ; ps -aux | grep ^${1} | tr -s " " | cut -d " " -f1,2,7,11 kill -9 `ps -aux | grep ^${1} | tr -s " " | cut -d " " -f2` fi fi
!/bin/bash # Exemplo 2 de utilizacao do select # urs.bira@uol.com.br tput clear select item in Ler Processar Parar do if [ ${item} = "Ler" ] ; then tput cup 10 20 printf "\n\n\t\tAguarde! Ler Dados. \n\n" tput cup 3 0 fi if [ ${item} = "Processar" ] ; then tput cup 10 20 printf "\n\n\t\tAguarde processar dados!\n\n" tput cup 3 0 fi if [ ${item} = "Parar" ] ; then tput cup 10 20 printf "\n\n\t\tProcesso Interrompido! \n\n" break fi done
#!/bin/sh # Cria um menu de opcoes para escolher entre os arquivos presentes na # Pasta corrente # Fonte: http://www.pragana.net/sysadmin/cap14.html select FNAME in `ls` do cat $FNAME done exit
#!/bin/bash # 28/10/207 14:03 (urs.bira@uol.com.br) # Converte do comando cal as abreviacoes dos dias da semans e os nomes dos mestes # para o portugues # Sintaxe igual a do cal # calptbr Mostra co calendario do mes corrente # calptbr -3 Mostra o mes anterior o atual e o posterior # calptbr 2007 mostrara o calendario de 2007 em gregoriano # calptbr -j 2007 Mostrara o calendario de 2007 em juliano cal ${1} ${2} ${3} | sed -e 's/Sun/Dom/g' \ | sed -e 's/Mon/Seg/g' \ | sed -e 's/Tue/Ter/g' \ | sed -e 's/Wed/Qua/g' \ | sed -e 's/Thu/Qui/g' \ | sed -e 's/Fri/Sex/g' \ | sed -e 's/Sat/Sab/g' \ | sed -e 's/Su/Do/g' \ | sed -e 's/Mo/Se/g' \ | sed -e 's/Tu/Te/g' \ | sed -e 's/We/Qu/g' \ | sed -e 's/Th/Qu/g' \ | sed -e 's/Fr/Se/g' \ | sed -e 's/Sa/Sa/g' \ | sed -e 's/January/Janeiro/g' \ | sed -e 's/February/Fevereiro/g' \ | sed -e 's/March/Marco/g' \ | sed -e 's/April/Abril/g' \ | sed -e 's/May/Maio/g' \ | sed -e 's/June/Junho/g' \ | sed -e 's/July/Julho/g' \ | sed -e 's/August/Agosto/g' \ | sed -e 's/September/Setembro/g' \ | sed -e 's/October/Outubro/g' \ | sed -e 's/November/Novembro/g' \ | sed -e 's/December/Dezembro/g' \
#!/bin/bash # urs.bira@uol.com.br # Verifica se a pasta corrente ou o nome fornecido e uma pasta e se esta vazia tam=0 # Verifica se foi passado algum nome de pasta if [ ${1}x = x ] then # Se nao forneceu um nome de pasta assume que a pasta e . set - "." fi # Verifica se o nome passado realmente e uma pasta if [ -d ${1} ] then # Conta quantos arquivos ha na pasta eliminando o . e o .. tam=`ls -la ${1}| tail +4 | wc -l` # Verifica se a quantidade de arquivos encontrados e igual a zero if [ ${tam} -eq 0 ] then # Os caracteres \" sao para poder o nome da pasta ficar entre aspas printf "\n\t\tA pasta \"${1}\" esta vazia\n" else printf "\n\t\tA pasta \"${1}\" esta cheia\n" fi else printf "\n\t\t\"${1}\" nao e uma pasta\n" fi
#!/bin/bash # urs.bira@uol.com.br # Lista os arquivos presentes no diretorio corrente e seus tamanhos # Apresentando o total de espaco ocupado em bytes, Kbytes, MBytes e Gbytes. # Um exemplo de combinacoes de comandos for, printf, expr, bc, cut e tr # Obs.: /033 corresponde ao caracter ESC, outra forma de incui-lo no vi é só digitar Ctrl+V+[ # a linha vai ficar printf "bytes\t^[[31;1m${i}^[[0m\n" na tela do vi tput clear tot=0 for i in `ls 2>>/dev/null` do if [ -f ${i} ] then qtde=`expr ${qtde} + 1` tam=`ls -l ${i} | tr -s " " | cut -d " " -f5` tot=`expr ${tot} + ${tam}` printf "Arq:${qtde}\ttam: ${tam} bytes\t\033[31;1m${i}\033[0m\n" fi done tota=`echo "scale=3 ; (${tot} / 1024)" | bc` totm=`echo "scale=3 ; (${tota} / 1024)" | bc` totg=`echo "scale=3 ; (${totm} / 1024)" | bc` printf "\n\n\t${qtde} arq com ${tot} Bytes\n\t ou ${tota} Kb\n\t ou ${totm} Mb\n\t ou ${totg} Gb.\n\n"
#!/bin/bash # Display ANSI colours. # Mostra todas as cores possiveis no terminal # Fonte: http://br.tldp.org/projetos/howto/arquivos/html/Colour-ls/Colour-ls.pt_BR-85.html # esc="\033[" echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43" echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _" for fore in 30 31 32 33 34 35 36 37; do line1="$fore " line2=" " for back in 40 41 42 43 44 45 46 47; do line1="${line1}${esc}${back};${fore}m Normal ${esc}0m" line2="${line2}${esc}${back};${fore};1m Bold ${esc}0m" done echo -e "$line1\n$line2" done Reproduz a imagem abaixo:
#Fonte: http://funcoeszz.net/ # http://aurelio.net/shell/#ferramentas do Site de Aurelio # Mostra todas as cores possiveis no terminal # for frente in 0 1 2 3 4 5 6 7; do for bold in '' ';1'; do for fundo in 0 1 2 3 4 5 6 7; do c="4$fundo;3$frente"; echo -ne "\033[$c${bold}m $c${bold:- } \033[m" done; echo done; done Reproduz a imagem abaixo:
#Script urs.bira@uol.com.br verifica o espaco em disco com DF e
#depois comeca a avisar quando chega a 80% em 90% pede para avisar ao cpd
tamhd1=`df | grep sercon | tr " " "\n" > ${TEMP}/l1.tmp ;
cat ${TEMP}/l1.tmp | grep % | tr "%" "."`
tamhd=`echo ${tamhd1}*1 | bc`
if [ ${tamhd} -gt 79 ]
then
tput cup 20 10
echo "O espaco em disco esta em ${tamhd}% ocupado"
fi
if [ ${tamhd} -gt 89 ]
then
tput cup 20 10
echo -ne "O espaco em disco esta em ${tamhd}% ocupado. (AVISE O CPD)
#Exemplo 01 #Se voce definir as variaveis nome="Bira" endereco="Minha residencia" #e tiver uma carta escrita assim # 22 de Abril de 1500 # nome # endereco # Prezado nome, # Obrigado pela sua... # Atenciosamente, # Cria-se um script com: # sed -e "s/nome/${nome}/g" -e "s/endereco/${endereco}/g $1 | nroff
#Exemplo 02 if [ $# -eq 0 ] then #nenhum usuario fornecido echo "Entre com a identificacao" read identif else identif=$1 fi grep ${identif} /etc/passwd | cut -f5 -d:
#Exemplo 03 #Variacao do anterior if [ $# -eq 0 ] then #nenhum usuario fornecido echo "Entre com a identificacao" read identif grep ${identif} /etc/passwd | cut -f5 -d: else while do grep $1 /etc/passwd | cut -f5 -d: done fi
#Exemplo de script que renomea todos os arquivos para minusculo for i in * do novonome=`echo ${i} | tr "[A-Z]" "[a-z]"` novonome="${novonome}" if [ "${i}" != "${novonome}" ] then echo "Movendo ${i} para ${novonome}" mv ${i} ${novonome} fi done # }
#Fim do script #--------- Início do script que move arquivo CBAIMB.ERR para o REL if [ {$USERNAME}="teste" ] then if [ -r /home/srcntst/dat0/arq/CBAIMB.ERR ] then clear echo "Arquivo CBAIMB.ERR localizado na area de trabalho." echo "O arquivo sera movido para o diretorio REL." echo "(Digite ENTER para continuar)" read u mv /home/srcntst/dat0/arq/CBAIMB.ERR /home/srcntst/dat0/rel echo "Arquivo movido para o diretorio REL." echo "Acesse o Visualizador de Relatorios." echo "(Digite ENTER para continuar)" read u fi fi #----------- Final do script
#Script executa o Sistema Sercon se determinada empresa for informada
#Caso não seja informado nada aparece mensagem solicitando.
#
S()
{
if [ ${1}x = x ]
then
printf "\n\n\n\t\tUsar: S
#!/bin/bash # Cria um box com 3 itens a serem selecionados com a seta para cima e para baixo # podendo selecionar um dos itens com a barra de espaco. # Alem de contem um botao OK e CANCEL que podem ser selecionado com as seta # a direita e a esquerda Item1="Analizar" item2="Atualizar" item3="Corrigir" dialog --radiolist 'Processamento de arquivo Sintegra' 0 0 0 \ Analizar 'Analizar Arquivo Sintegra' on \ Atualizar 'Atualizar Arquivo Sintegra' off \ Corrigir 'Corrigir Arquivo Sintegra' off # As barras no final das linhas indicam que o comando continua na linha seguinte # o on/off indica qual item ficará inicialmente selecionado # Este script cria o box:
dialog --calendar 'abc' 0 0 23 12 1997 dialog --checklist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off dialog --fselect /tmp 0 0 (echo 50; sleep 2; echo 100) | dialog --gauge 'abc' 8 40 0 for i in 10 20 30 40 50 60 70 80 90 100 ; do sleep 1 ; echo $i | dialog --gauge 'abc' 8 40 0 ; done dialog --infobox 'O Download foi concluido com exito. A porta foi fechada' 0 0 dialog --inputbox 'abc' 0 0 dialog --passwordbox 'Digite a senha' 0 0 Este é como o --inputbox só que nao mostra o texto enquanto digita dialog --menu 'Selecione a opcao' 0 0 0 item1 'desc1' item2 'desc2' dialog --msgbox 'Coloca aqui a mensagem' 8 40 dialog --radiolist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off dialog --tailbox /tmp/arquivo.txt 0 0 dialog --textbox /tmp/arquivo.txt 0 0 Este só faz rolagem lateral Este rola as linhas se forem muitas dialog --timebox 'abc' 0 0 23 59 00 dialog --yesno 'Confirma' 0 0
sleep n_segundos, faz uma pausa de n segundos no script
Documento - here document Dentro de um script shell pode passar conteudo que normalmente seria digitado para qualquer comando. Esta forma e chamda de "here document". A mensagem se inicia por <<!,onde "!", pode ser um caracter ou uma palavra. O fim do texto da mensagem deve terminar pelo mesmo caracter ou palavra usada no seu inicio. Alem disto, este caracter ou palavar. deve ser colocado no inicio de uma nova linha. for usuarios in $* do mail ${usuarios} <<! Esta e a minha mensagem ! #Obs. a exclamacao deve ser o primeiro caracter da linha echo "mensaem enviada via email para usuario $usuarios" done
echo "\017" é o mesmo que echo -n que é igual a clocar \c no final do texto exemplo: echo "Digite enter \c" (não avança para a próxima linha.)
Colocando bira() { who -u; } toda vez que digitar bira executa o who -u
# A sequencia abaixo verifica se o valor de resp e S ou N tput cup 3 0 if [ "${resp}x" = "sx" -o "${resp}x" = "Sx" ] then fi
Lembre-se que para montar bordas você pode utilizar: K w loooooook IM; L q t n V x x G G J v moooooooj HM<
Fonte: Pesquisas DiversasDiversas fontes