Bash script buscar títulos em sites

#!/bin/bash

#####################
## Data: 20-08-2020
## Nome: busca_site_titulos.sh
## Autor: fatchadeus
#####################

# -------------------
# 1- Variáveis
# -------------------

ARQUIVO_DE_TITULOS="titulos.txt"
VERD="\033[32;1m"
VERM="\033[31;1m"
FILE="/usr/bin/lynx"

# -------------------
# 2- Testes
# -------------------

clear

## informa sobre a verificação
	echo -e "\e[1;32mO lynx está instalado?\e[0m"
	sleep 3
	
## validando se a ferramenta necessária está instalada

clear

if test -f "$FILE"; then
	echo "O lynx está instalado. Continue."
else 
	echo "O lynx não está instalado. Instalando o lynx antes de continuar."
	sudo apt update
	sudo apt install lynx
	sudo apt update
	echo "Lynx instalado"
	sleep 3
fi

# -------------------
# 3- em uma linha:
# -------------------

# clear; FILE="/usr/bin/lynx"; if test -f "$FILE"; then echo "O lynx está instalado. Continue."; else echo "O lynx não está instalado. Instalando o lynx antes de continuar." && sudo apt update && sudo apt install lynx && echo "Lynx instalado." && sleep 3; fi

# -------------------
# 4- Execução
# -------------------

	touch titulos.txt
	
	echo -e "\e[1;32mBuscando títulos no site ...\e[0m"
	sleep 3

	firejail --noprofile lynx -source https://umsite.com/ | grep blurb | sed 's/<div.*line">//;s/<\/span.*//' > titulos.txt

while read -r titulo_lxer
do
    echo -e "${VERM}Titulo: ${VERD}$titulo_lxer"  
done < "$ARQUIVO_DE_TITULOS"

rm -f titulos.txt


## fim do script

Linux shell script instrução case


A instrução case


A instrução case é uma boa alternativa para a instrução

if-then-else-fi (multinível)

O case permite que você combine vários valores com uma variável.
É mais fácil ler e escrever.


Para saber usar o case é necessário conhecer e saber usar o comando test.
Conhecer e saber usar if then else e fi.
Saber declarar variáveis junto com o if then else e fi somado ao comando test.


Exemplo:

## Declarando variável
VAR5=$1

## if, comando test (outra declaração) e then
if test "$1" -gt 1; then
	echo "$1 é maior que 1"
## else
else
	echo "$1 não é 1"
## fi
fi

O mesmo que o de cima :

VAR5=$1

if [ "$1" -gt 1 ]; then
	echo "$1 é maior que 1"
else
	echo "$1 não é 1"
fi

A instrução case permite que:

você verifique facilmente o padrão (condições).
Em seguida, processe uma linha de comando.
Se essa condição for avaliada como verdadeira.


Em outras palavras, o nome da variável $ é comparado com os padrões
até que uma correspondência seja encontrada.


*) atua como padrão e é executado se nenhuma correspondência for encontrada. O padrão pode incluir curingas.


Você deve incluir dois ponto e vírgula

;;

no final de cada comandoN.


O shell executa todas as instruções até os dois pontos-e-vírgulas que
estão próximos um do outro.


O esac é sempre necessário para indicar a declaração de final de caso.


Exemplo :

#!/bin/bash

#====================
## Data: 18-08-2020
## Nome: case_comando_argumentos.sh
## Exemplo de uso:
## ./case_comando_argumentos.sh -e nome_do_arquivo.txt
#====================

# Declarando variáveis
OPT=$1   	# opção
FILE=$2  	# nome do arquivo

# -------------------

echo
echo "Listando os 10 primeiros arquivos."
echo
sleep 3

	ls -t | head
	echo
read -p "Tecle Enter para continuar."

## 		test -e e -E correspondência de
## 		args de linha de comando

case $OPT in
  -e|-E)
  	echo "Editando arquivo $2 ..." 	## certifique-se de que o nome do arquivo
  									## foi passado corretamente, caso contrário,
  									## será exibido um erro

  	[ -z $FILE ] && { echo "Falta o nome do arquivo"; exit 1; } || nano $FILE
  	;;

  -c|-C)
  	echo "Exibindo arquivo $2 ..."

  	[ -z $FILE ] && { echo "Falta o nome do arquivo"; exit 1; } || cat $FILE
  	;;

  -d|-D)
  	echo "Hoje é $(date)"
  	;;

   *)
    echo "Argumento ruim!"
    echo "Uso: $0 -ecd nome-do-arquivo"
    echo "	-e file : Edita o arquivo."
    echo "	-c file : Exibe o arquivo."
    echo "	-d      : Mostra data e hora atual."
    ;;

esac

Conclusão :

A instrução case pode ser entendida por seres humanos comuns. O exemplo final é sofisticado mas, o trabalho que realiza é muito simples.

O usuário após criar o Bash shell script, dá permissão de execução. Abre o terminal onde o script está. Digita o nome do script com uma de 3 opções -e, -c e -d. A opção -e vai abrir um arquivo no nano para o usuário poder editar. A opção -c permite que o usuário leia o arquivo. A opção -d informa a data e hora atual do do sistema. Você poderia fazer a mesma coisa de maneiras muito mais simples, até mesmo com um Bash shell script bem tosco com poucas linhas, mas, aí você não aprenderia a usar o case, variáveis, if, then, else, fi. E estes, ao contrário do script tosco que eu gosto, podem ser utilizados para realizar grandes trabalhos que valem ouro.


Até Breve!

🙂


Linux bash shell script – Aprendendo declarações em if

As principais instruções condicionais do bash shell script são if e case.

Abra o emulador de terminal. Leia, copie e cole. Repita o processo.

1- NOME=Polodorio

2- echo $NOME

3- echo "$NOME"

4- echo "$NOME" && echo "$?"

5- echo "$NOME" && echo "$?" && echo "$$"

Se o diretório (-d) /tmp/ existir é sucesso, acerto é zero erro é 1 e o número do processo pode ser revelado usando echo “$$”

Copie e cole no terminal…

TMP=/tmp/; if test -d "$TMP"; then echo 'Sucesso'; fi; echo "$?"; echo "$$"

Se o arquivo (-f) aliases que deveria estar em : /usr/share/mime/aliases existir é sucesso, acerto é zero erro é 1 e o número do processo pode ser revelado usando echo “$$”. Se o arquivo não existir não haverá resposta nenhuma.

Copie e cole no terminal…

ARQ=/usr/share/mime/aliases; if test -f "$ARQ"; then echo "Sucesso."; fi; echo "$?"; echo "$$"

Linux bash shell script – Aprendendo declarações em if!

Se a variável for maior que dez então é sucesso!

Veja este pequeno bash shell script que preparei :

#!/bin/bash

NUM=12
if test "$NUM" -gt 10; then
	echo Sucesso
fi
Copie e cole no terminal...

NUM=12; if test "$NUM" -gt 10; then echo "Sucesso"; fi
Copie e cole no terminal...

NUM=12; if [ "$NUM" -gt 10 ]; then echo "Sucesso"; fi

A exclamação (!) é um caractere de negação. Execute no terminal :

(Se 12 não for maior que 10 sucesso)

Copie e cole no terminal...

NUM=12; if test ! "$NUM" -gt 10; then echo 'Sucesso'; fi

De novo…
(Se 12 não for maior que 10 sucesso)

Copie e cole no terminal...

NUM=12; if [ ! "$NUM" -gt 10 ]; then echo 'Sucesso'; fi
(Se 12 não for maior que 20 sucesso)

Copie e cole no terminal...

NUM=12; if test ! "$NUM" -gt 20; then echo 'Sucesso'; fi
(Se 12 não for maior que 20 sucesso)

Copie e cole no terminal...

NUM=12; if [ ! "$NUM" -gt 20 ]; then echo 'Sucesso'; fi

Usando if then else e fi :

(Se 12 não for maior que 20 sucesso ou então não é maior que 10)

Copie e cole no terminal...

NUM=12; if test ! "$NUM" -gt 10; then echo 'Sucesso'; else echo "Não é maior que 10"; fi

OBS :
Notou que não usou o fechamento de else que é elif?

Mais um bash shell script.

#!/bin/bash

NUM=12

if test ! "$NUM" -gt 10
then
	echo 'Sucesso'
else
	echo "Não é maior que 10"
fi

## fim do script

Veja só isto…

Se 12 for maior que 10 e se 12 também for menor que 15, então sucesso.

Usando test e -a :

Copie e cole no terminal...

NUM=12; if test "$NUM" -gt 10 -a "$NUM" -lt 15; then echo 'Sucesso'; fi

OBS: pode usar o -a várias vezes.
#!/bin/bash

NUM=12

if test "$NUM" -gt 10 -a "$NUM" -lt 15
then
	echo 'Sucesso'
fi

## fim do script
(se 12 for maior que 10 e se 12 também for menor que 15, então sucesso)

Copie e cole no terminal...

NUM=12; if [ "$NUM" -gt 10 -a "$NUM" -lt 15 ]; then echo 'Sucesso'; fi
#!/bin/bash

NUM=12

if [ "$NUM" -gt 10 -a "$NUM" -lt 15 ]; then
	echo 'Sucesso'
fi

## fim do script

Veja só este que usa ou (OR)…

Se 12 for maior que 10 ou se 12 também for menor que 15, então sucesso.


Usando test e -o :

Copie e cole no terminal...

NUM=12; if test "$NUM" -gt 10 -o "$NUM" -lt 15; then echo 'Sucesso'; fi

NUM=12; if [ "$NUM" -gt 10 -o "$NUM" -lt 15 ]; then echo 'Sucesso'; fi

OBS:
pode usar o -o várias vezes e pode misturar o -o com o -a
o -a tem preferêncoa sobre o -o

#!/bin/bash

# if_basico.sh
# declaração if básica

clear
DATA=2020
if [ $1 -gt 100 ]
then
    echo "Ei, $DATA este sim é um número grande."
	pwd
	date
	ls -FC | head
fi

echo "$?"
echo "$$"
echo "$@"

## fim do script

Em uma só linha. Copie e cole no terminal :

clear; DATA=2020; if [ "$DATA" -gt 100 ]; then echo "Ei, $DATA este sim é um número grande."; pwd; date; ls -FC | head; fi; echo "Acerto ou erro : $?"; echo "Processo : $$"; echo "$@"

Copie e cole no terminal :

echo "Digite lsblk para a variável linux: " ; read linux

Copie e cole no terminal :

echo “$linux”

$linux

Conclusão :

Neste post aprendemos o básico sobre como efetuar declarações em if no bash do GNU/Linux. Ao aprender sobre declaração if sabemos melhor as variáveis. Vamos sair (exit). Se sair ok o exit code será zero. Se sair errado, o exit code será diferente de zero.

Ficamos por aqui. Até breve.

$ wordpress -e exit

🙂

Um killswitch para o UFW

16-08-2020

Olá pessoal! Estamos aqui batendo cabeça com um killswitch que funciona e usa o firewall UFW.

O que é UFW? Bom …

Firewall descomplicado (UFW)

Um dos muitos aspectos anunciados do Linux é sua segurança.

Do desktop ao servidor, você encontrará todas as ferramentas de que precisa para manter essas máquinas bloqueadas da forma mais rígida possível.

Por muito tempo, a segurança do Linux esteve nas mãos do iptables (que funciona com o sistema netfilter subjacente). Embora incrivelmente poderoso, o iptables é complicado – especialmente para usuários mais novos. Para realmente tirar o máximo proveito desse sistema, pode levar semanas ou meses para ficar pronto.

Felizmente, um front end muito mais simples para iptables está pronto para ajudar a tornar seu sistema tão seguro quanto necessário.

Esse front-end é Uncomplicated Firewall (UFW). O UFW oferece uma estrutura muito mais amigável para gerenciar o netfilter e uma interface de linha de comando para trabalhar com o firewall.

Além disso, se você preferir não lidar com a linha de comando, o UFW tem algumas ferramentas de GUI que tornam o trabalho com o sistema incrivelmente simples.


Criamos um shell script que faz o kill switch existir. O código está logo abaixo :

Nome do bash shell script : ufw_killswitch.sh
#!/bin/bash

#############################################
## CONFIGURA UM UFW KILL SWITCH MANUAL PARA OPENVPN NO
## GNU/LINUX
## SCRIPT: ufw_killswitch.sh
## DATA: 16-08-2020
## OBS: ao reiniciar o sistema não precisa
## executar o script de novo.
## De vez em quando volto para
## as configurações originais do UFW
## para atualizar o relógio do sistema com
## o da rede (ntp) o sistema
## não funciona direito se o horário estiver
## incorreto.
## Para isto, uso outro script chamado: unfirewall.sh
#############################################
## voltando/iniciando as config normais/originais
## do ufw ... Quais? Estas : 
## default deny incoming
## allow outgoing
#############################################
## CONECÇÃO OPENVPN VIA NETWORK-MANAGER
#############################################
## OBS:
## O NETWORK-MANAGER É UM BEBÊ CHORÃO.
## O NETWORK-MANAGER É UMA MENININHA CHORONA.
#############################################

NORmconf(){
# faz o ufw voltar as configurações normais
	echo -e "\n\e[1;88;40m*** Unfirewall UFW ***\e[0m\n"
	sleep 8

	echo -e "\e[82msudo ufw reset & sudo ufw disabe\e[0m"
	sudo ufw disable
	sleep 1
	sudo ufw enable
	sleep 1
# --------------------------
	echo -e "\e[82msudo ufw --force reset\e[0m"
	sudo ufw --force reset
	sleep 1
# --------------------------
	echo -e "\e[82msudo ufw enable\e[0m"
	sudo ufw enable
	sleep 1
# --------------------------
	echo -e "\e[82msudo ufw status\e[0m"
	sudo ufw status
	sleep 8
# --------------------------
	echo -e "\e[82msudo ufw status verbose\e[0m"
	sudo ufw status verbose
	sleep 8
# --------------------------
	echo -e "\e[82msudo ufw default deny incoming\e[0m"
	sudo ufw default deny incoming
	sleep 2
# --------------------------
	echo -e "\e[82msudo ufw default allow outgoing\e[0m"
	sudo ufw default allow outgoing
	sleep 2
# --------------------------
	echo -e "\e[82msudo systemctl enable ufw\e[0m"
	sudo systemctl enable ufw
	sleep 2
# --------------------------
	echo -e "\e[82msudo ufw status verbose\e[0m"
	sleep 2
	sudo ufw status verbose
	sleep 8
# --------------------------
	echo -e "\e[82msudo ufw status numbered\e[0m"
	sleep 2
	sudo ufw status numbered
	echo ""
	sleep 2
}
NORmconf

# --------------------------

read -p "*** Conecte a VPN e depois tecle enter aqui ***"

# --------------------------

## PREPARAÇÃO PARA O KILLSWITCH 01
## PERMITIR SSH
## ACESSO A LAN NETWORK
sudo ufw allow in to 192.168.0.1/24
sudo ufw allow out to 192.168.0.1/24
# --------------------------
## PREPARAÇÃO PARA O KILLSWITCH 02
## permite a máquina se conectar a dispositivos
sudo ufw allow in on tun0 from any to any
# -------------------------
## PREPARAÇÃO PARA O KILLSWITCH 03
## PERMITIR OPENVPN
sudo ufw allow out 1198/udp
sudo ufw allow in 1198/udp
# --------------------------
## PREPARAÇÃO PARA O KILLSWITCH 04
## PARA NÃO TER QUE FICAR CONECTANDO E DESCONECTANDO
sudo ufw allow out from any to 192.168.0.1/24
# ---------------------------

## O KILLSWITCH ## O MOTIVO DE TUDO
sudo ufw default deny outgoing
sudo ufw default deny incoming
sudo ufw allow out on tun0 from any to any

# --------------------------
## KILLSWITCH É AQUI UM BASH SHELL SCRIPT QUE
## CONFIGURA REGRAS DO PROGRAMA UFW.
## O KILLSWITCH É UMA NEGAÇÃO DUPLA DO
## UFW FIREWALL QUE NÃO PERMITE DE 
## FORMA ALGUMA ENTRADA E SAÍDA DE NADA.
## SÓ PERMITE, SE FOR POR CONECÇÃO VPN UDP
## NO CASO DO LINUX ESTA É A OPÇÃO ESCOLHIDA
## POR HORA.
# --------------------------

## ADICIONANDO PORTAS OBTIDAS DE ARQUIVOS .OVPN
## DA EMPRESA QUE OFERECE OS SERVIÇOS DE VPN

# ----------------------------
sudo ufw allow out to 84.184.165.146 port 1194 proto udp

sudo ufw allow out to 84.120.218.64 port 1194 proto udp

sudo ufw allow out to 41.182.186.285 port 1194

sudo ufw allow out to 84.84.112.20 port 1194

sudo ufw allow out to 41.182.186.285 port 1194

sudo ufw allow out on eth0 to 144.124.142.48 port 1194  proto udp

sudo ufw allow out on eth0 to 84.184.165.146 port 1194  proto udp

sudo ufw allow out on eth0 to 148.284.148.188 port 1194  proto udp

sudo ufw allow out on eth0 to 84.184.165.146 port 1194  proto udp

sudo ufw allow out on eth0 to 84.14.58.66 port 1194  proto udp

sudo ufw allow out on eth0 to 144.124.142.48 port 1194  proto udp

## AVISO DE CONCLUSÃO
echo ""
read -p "*** O KillSwitch está ativado. Tecle Ctrl+C para sair ***"
echo ""

No momento é só isto. Usamos e parece ser útil. Para funcionar para você o script deve ser alterado em :

a) ACESSO A LAN NETWORK
b) 192.168.0.1
c) PORTAS OBTIDAS DE ARQUIVOS .OVPN

Até Breve!

🙂

Terminal verificar conecção com a rede

Verificar se está conectado a rede. Existem aplicativos e sites sem fim que ganham oferecendo este serviço. Existem até mesmo aplicativos, apps, apks e programas que cobram para fazer isto. Bom, nada é de graça, nem mesmo um serviço gratuito. Ah, os anos 20 são sempre assim? Tempos de pragas e todo tipo de vilanias que talvez sirvam de base um novo mundo no final do século. De novo isto? Novo mundo? Ops, expressão errada eu usei. O mundo está sempre mudando, mas certas coisas não mudam. Chega disto.

Olha o negócio é Linux bash shell script. Se a pessoa conseguir entender de verdade como este script funciona já pode saber que não é mais um bebê Linux. Já está adulto. Uma pessoa jovem adulta. Pode-se fazer centenas de scripts diferentes usando o que está neste shell script.

Nele encontramos: while, do, if, then , break, else, break, fi, done e uns comandos simples mas importantes.

Sem mais enrolação aí vai o código.

🙂

#!/usr/bin/env bash

#######################
## 05-08-2020
## conectados.sh
## semanickz
## https:://semanickz.wordpress.com
#######################

while :
do
  if ping -c 4 google.com &>/dev/null 2>&1
  	then
    	echo -e "\n\e[1;32mEstamos online!\e[0m\n"
    	break
else
	echo -e "\n\e[1;32mNão estamos conectados!\e[0m\n"
		break
  fi
  		sleep 4
done


# --- fim do script --- #

E é só isto. Ou melhor, é tudo isto! Um pequeno script que pode ser usado para realizar grandes coisas.

Até Breve!

🙂

NordVPN em Solus 4.1 fortitude – Shell Script

Ah como é difícil achar as coisas quando a gente mais precisa. Muitas barreiras nos impedem de encontrar. Muita máquina travando… Muita perseguição. Muita mentira. Mas sempre tem outro dia. Um dia em que por acaso da pura teimosia você acha o fio da meada. Todo mundo já tinha encontrado e achavam que você também sabia. Por isto ninguém disse-lhe nada. Entra nessa! Vai ser legal.

Bom apesar de só usar Android e Windows actualmente; o Linux nunca me saiu do coração. Especialmente a Distro Solus. Especificamente o Solus Solus 4.1 fortitude com Kernel Linux 5.6 e alguma coisa.

É o seguinte, você pode instalar NordVPN no Solus a partir do repositório oficial do Debian. Aqui eu mostro como se faz isto usando um bash shell script amigo, solidário e anônimo (qualidades muito raras) que achei no Gitlab (não sei onde) e alterei um pouco. Lá vai o script:

OBS:

No final é só digitar nordvpn -h. Veja a imagem abaixo:

Vamos agora ao script.

#!/usr/bin/env bash

## ####################
## Autor: semanickzaine
## Título: skz_nordvpn_install.sh
## https://semanickz.wordpress.com
## Para os usuários do Solus Linux 2020
## Poderem usar NordVPN
## Achei o script no Gitlab e atualizei
## o link do pacote .deb que agora é
## 3.7.4 - Atualizado em 30-Jun-2020 15:54
## Também adicionei explicações
## Testei e até o momento está funcionando
## ####################

# Dependencias # Primeiro atualize o sistema
sudo eopkg upgrade
sudo eopkg install ipset ipset-devel binutils

# ---------------------

# Crie diretório
mkdir nordvpn

# ---------------------

# Navegue para ele
cd nordvpn

# ---------------------

# Baixe o deb e extraia
## Verifique se há nova atualização no repo:
## https:\//repo.nordvpn.com/deb/nordvpn/debian/pool/main/ ##

# ---------------------

wget https://repo.nordvpn.com/deb/nordvpn/debian/pool/main/nordvpn_3.7.4_amd64.deb

# ---------------------

# add-repo (ar) - Adiciona um repositório
# x - Extrai ficheiro(s) do arquivo
# Então:
# ar x arquivo.deb. Comando...

ar x nordvpn_3.7.4_amd64.deb

# ---------------------

# extraia o tar.xz opção: --one-top-level
tar -xvf data.tar.xz --one-top-level

# ---------------------

# Vá para o diretório data
cd data

# ---------------------

# Copie os arquivos para /etc
sudo cp -R etc/* /etc/

# ---------------------

# Copie os arquivos para /usr/bin/
sudo cp -R usr/bin/* /usr/bin/

# ---------------------

# Copie os arquivos para...
sudo cp -R usr/lib/* /usr/lib/

# ---------------------

# Copie os arquivos para...
sudo cp -R usr/sbin/* /usr/sbin/

# ---------------------

# Copie os arquivos para...
sudo cp -R usr/share/* /usr/share/

# ---------------------

# Copie os arquivos para /var/
sudo cp -R var/* /var/

# ---------------------

# Finalize a instalação mandando ver no systemd
sudo systemctl enable nordvpnd.socket

# ---------------------

# Habilitando arquivos de serviço e sockets

sudo systemctl enable nordvpnd.service
sudo systemctl start nordvpnd.socket
sudo systemctl start nordvpnd.service

# ---------------------

# Crie diretório /dev/
mkdir -p /dev/net

# ---------------------

# Crie link simbólico

sudo ln -s /sbin/ip /usr/sbin/ip 
/etc/init.d/nordvpn restart &>/dev/null

# ---------------------

## Mensagem final coloridaaa

echo -e "\n\e[32mInstalação completa, digite : nordvpn -h\e[0m\n"

# ---------------------

## --- fim do script --- ##

Então é isto pessoal.

Até Breve!

🙂

Minha coleção de Conky’s

Um conky. Um retângulo estreito no lado direito da tela de um sistema operacional GNU/Linux ou Linux. Ele é escrito na linguagem de programação LUA. Eles são realmente muito úteis. Podem oferecer todo tipo de informação sobre o sistema, meteorologia, notícias em geral e melhor ainda podem ter outras formas que não a do retângulo estreito. Conky Elefante? Existe. Conky Futuro espacial? Existe. Conky Tigre? Existe. E o que não existe ainda pode vir a existir a qualquer momento que um usuário aprende o código LUA e faz uns tweaks em algum Conky criado por outro ou faz seu próprio Conky do zero.

Aqui um tem um Conky meu para GNU/Linux ou Linux dedicado aos usuários iniciantes que desejam não somente obter informações sobre o sistema operacional, mas desejam aprender atalhos de teclado do terminal GNU/Linux ou Linux. Ele é assim:

Agora é hora de oferecer o código a vocês. Espero que seja útil em sua jornada de aprendizado.

Código LUA do Conky:

# ----------------------------------------------------
# "CPU Panel (8-core)" theme for Conky by Tony George (teejee2008@gmail.com)
# ----------------------------------------------------
# Meu_Conky_Network_Panel_Atec
# Webpage: http://teejeetech.blogspot.in/
# ----------------------------------------------------
# Tweak by: oldfolk & semanickzaine - Brasil - 30-07-2020
# ----------------------------------------------------
# O Ano da Peste. No dia 30 do 07 de 2020 o ano da peste de nosso senhor, resolvi escrever um Conky já que para minha surpresa, entre tantos mortos, eu ainda estava vivo.
# ----------------------------------------------------
# Blog: https://semanickz.wordpress.com
# ----------------------------------------------------

background yes
double_buffer yes

alignment bottom_left

border_width 1
cpu_avg_samples 2
default_color white
default_outline_color white
default_shade_color white
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no

gap_x 10
gap_y 0
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
extra_newline no

own_window yes
own_window_type normal
own_window_transparent yes
own_window_colour 000000
own_window_argb_visual yes
own_window_argb_value 0
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

minimum_size 170 0
stippled_borders 0
update_interval 2.0
uppercase no
use_spacer none

show_graph_scale no
show_graph_range no

use_xft yes
xftalpha 0.1
xftfont Droid Sans:size=10
color0 white
color1 EAEAEA
color2 FFA300
color3 grey

TEXT
-----------------------------------------------
${color2}${alignr}Atalhos de Teclado do Terminal${color0}
-----------------------------------------------
${color2}Ctrl+R${color0}${alignr}Busca recursiva
${color2}Ctrl+A${color0}${alignr}Inicio da string
${color2}Ctrl+E${color0}${alignr}Fim da string
${color2}Ctrl+K${color0}${alignr}Apaga para frente
${color2}Ctrl+U${color0}${alignr}Apaga para trás
${color2}Ctrl+W${color0}${alignr}Apaga string anterior
${color2}Alt+B${color0}${alignr}Move 1 string p/ trás
${color2}Alt+F${color0}${alignr}Move 1 string p/ frente
${color2}Ctrl+H${color0}${alignr}Apaga 1 bit anterior
${color2}Esc+Del${color0}${alignr}Apaga 1 bit posterior
${color2}Ctrl+L${color0}${alignr}Limpa a tela
${color2}Ctrl+D${color0}${alignr}Fecha o terminal
-----------------------------------------------
#${color2}Hostname:${color0}$alignr$nodename
${color2}Kernel:${color0}$alignr$kernel
${color2}Uptime${color0}${alignr}${uptime}
-----------------------------------------------
${color2}Download ${color0}${alignr}${downspeedf eth0} KiB/s
${downspeedgraph eth0 80,}
${color2}Upload ${color0}${alignr}${upspeedf eth0} KiB/s 
${upspeedgraph eth0 80,}
${color2}Bateria${color0}${alignr}${battery_percent BAT0}% / ${acpitemp}°C
${color2}Power${color0}${alignr}${battery_bar}  num
${color2}CPU${color0}${alignr}${cpu cpu0}%
${color2}CPU Bar${color0}${alignr}${cpubar}  num
${color2}HD${color0}${alignr}${fs_free}
${color2}RAM${color0}${alignr}${mem}
${color2}Swap${color0}${alignr}${swap}
${color2}Buffers${color0}${alignr}${buffers}
${color2}Cached${color0}${alignr}${cached}
#${color2}Uptime${color0}${alignr}${uptime}
#${color2}Local${color0}${alignr}${addreth0}
#${color2}Public${color0}${alignr}${execi 3600 wget -q -O /dev/stdout http://checkip.dyndns.org/ | cut -d : -f 2- | cut -d \< -f -1}
-----------------------------------------------

Até Breve!

Estou em casa.

🙂

Linux comentários multiline

#!/usr/bin/env bash

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

# nome: comentario-comentarios-multiline.sh
# autor: semanickz
# site: https://semanickz.wordpress.com/
# comentários sem cerquilha # ?
# usa
# : '
# e usa
# '.
# usa espaço e aspas simples
# para aprender executo este script

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

clear

# --------------------------------------

# Exemplo de comentários multiline:

: ' .'

# --------------------------------------

: ' COMENTÁRIO .'

# --------------------------------------

: '

O script a

seguir calcula o

valor quadrado do

número, 5.

'

# --------------------------------------

: '

O script ...

aqui calcula...

... o quadrado do número 5.

'

# --------------------------------------

var=$((area=5*5))

# --------------------------------------

echo "O quadrado do número 5 é : "

echo "$var"

# --------------------------------------

# fim do script

Linux exemplos de cores no shell script bash

#!/bin/bash

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

# exemplo-bash-shell-script-cores.sh

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

: ' Aqui estamos testando fazer um comentário mais diferente sem usar # vamos ver como é isto agora ok? ok?

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"

---

Exemplo:

echo -e "\e[1;32mTexto negrito verde\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;33;40m*** Texto negrito, amarelo, fundo preto ***\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.

---

.'

# TODO todo O TEXTO ACIMA NÃO VAI APARECER NA EXECUÇÃO DESTE SCRIPT?

clear

# abertura SEM FECHAMENTO
echo -e "\e[33;1m Hello World"

# bold effect - negrito
# abertura SEM FECHAMENTO
echo -e "\e[33;5m Piscando"

# blink effect - piscando
# abertura SEM FECHAMENTO
echo -e "\e[33;0m Hello World"

# back to normal - normal
# abertura SEM FECHAMENTO
echo -e "\e[33;31m Hello World"

# Red color - vermelho
# abertura SEM FECHAMENTO
echo -e "\e[33;32m Hello World"

# Green color - verde
# abertura SEM FECHAMENTO
echo -e "\e[33;33m Hello World"

# See remaining on screen - ver o restante na tela
# abertura SEM FECHAMENTO
echo -e "\e[33;34m Hello World"
echo -e "\e[33;35m Hello World"
echo -e "\e[33;36m Hello World"

# FECHAMENTO \e[0m

echo -e -n "\e[0m"

echo -e "\e[33;41m Hello World\e[0m"
echo -e "\e[33;42m Hello World\e[0m"
echo -e "\e[33;43m Hello World\e[0m"
echo -e "\e[33;44m Hello World\e[0m"
echo -e "\e[33;45m Hello World\e[0m"
echo -e "\e[33;46m Hello World\e[0m"

# back to normal - voltar ao normal
echo -e "\e[33;0m Hello World\e[0m"

echo #------------------------------

echo -e "\e[33;41m Hello World33\e[0m"
echo -e "\e[33;42m Hello World33\e[0m"
echo -e "\e[33;43m Hello World33\e[0m"
echo -e "\e[33;44m Hello World33\e[0m"
echo -e "\e[33;45m Hello World33\e[0m"
echo -e "\e[33;46m Hello World33\e[0m"

echo ""

# coment abaixo aparece ou não?

: '

# este último com fechamento faz o terminal voltar ao normal

.'

: '

# abaixo abertura de cor \e[33;0m fechamento de cor \e[0m

.'

echo -e "\e[33;0m Hello World \e[0m"

echo -e "\n# -------------- fim -------------- #\n"

# fim do script

Dicas Linux Shell Script

07-05-2020

---

Dicas Linux Shell Script?

---

Algumas dicas e truques sobre como trabalhar com o shell script do Linux?

---

Dica:

Pesquise e pratique na mesma hora. Web browser, editor de texto e terminal abertos lado a lado e não fique pulando de uma distro para outra.

---

Dica:

O caminho absoluto, contém o caminho completo a partir da raiz (/).

---

Dica:

Use = em vez de == para comparações de strings

Ex.

valor1=”coisaA”
valor2=”coisaB”

if [ "$valor1" = "$valor2" ]

---

Dica:

Use $(comando) em vez de `comando`.

Usar: user=$(echo “$UID”)

Não usar: user=`echo “$UID”`

---

Dica:

Use read-only para declarar variáveis estáticas:

readonly passwd_file=”/etc/passwd”
readonly group_file=”/etc/group”

---

Dica:

Use funções em bash shell scripts.

Exceto por scripts muito pequenos (com algumas linhas de código), lembre-se sempre de usar funções para modularizar seu código e tornar os scripts mais legíveis e reutilizáveis.

function nome_função(){
comando1;
comando2;
}

---

Dica:

Para código de linha única, use caracteres de terminação após cada comando como este:

nome-da-função(){ comando1; comando2; }

---

Dica:

Chamar a função na mesma linha de código:

nome-da-função(){ comando1; comando2; }; nome-da-função

---

Dica:

-exec COM VÁRIOS COMANDOS.

Não podemos usar vários comandos junto com o parâmetro –exec. Aceita apenas um único comando, mas podemos usar um truque (hack).

Escreva vários comandos em um script de shell (por exemplo, commands.sh) e use-o com –exec da seguinte forma:

-exec ./commands.sh {} ;

---

Dica:

PESQUISE RECURSIVAMENTE MUITOS ARQUIVOS.

Dica: Para pesquisar recursivamente por um texto sobre vários diretórios de descendentes, use:

grep "texto" . -R -n

usando o comando dentro de uma função:

pesquise(){ grep "texto" . -R -n; }; pesquise

Este é um dos comandos mais utilizados pelos desenvolvedores. Ele é usado para localizar o arquivo do código-fonte no qual um determinado texto existe.

---

Dica:

Use maiúscula para variáveis de ambiente e minúsculas para variáveis personalizadas.

---

Dica:

COMANDO BEM SUCEDIDO E MALSUCEDIDO.

Dica: Quando um comando retorna após o erro, ele retorna um status de saída diferente de zero. O comando retorna zero quando termina após a conclusão bem-sucedida. O status de retorno pode ser lido da variável especial $? (execute echo $? imediatamente após a instrução de execução do comando para imprimir o status de saída).

echo $?

---

Dica:

USE UM CAMINHO ABSOLUTO PARA O EXECUTÁVEL.

---

Dica:

Um binário executável do comando time está disponível em /usr/bin/time, assim como existe um tempo nomeado no shell embutido.

Quando corremos o tempo, ele chama o shell embutido por padrão.

O tempo interno do shell tem opções limitadas. Portanto, devemos usar um caminho absoluto para o executável (/usr/bin/time) para executar funcionalidades adicionais.

---

Dica:

FORK BOMB - CUIDADO PERIGO!

:(){:|:&};:

Esta função recursiva é uma função que chama a si mesma. Ele gera processos infinitamente e acaba em um ataque de negação de serviço.

& é pós-fixado com a chamada de função para colocar o subprocesso em segundo plano. Este é um código perigoso, pois ele cria processos e, portanto, é chamado de fork bomb.

Você pode achar difícil interpretar o código acima.

---

Dica:

Veja a página da Wikipedia:

http://en.wikipedia.org/wiki/Fork_bomb para mais detalhes e interpretação da bomba.

Ele pode ser evitado restringindo o número máximo de processos que podem ser gerados a partir do arquivo de configuração /etc/security/limits.conf.

---

Dica:

ESPECIFIQUE -maxdepth e –mindepth como o terceiro argumento.

-maxdepth e -mindepth devem ser especificados como o terceiro argumento para o find.

Se eles forem especificados como quarto ou mais argumentos, isso poderá afetar a eficiência do find, já que ele precisa fazer verificações desnecessárias (por exemplo, se –maxdepth for especificado como o quarto argumento e –type como o terceiro argumento, o comando find primeiro descobre todos os arquivos que possuem o tipo especificado e, em seguida, localiza todos os arquivos correspondentes com a profundidade especificada.

No entanto, se a profundidade for especificada como o terceiro argumento e

–type

como a quarta, o find poderá coletar todos os arquivos mais a profundidade especificada e, em seguida, verifique o tipo de arquivo, que é a maneira mais eficiente de pesquisa.

---

Dica:

-n OPÇÃO PARA ORDENAÇÃO NUMÉRICA.

Sugestão:

Tenha sempre cuidado com a opção -n para ordenação numérica.

O comando sort trata a classificação alfabética e o ordenamento numérico de forma diferente. Portanto, para especificar a classificação numérica, a opção –n deve ser fornecida.

---

Dica:

O ## OPERADOR.

Dica:

O operador ## tem mais preferência sobre o operador # para extrair uma extensão de um nome de arquivo, pois o nome do arquivo pode conter vários caracteres "." Como ## faz uma combinação gananciosa, ele sempre extrai apenas extensões.

---

Dica:

COLOCAR ATRIBUIÇÕES DE VARIÁVEIS.

Geralmente, colocamos atribuições de variáveis iniciais, como var=0; e instruções para imprimir o cabeçalho do arquivo no bloco BEGIN. No bloco END {}, colocamos instruções como resultados de impressão e assim por diante.

---

Dica:

EXCLUINDO UM CONJUNTO DE ARQUIVOS DO ARQUIVAMENTO

Dica: É possível excluir um conjunto de arquivos do arquivamento especificando padrões. Use –exclude [PATTERN] para excluir arquivos correspondentes a padrões de curingas. Por exemplo, para excluir todos os arquivos .txt do uso de arquivamento:

$ tar -cf arch.tar * --exclude "*.txt"

Observe que o padrão deve ser colocado entre aspas duplas.

---

Dica:

USANDO O COMANDO CPIO PARA CAMINHOS ABSOLUTOS.

Usando o cpio, também podemos arquivar usando arquivos como caminhos absolutos. /usr/somedir é um caminho absoluto, pois contém o caminho completo a partir da raiz (/).

Um caminho relativo não será iniciado com / mas inicia o caminho a partir do diretório atual. Por exemplo, test / file significa que existe um teste de diretório e o arquivo está dentro do diretório de teste.

Ao extrair, o cpio extrai para o caminho absoluto em si. Mas no caso do tar, ele remove o / no caminho absoluto e o converte em caminho relativo.

---

Dica:

FORMATO PATH.

Para o formato PATH, se usarmos / no final da fonte, o rsync copiará o conteúdo desse diretório final especificado no source_path para o destino.

Se estiver no final da fonte, o rsync irá copiar o próprio diretório final para o destino.

---

Dica:

/ NO FINAL DO DESTINATION_PATH.

Se / estiver no final de destination_path, o rsync copiará a origem para o diretório de destino.
Se / não for usado no final do caminho de destino, o rsync criará uma pasta, com nome semelhante ao diretório de origem, no final do caminho de destino e copiará a origem nesse diretório.

---

Dica:

COMANDO DE ESPERA.

O comando wait permite que um script seja finalizado somente após o término ou completo de todos os seus processos-filhos ou processos em segundo plano.
Primeiro argumento do comando sftp

---

Dica:

-oPort deve ser o primeiro argumento do comando sftp.

---

Dica:

EXECUTANDO DU DIRECTORY.

Executar du DIRECTORY irá produzir um resultado similar, mas mostrará apenas o tamanho consumido pelos subdiretórios. No entanto, eles não mostram o uso do disco para cada um dos arquivos. Para imprimir o uso do disco por arquivos, -a é obrigatória.

---

Dica:

COMANDOS DO DIRECTORY DU TRANSVERSAL.

du pode ser restrito para percorrer apenas um único sistema de arquivos usando o argumento –x.
Suponha que du DIRECTORY seja executado, ele percorrerá todos os subdiretórios possíveis de DIRECTORY recursivamente.
Um subdiretório na hierarquia de diretórios pode ser um ponto de montagem (por exemplo, /mnt/sda1 é um subdiretório de /mnt e é um ponto de montagem para o dispositivo /dev/sda1).
du percorrerá esse ponto de montagem e calculará a soma do uso do disco para o sistema de arquivos do dispositivo também.
Para impedir que o du seja percorrido e para calcular a partir de outros pontos de montagem ou sistemas de arquivos, use o sinalizador -x junto com outras du opções.
du –x/ excluirá todos os pontos de montagem em /mnt/ para cálculo de uso do disco.

---

Dica:

ARGUMENTO -X

Dica: O argumento -x junto com -a especifica para remover a restrição TTY transmitida, por padrão, por ps. Geralmente, o uso de ps sem argumentos imprime processos conectados apenas ao terminal.

---

Dica:

PARÂMETROS PARA -o

Dica: Os parâmetros para -o são delimitados usando o operador vírgula (,). Deve-se notar que não há espaço entre o operador vírgula e o próximo parâmetro. Principalmente, a opção -o é combinada com a opção -e (every) (-oe), pois deve listar todos os processos em execução no sistema. No entanto, quando determinados filtros são usados junto com –o, como aqueles usados para listar os processos pertencentes a usuários especificados, -e não é usado junto com –o. O uso de -e com um filtro anulará o filtro e mostrará todas as entradas do processo.

---

Dica:

COMANDO PGREP

O pgrep requer apenas uma parte do nome do comando como seu argumento de entrada para extrair um comando Bash, por exemplo, pgrep ash ou pgrep bas também funcionará. Mas ps requer que você digite o comando exato.

---

Dica:

APROPOS.

Às vezes precisamos procurar se algum comando relacionado a uma palavra existe. Em seguida, podemos pesquisar as páginas de manual por strings no comando. Para isso, podemos usar:

apropos COMMAND

---

Dica:

NOVA LINHA NO COMANDO ECHO: Quando usar -n, quando usar \c.

echo: -n ou \c

Felizmente, isso está se tornando um problema menor, mas vale a pena estar ciente, especialmente se você estiver escrevendo scripts para sistemas Unix mais antigos.

Quando você usa a instrução echo, uma nova linha é adicionada no final do comando. Isto é, se o seu script se parece com isto:

#!/bin/sh
echo Hello
echo World

Então a saída será:

Hello
World

e não:

HelloWorld

---

Dica:

FREQÜENTEMENTE, é exatamente isso que você quer, mas às vezes você quer que o eco não insira essa nova linha automaticamente.

Há uma correção para isso ... bem, com mais precisão, há duas correções para isso.

Primeiro, você precisa estar ciente de que o eco é implementado pela maioria dos shells (como um comando interno do shell) e também pelo sistema operacional (normalmente como /bin/echo). Portanto, o comportamento exato depende de qual shell você está usando, se ele está configurado para usar o eco integrado ou o nativo /bin/echo e, nessa situação, você precisa saber em qual sistema operacional o script está sendo executado e como ele implementa esse recurso.

Algumas implementações usam echo -n message para dizer ao echo para não acrescentar uma nova linha; outros não têm -n, então você tem que usar echo message \c para fazer a mesma coisa. Na maioria das vezes, você vai querer echo -n, mas se você precisa que seu script seja totalmente portátil, você precisa permitir ambos:

#!/bin/sh
echo -n "Enter your name: "
read name
echo "Hello, $name"

---

Dica:

ISSO FUNCIONARÁ EM ALGUNS SISTEMAS E FICARÁ ASSIM:

Digite seu nome: Stevao
Ola stevao

No entanto, em outros sistemas, ficará assim, o que não é ideal:

-n Digite seu nome: Stevao
Ola stevao

Em outros sistemas, você precisa escrever o código assim:

echo "Enter your name: \c"
read name
echo "Hello, $name"

ISSO FORNECERÁ os resultados corretos nesses sistemas, mas poderá fornecer resultados errados em outros sistemas (onde \c não possui nenhum significado especial, será interpretado como um caractere c literal).

Bem, isso é um parto... Aqui está uma solução que funcionará em ambos:

if [ "`echo -n`" = "-n" ]; then
n=""
c="\c"
else
n="-n"
c=""
fi

echo $n "Enter your name: $c"
read name
echo "Hello, $name"

---

Dica:

SE echo -n não fosse interpretado pelo eco, seria exibido apenas o texto literal -n. Em caso afirmativo, $ n é definido como a string vazia e $c é definido como \c.

Neste exemplo, o comando echo $n "Digite seu nome: $c" será analisado como:

echo -n "Enter your name: "

Caso contrário, o echo interpretou -n como um argumento para alterar seu comportamento, portanto, $ n é definido como -n e $c é definido como a cadeia vazia. O comando echo $ n "Digite seu nome: $c" será analisado como:

echo "Enter your name: \c"

DE QUALQUER MANEIRA, O RESULTADO DESEJADO FOI ALCANÇADO.

---

Dica:

SEMPRE EXECUTE A DEPURAÇÃO PARA SCRIPTS LONGOS.

Se você estiver escrevendo scripts bash com milhares de linhas de código, encontrar erros pode se tornar um pesadelo. Para corrigir facilmente as coisas antes de executar um script, execute alguma depuração.

Métodos para ativar o modo de depuração de scripts de shell.

AS OPÇÕES DE DEPURAÇÃO.

As opções principais de depuração do script do shell:

-v (abreviação de detalhado) - informa ao shell para mostrar todas as linhas em um script enquanto elas são lidas, ele ativa o modo detalhado.

-n (abreviação de noexec ou no ecxecution) - instrui o shell a ler todos os comandos, mas não os executa. Esta opção ativa o modo de verificação de sintaxe.

-x (abreviação de xtrace ou rastreio de execução) - informa ao shell para exibir todos os comandos e seus argumentos no terminal enquanto eles são executados.

OBS:
ESTA OPÇÃO (-x) ATIVA O MODO DE RASTREAMENTO DE SHELL.

---

1. MODIFICANDO A PRIMEIRA LINHA DE UM SCRIPT DE SHELL. O primeiro mecanismo é alterando a primeira linha de um script de shell como abaixo, isso permitirá a depuração de todo o script.

#!/bin/sh opção(s)

No formulário acima, a opção pode ser uma ou uma combinação das opções de depuração acima.

2. INVOCANDO O SHELL COM OPÇÕES DE DEPURAÇÃO. A segunda é invocando o shell com opções de depuração da seguinte maneira: esse método também ativará a depuração de todo o script.

shell opções(s) script_nome argumento1 ... argumentoN

Ex:

/bin/bash opções(s) script_nome argumento1 ... argumentoN

3. USANDO O COMANDO INTERNO DO SHELL SET.

O terceiro método é usar o comando interno set para depurar uma determinada seção de um script de shell, como uma função.

Esse mecanismo é importante, pois permite ativar a depuração em qualquer segmento de um script de shell.

Podemos ativar o modo de depuração usando o comando set no formulário abaixo, em que option é uma das opções de depuração.

$ set opção

PARA HABILITAR O MODO DE DEPURAÇÃO, USE:

$ set -option

PARA DESATIVAR O MODO DE DEPURAÇÃO, USE:

$ set + option

ALÉM DISSO, SE TIVERMOS ATIVADO VÁRIOS modos de depuração em diferentes segmentos de um script de shell, podemos desativar todos eles de uma vez da seguinte maneira:

$ set -

É ISSO POR ENQUANTO, COM A ATIVAÇÃO DO MODO DE DEPURAÇÃO DE SCRIPTS DE SHELL. Como vimos, podemos depurar um shell script inteiro ou uma seção específica de um script.

---

Eis um bash shell script que uso no Nautilus

#!/usr/bin/env bash

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

# um bash script para o Nautilus
# Título: 1a_TOUCH_.sh
# autor: semanickz
# site: https://semanickz.wordpress.com
# uso: clique no arquivo, chame o script
# pelo menu do Nautilus e arquivo tocado
# vai mudar de posição no gerenciador de arquivos
# a ficha caiu, agora vai!
################################

touch "$1"

# fim do script

Um bash shell script para o Nautilus

#!/usr/bin/env bash

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

# titulo: 1Bb-CV-mp4-2-mkv.sh
# data: 07-05-2020
# bash shell script para o nautilus
# -------------------
# autor: semanickz
# -------------------
# site: https://semanickz.worpress.com
# -------------------
# -------------------
# obs: este script é para o gerenciador de arquivos,
# no meu entender, ele é direcionado a "UM E APENAS UM ARQUIVO EM
# QUESTÃO" neste caso o "$1".
# ele executa o serviço direto no arquivo.
# não aparece terminal nenhum. Você pode escrever
# vários tipos de scripts para um arquivo.
# por exemplo toda vez que encontrar um certo
# tipo de arquivo clica nele e o envia para determinado
# diretório, ou faz o que quiser com ele
# -------------------
# -------------------

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

# 1 - sobrescreve metadata
exiftool -all= -overwrite_original -ext "$1" .

# 2 - converte para mkv
for f in "$1"; do
ffmpeg -i "$f" -map_metadata -1 -c:v copy -c:a copy -map 0 "${f%.*}.mkv"
done

# 3 - remove mp4
sleep 3

for f in "$1"; do
rm -f "$f"
done

# ---- até aqui para cima, tudo bem.

## 4 ajusta título e sobrescreve metadata # não funcionou para mim
#for f in "$1"; do
#mkvpropedit "$f" -e info -s title="${f::-4}"
#mkvpropedit "$f" --tags all:
#mkvpropedit "$f" -d title
#done

# --- pesquisar pela web...

# ----- alias do meu .bashrc # funcionou no lugar do item ## 4
source MKV3b-remov-metadata-mkv.sh

# fim do script

Bash shell script encerrar processos PID

#!/usr/bin/env bash

# Titulo: kill_proc.sh
# Autor: semanickz
# Versão: 0.0
# Email:
# Site: https://semanickz.wordpress.com/
# Data: 06-05-2020_01:36:25
# Distro: GNU/Linux
# Exemplo de uso:
# Objetivo:
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção
# bash script para matar processos

clear
read -p "Vamos encerrar um processo. Tecle Enter para continuar : "
echo "Primeiro localizar o número do processo, o PID : "
read -p "Digite o nome do programa : " PROG
echo '--------------------------------'
echo "$PROG - Busca : "
echo '--------------------------------'
pidof "$PROG"
echo '--------------------------------'
echo 'Agora temos o número do PID do processo que queremos encerrar.'
read -p "Tecle o número PID e Enter para encerrar o processo, ou Ctrl+c para sair : " PID
killall "$PROG"
kill -9 "$PID" # mata de vez
kill -15 "$PID" # mais suave

echo "\nPronto. Tudo certo aí?\n"

# fim do script

Bash script tar.xz usando a extensão do arquivo

#!/usr/bin/env bash

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

# Titulo: tarxz_pela_extensao.sh
# Autor: semanickz
# Versão: 0.0
# Email:
# Site: https://semanickz.wordpress.com/
# Data: 04-05-2020_04:29:31
# Distro: GNU/Linux
# Exemplo de uso:
# Objetivo:
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

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

# -------------------------------
## CRIAR ARQUIVO tar.xz A SUA ESCOLHA EM UM DIRETÓRIO com read -p e loop for
# -------------------------------
# QUER DIZER QUE COMPACTA ARQUIVOS PELA EXTENSÃO
# -------------------------------
# Explicando:
# em um diretório com os mais variados tipos de arquivos vai compactar somente
# os que você determinar a extensão.
# -------------------------------
# alias fortarxz='clear ; echo ":Esteja dentro do diretório em questão" ;\
# sleep 3 ; echo "" ; read -p "Digite o nome do arquivo.tar.xz : " NOME ;\
# read -p "digite a extensão do arquivo (Ex: .txt) : " EXT ;\
# echo "Executando : " ; sleep 2 ; echo "" ; tar -cvf "$NOME" *"$EXT" ;\
# echo Listando... ; ls -t | head ; echo'
# -------------------------------

clear

echo ":Esteja dentro do diretório em questão"
sleep 3
echo ""

read -p "Digite o nome do arquivo.tar.xz : " NOME

read -p "digite a extensão do arquivo (Ex: .txt) : " EXT

echo "Executando : "
sleep 2
echo ""

tar -cvf "$NOME" *"$EXT"

echo 'Listando...'
ls -t | head
echo ""

echo ':Feito!'
echo ""

# ---------------- fim do script

lista_conteudo_arquivo_7z.sh

#!/usr/bin/env bash

# Titulo: lista_conteudo_arquivo_7z.sh
# Autor: semanickz
# Versão: 0.0
# Email:
# Site: https://semanickz.worpress.com
# Data: 03-05-2020_23:46:25
# Distro: GNU/Linux
# Exemplo de uso: ./lista_conteudo_arquivo_7z.sh
# Objetivo:
# Variaveis: f
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

# ------------------------------

# Você pode criar um alias com este script.

# alias cont7z='clear ; echo -e "\nListar conteúdo de arquivo 7z: \n" ; sleep 3 ; echo Local: ; pwd ; sleep 2 ; echo "" ; echo :Lista... ; ls -t | head ; sleep 2 ; echo "" ; read -p "Digite o nome com extensão do arquivo 7z : " CONT ; echo :Listando-Cont-7z: ; sleep 2 ; echo ; 7z l "$CONT" ; echo'

# ------------------------------

clear

echo -e "\nObjetivo: listar conteúdo de arquivo 7z: \n"
sleep 3

echo Local:
pwd
sleep 2

echo ""

echo :Lista...
ls -t | head
sleep 2

echo ""
read -p "Digite o nome com extensão do arquivo 7z : " CONT

echo :Listando-Cont-7z:
sleep 2

echo ""
7z l "$CONT"
echo ""

# fim do script

Linux grep dicas e truques para o dia a dia

GNU/Linux grep dicas e truques

---

Realmente depois de um tempo, o usuário Linux precisa muito do grep. Ele(a) tem anos de arquivos em backup, na nuvem, em HDs, anotados em dezenas de espécies de arquivos e diretórios diferentes que são mil, dois, três mil arquivos (pessoais), 800, 1000, 2000 scripts, 4, 8, 12, 60 mil linhas de código, 2000 aliases (alguns enormes) e mais trabalho chegando todo dia. Novas idéias que combinam bem com um trecho de código escrito 3 anos atrás e só se lembra de um pedacinho dele... Affff maria! Aí vem o grep para lhe salvar da mais profunda insanidade, porque quando tudo está lindo e fluindo bem, o ser humano sem querer tende a se perder na selva de coisas que criou. Fomos feitos para isto. Isto é tão normal.

---

SINTAXE DE COMANDO GREP:

1) grep 'palavra' nome_do_arquivo

2) grep 'string1 string2' nome_do_arquivo

3) cat outro_arquivo | grep 'algo'

4) comando | grep 'algo'

5) comando opção1 | grep 'informação'

6) grep --color 'info' nome_do_arquivo

---

Encontrando comandos em seu histórico. A maioria dos usuários fará algo assim:

history |grep

---

Conte e exiba os comandos mais usados em seu histórico.

history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq

---

O primeiro desses truques permite criar uma lista de arquivos que contenham qualquer sequência que você esteja procurando.
Ele usa a opção -l (lista apenas os nomes dos arquivos, não o conteúdo correspondente) mais a opção -r para repetir através de subdiretórios.
Isso pode ajudá-lo a encontrar arquivos que você pode estar procurando, sem distraí-lo com todos os motivos pelos quais determinados arquivos corresponderam aos seus critérios de pesquisa.

Exemplo:

grep -rl "string que quer encontrar" *

---

Outro truque útil do grep no Linux permite que você especifique uma expressão regular Perl no seu termo de pesquisa. Neste exemplo, podemos dar ao grep uma expressão que permita que ele corresponda a várias seqüências de caracteres, como egrep. Pode ficar muito mais complicado que os exemplos mostrados, mas aqui está a sintaxe básica:

grep -P "enquanto|para" *

grep -P 'foto\.gif' *

---

Você também pode combinar o grep com os comandos find para obter algumas extrações úteis de texto dos arquivos de destino.

find . -name "*.r" -exec grep "rho" '{}' \; -print

---

Obviamente, um dos truques grep mais úteis que encontrei até agora é o que fornece algum contexto junto com a sua descoberta. Em vez de exibir apenas as linhas que contêm o texto específico que você estava procurando, você pode imprimir as linhas que aparecem antes e depois das linhas correspondentes - geralmente necessárias para determinar se "correspondência" é realmente o que você está procurando.

Você pode especificar quantas linhas deseja ver antes da sequência correspondente com a opção "B" (para "antes") e o número de linhas após a correspondência com a opção "A" (para "depois").

grep -B 2 -A 2 echo *

---

Usar grep para buscar arquivo?

grep boo /etc/passwd

grep -i "boo" /etc/passwd

---

Usar grep recursivamente?

grep -r "192.168.1.5" /etc/

---

Usar grep para buscar apenas palavras?

Quando você pesquisa boo, o grep corresponde a fooboo, boo123 etc. Você pode forçar o grep a selecionar apenas as linhas que contêm correspondências que formam palavras inteiras, ou seja, correspondem apenas à palavra boo:

grep -w "boo" /caminho/para/arquivo

---

Contar a linha quando as palavras forem correspondidas? O grep pode relatar o número de vezes que o padrão foi correspondido para cada arquivo usando a opção -c (count):

grep -c 'muu' /caminho/para/arquivo

Observe também que você pode usar a opção -n, que faz com que o grep preceda cada linha de saída com o número da linha no arquivo de texto do qual foi obtida:

grep -n 'foo' /caminho/para/arquivo

---

Grep partida invertida? Você pode usar a opção -v para imprimir inverte a correspondência; isto é, corresponde apenas às linhas que não contêm a palavra especificada. Por exemplo, imprima todas as linhas que não contêm a barra de palavras:

grep -v bar /caminho/para/arquivo

---

Pipes Linux e comando grep? Comando grep é frequentemente usado com pipes. Por exemplo, imprimir o nome dos dispositivos de disco rígido:

dmesg | egrep '(s|h)d[a-z]'

---

Modelo nome da cpu:

cat /proc/cpuinfo | grep -i 'Model'

---

O comando acima pode ser usado sem o shell pipe:

grep -i 'Model' /proc/cpuinfo

---

Como faço para listar apenas os nomes dos arquivos correspondentes? Use a opção -l para listar o nome do arquivo cujo conteúdo mencione main ():

grep -l 'main' *.c

Finally, you can force grep to display output in colors:

grep --color vivek /etc/passwd

---

Grep é usado principalmente para filtrar a saída de um comando para restringir o que o usuário está procurando.

grep "dark" rgb.txt

---

Encontre uma instância de uma palavra com um número depois dela.

ls | grep "ppm[0-9]"

---

Exclua todos os arquivos mkv em um diretório usando grep e xargs. Você deve ter cuidado com este comando, isso não solicitará antes de excluir arquivos.

ls | grep "mkv" | xargs rm

---

Como retornar os nomes dos arquivos que não contêm uma determinada sequência de pesquisa.

grep -L "linux" *.txt

---

Imprima uma lista alfabética classificada de todos os arquivos que correspondem a uma determinada string ou palavra.

ls | grep by | sort | uniq -c | sort -n

---

Contar a quantidade de arquivos com um certo nome:

ls | grep log | wc -l

---

Bash shell script tar.xz que compacta, descompacta, divide e junta arquivos

#!/usr/bin/env bash

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

# autor: semanickz
# email:
# test_comp_desc_split_join_tarxz.sh
# data 03-05-2020
# site: https://semanickz.wordpress.com

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

clear

# ----------------------------------

echo -e "\n*** Abra o terminal onde está o arquivo a ser\
compactado. *** \n\nOBS: Para sair deste script tecle Ctrl+c"
sleep 2
echo ""

echo Local:
pwd
sleep 2
echo ""

echo -e "\n1- Confere os primeiros arquivos deste diretório... \n"
ls -t | head -15
sleep 2
echo ""

# -----------------------------------

echo ""

echo -e "\nOfereço 4 opções (serviços) tar.xz.\
Escolha um número e tecle Enter.\n"
sleep 3

echo -e "\n: Para compactar tecle 1 \n: Descompactar tecle 2 \n: Para dividir\
um arquivo compactado grande em pedaços de 1GB tecle 3 \n: Para juntar um\
arquivo dividido tecle 4 \n: Para sair tecle Ctrl+c : \n"
read INPUT

case $INPUT in
1)
echo -e "\nCompactando tar.xz :\n"
sleep 2
echo -e "Você digitou: $INPUT, compactando...\n"
echo :Listando...
ls -t | head -20
read -p "Digite o titulo do arquivo tar.xz. Ex.\
meu_arquivo.tar.xz : " FILE
echo -e "\nVocê digitou: $FILE\n"
sleep 2
echo ""
read -p "Digite o nome completo (com espaços entre eles)\
do(s) arquiv(os)/past(as) a ser(em) compactados : " ARQUIVOS
echo -e "\nVocê digitou: $ARQUIVOS\n"
echo :Listando...
ls -t | head -15
sleep 2
echo ""
sleep 2
tar -cJf "$FILE" "$ARQUIVOS"
echo -e "\nFeito! \n"
echo Confere:
ls -t | head
;;
2)
echo -e "\nDescompactando tar.xz\n"
sleep 2
echo -e "Você digitou: $INPUT\n"
echo :Listando
ls -t | head
sleep 2
read -p "Digite o nome do arquivo tar.xz. : " FILE
echo -e "\nVocê digitou: $FILE\n"
echo :Listando...
ls -t | head -20
sleep 2
echo ""
sleep 2
echo "\nExecutando...\n"
sleep 2
tar -xf "$FILE"
echo -e "\nFeito! \n"
echo Confere:
ls -t | head
;;
3)
echo -e "\nDividindo arquivo tar.xz"
sleep 2
echo -e "\nVocê digitou $INPUT\n"
echo :Listando...
echo ""
ls -t | head
read -p "Digite o nome do arquivo tar.xz. : " FILE
echo -e "\nVocê digitou: $FILE\n"
sleep 2
split -b 1024m "$FILE" "$FILE".part
echo -e "\nFeito! \n"
echo Confere:
ls -t | head
;;
4)
echo -e "\nJuntando arquivos tar.xz\n"
sleep 2
echo -e "Você teclou : $INPUT; juntando...\n"
ls -t | head
read -p "Digite o nome do arquivo SEM a ext .part : " FILE
echo -e "\nVocê digitou: $FILE\n"
sleep 2
echo Local:
pwd
sleep 2
cat "$FILE".parta* >backup.tar.xz.completo
echo -e "\nFeito! \n"
echo Confere:
ls -t | head
;;
*)
echo "\nEu só sei 1, 2, 3 e 4. Tente novamente,\
ou tecle Ctrl+c para sair.\n"
esac

# --------------------------- fim do script

Bash shell script – Juntar arquivos .zip

#!/usr/bin/env bash

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

# test_juntar_arquivos_zip.sh
# data: 02052020

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

clear

# --------------------------- #

echo Listando...
ls -t | head
echo
echo Local:
pwd
echo

# --------------------------- #

read -p "Juntar arquivos zip? Tecle Enter : "
echo

# --------------------------- #

echo "Digite o nome do arquivo SEM ext .part : "
read ARQUIVO
echo -e "\nPara juntar arquivos zip divididos tecle 1 (um). Para sair tecle 2 : \n"
while :
do
read INPUT
case $INPUT in
1)
echo -e "\nVocê teclou : $INPUT\n"
cat "$ARQUIVO".parta* >backup.zip.completo
break
;;
2)
echo -e "\nVocê teclou : $INPUT\n"
echo -e "\nSaindoooo...\n"
sleep 2
echo -e "\n\e[1;33;40m*** E tá tudo resolvido! ***\e[0m\n"
sleep 2
exit
;;
esac
done

# --------------------------- #

exit 0

# --------------------------- #

# zip -r nome_do_file.zip arquivo1 folder1

# fim do script

Bash shell script grep encontre duas palavras

#!/usr/bin/env bash

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

# test_encontre_a_palavra.sh
# 02052020

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

clear

echo Abra-no-Diretório-onde-está-o-arquivo.
echo Para-recomeçar-digite-Ctrl+c
echo

echo Local:
pwd

echo
echo Lista:
ls -tCF | head -25

echo
echo "Digite o arquivo em que procura a palavra : "
read filename

echo
echo "Digite a palavra que quer encontrar : "
read word

echo
cat $filename | grep "$word"
echo

echo Local:
pwd
echo

echo "Digite o caminho para buscar em todo o diretório : "
read dot

echo
grep -r -w "$word" "$dot" | less
echo

echo -----------------------------
echo
sleep 2

echo "Procura por duas palavras diferentes? Digite a primeira : "
read pri
echo
echo "Digite a segunda : "
read seg

echo Lista:
ls -tCF | head

echo
echo "Digite o arquivo em que procura a palavra : "
read mfile

grep -E -w "$pri|$seg" "$mfile"

# fim do script

Bash script que busca palavras num texto

#!/bin/bash

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

# test_grepbuscarpalavra.sh
# data: 01052020

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

clear

# informa executando variáveis dentro do echo
echo -e "\nVocê está em : $(pwd)\n"

# listar
/bin/ls -t | head -20

# verifica se o diretório existe
if [[ -d $PATH ]] ; then
echo ""
echo "Saiba que o diretório existe."
fi

# busca com grep verifica a existência do arquivo
read -p "Digite o nome do arquivo : " filename

if [[ -f $filename ]] ; then
echo "O $filename existe."
read -p "Digite a palavra que busca: " word
grep "$word" "$filename"
else
echo "O $filename não existe."
fi

# fim do script

Bash shell script: zip e unzip

#!/usr/bin/env bash

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

# test_compactar_e_desc_zip.sh

# data: 01052020

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

clear

# -------------------------------------------

echo -e "\n*** Abra o terminal onde está o arquivo a ser compactado. *** \n\nOBS: Para sair deste script tecle Ctrl+c"

sleep 2

# -------------------------------------------

echo ""

echo -e "\nConfere os primeiros arquivos deste diretório... \n"

ls -t | head -15

echo ""

read -p "Digite o titulo do arquivo zip a ser criado.\
Ex. meu_arquivo.zip : " FILE # armazena URL

echo -e "Você digitou: $FILE" # imprime a FILE

echo -e "\n1- Confere os primeiros arquivos deste diretório... \n"

ls -tCF | head -21

echo ""

read -p "Digite titulo completo (com espaços entre eles)\
dos arquiv(os)/past(as) a ser(em) compactados : " ARQUIVOS

echo -e "Você digitou: $ARQUIVOS"

# -------------------------------------------

echo -e "\n\e[1mPara compactar em zip digite um (1),\
descompactar digite dois (2)\e[0m\n"

while : # loop while
do # fechamento de do é done
read DIGITE # armazena digito 1 ou 2
case $DIGITE in # caso o digito seja...
# fechamento de case é esac

# --------------------------------------- #

1) # dígito 1 executa...

echo -e "Você digitou: $DIGITE, compactando... "

zip -r "$FILE" "$ARQUIVOS"

break # sai após executar comando
;;

# --------------------------------------- #

2) # dígito 2 executa...
echo -e "Você digitou $DIGITE, descompactando... "

unzip "$FILE" # comando 2

break # sai após executar comando
;;

# --------------------------------------- #

*)
echo -e "Desculpe eu só entendo 1 e 2." # se não for nem 1 nem 2...

;;
esac # fechamento de case e sai

# --------------------------------------- #

done # fechamento de do e acabou

# --------------------------------------- #

echo ""

echo -e "\n:2- Confere a lista de arquivos:\n"

sleep 2

ls -tCF | head -15

# --------------------------------------- #

echo ""

read -p "Para deletar o arquivo original Tecle Enter.\
Para sair sem deletar tecle Ctrl+c."

echo ""

ls -tCF | head

echo ""

read -p "Certeza mesmo? Ok, tecle Enter : "

rm -f "$FILE"

# --------------------------------------- #

echo -e "\n:3- Confere a lista de arquivos:\n"

sleep 2

ls -tCF | head -15

# --------------------------------------- #

echo -e "\n\e[1;33;40m*** E tá tudo resolvido! ***\e[0m\n" # mensagem final

# --------------------------------------- #

# zip -r nome_do_file.zip arquivo1 folder1

# fim do script

Linux execução do bash shell script

Linux Execução do Bash Shell no Shell e no Bash shell script

Execução do Shell - Se você deseja usar a saída de uma execução do shell dentro de uma string, pode fazê-lo com um cifrão seguido de parênteses.

($ ())

Por exemplo, o comando whoami imprimirá seu usuário atual. Para usá-lo em uma cadeia, envolva whoami na sintaxe de execução do shell. Digito no terminal:

---

echo "Olá, $(whoami)!"

Resultado:

Olá ArceuValenti!

---

echo "Aqui é $(pwd)"

---

echo "Listando os mais novos primeiro : $(ls -t | head)"

echo -e "\nListando os mais novos primeiro :\n\n$(ls -t | head)\n"

---

Aprenda esta po**a de uma vez cac*t* do c*r*io!!!

---

Veja este caso abaixo digito no terminal:

VAR="O local é : $(pwd) - Listando... $(ls -t | head)"

---

A variável VAR que possui dois comandos de execução em si, está armazenada na seção deste terminal onde estou. Quero executar esta variável VAR! Tento:

---

echo "$(VAR)" # Parece seguro, mas... Não funciona!

echo $(VAR) # Parece inseguro e... Também não funciona!

echo $VAR # Funciona, mas me sinto jogado aos lobos.

echo ${VAR} # Funciona, mas me sinto jogado as hienas.

echo "${VAR}" # Funciona direito e me sinto seguro como um neném seio materno!

---

Agora imagine que poderia colocar dezenas de comandos e códigos negros como a noite coletados na web numa variável, criar outras mais com mais comandos dentro delas e executar tudo de uma vez só com um objetivo específico cheio de vigor e amor/ódio numa rede, num arquivo em nuvem... Enviar de alguma forma para alguma coisa/alguém... Nem pensar! Um simples link num comentário te leva a estes cógigos negativos. Tenha atenção e cuidado.

---

Continuando...

Entrada do usuário? Declaramos uma variável no último exemplo, mas também podemos fazer com que o usuário defina o valor de uma variável dinamicamente. Por exemplo, em vez de apenas fazer com que o script diga Olá, Mundo !, podemos fazer com que ele solicite o nome da pessoa que está chamando o script e, então, produza esse nome. Faremos isso usando o comando read.

---

Eu crio estas variáveis abaixo:

ddd='Quem ser você?'
eee='Arceu Valenti'
fff='Olá! Como vai'
ggg='Ora, eu sô'
hhh='Colé o pobrema?'

---

Digito no terminal:

clear ; ddd='Quem ser você?' ; eee='Arceu Valenti' ; fff='Olá! Como vai' ; ggg='Ora, eu sô' ; hhh='Colé o pobrema?' ; echo "$ddd" ; echo ; sleep 2 ; echo "$ggg $eee $hhh" ; sleep 2 ; echo ; echo "$fff seu $eee!" ; sleep 2 ; echo ; echo "Senhor $eee?" ; sleep 2 ; echo ; echo "$hhh" ; sleep 2 ; echo

---

Resultado:

~:$ clear ; ddd='Quem ser você?' ; eee='Arceu Valenti' ; fff='Olá! Como vai' ; ggg='Ora, eu sô' ; hhh='Colé o pobrema?' ; echo "$ddd" ; echo ; sleep 2 ; echo "$ggg $eee $hhh" ; sleep 2 ; echo ; echo "$fff

Quem ser você?

Ora, eu sô Arceu Valenti Colé o pobrema?

Olá! Como vai seu Arceu Valenti!

Senhor Arceu Valenti?

Colé o pobrema?

~:$

---

No script abaixo o usuário que dá o nome quando executa o script:

#!/usr/bin/env bash

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

# qservc.sh

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

echo 'Quem ser você?'

read quem

echo "Olá! Como vai $quem!"

---

Assim:

$ ./qservc.sh

$ Arceu

$ Olá! como vai Arceu!

---

Por isto que os nerds Linux são paranóicos com tudo. Compreendeu? Não? Nem eu!

---

Até Breve!

---

Bash script compactar arquivos tar.xz

#!/usr/bin/env bash

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

# test_compactar_e_desc_tar-xz.sh

# data: 30042020

# instale: xz-utils

# O que é um arquivo tar.xz? O tar é um utilitário que combina vários arquivos
# em um único arquivo. A principal vantagem de um utilitário como o tar está
# na transferência de arquivos. Devido à sobrecarga, a transferência de 100
# arquivos de 1 KB levará mais tempo do que a transferência de um arquivo de
# 100 KB. Usando o tar, você pode arquivar vários arquivos em um único
# arquivo, economizando tempo e largura de banda ao transferir o arquivo.
# Mas o tar não comprime arquivos. Se você usar o tar para combinar 100
# arquivos de 1 KB cada, o arquivo tar resultante provavelmente terá cerca
# de 100 KB. Para economizar ainda mais tempo e largura de banda,
# são utilizados utilitários de compactação. Essas ferramentas de compactação
# reduzirão o tamanho do arquivo tar resultante. XZ é uma dessas ferramentas
# de compressão e utiliza o algoritmo de compressão LZMA. É por isso que o
# arquivo tar.xz resultante em nosso cenário pode ser consideravelmente menor
# que 100 KB, digamos 50 KB.

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

clear

# -------------------------------------------

echo -e "\n*** Abra o terminal onde está o arquivo a ser compactado. *** \n\nOBS: Para sair deste script tecle Ctrl+c"

sleep 2

# -------------------------------------------

echo ""

echo -e "\nConfere o 20 primeiros arquivos deste diretório... \n"

ls -t | head

echo ""

read -p "Digite o do arquivo tar.xz a ser criado.\
Ex. meu_arquivo.tar.xz : " FILE # armazena URL

echo -e "Você digitou: $FILE" # imprime a FILE

echo -e "\n1- Confere o 20 primeiros arquivos deste diretório... \n"

ls -tCF | head -21

echo ""

read -p "Digite titulo completo (com espaços entre eles)\
dos arquiv(os)/past(as) a ser(em) compactados : " ARQUIVOS

echo -e "Você digitou: $ARQUIVOS"

# -------------------------------------------

echo -e "\n\e[1mPara compactar em tar.xz digite um (1),\
descompactar digite dois (2)\e[0m\n"

while : # loop while
do # fechamento de do é done
read DIGITE # armazena digito 1 ou 2
case $DIGITE in # caso o digito seja...
# fechamento de case é esac

# --------------------------------------- #

1) # dígito 1 executa...

echo -e "Você digitou: $DIGITE, compactando... "

tar -cJf "$FILE" "$ARQUIVOS"

break # sai após executar comando
;;

# --------------------------------------- #

2) # dígito 2 executa...
echo -e "Você digitou $DIGITE, descompactando... "

tar -xf "$FILE" # comando 2

break # sai após executar comando
;;

# --------------------------------------- #

*)
echo -e "Desculpe eu só entendo 1 e 2." # se não for nem 1 nem 2...

;;
esac # fechamento de case e sai

# --------------------------------------- #

done # fechamento de do e acabou

# --------------------------------------- #

echo ""

echo -e "\n:2- Confere a lista de arquivos:\n"

sleep 2

ls -tCF | head -15

# --------------------------------------- #

echo ""

read -p "Para deletar o arquivo original Tecle Enter.\
Para sair sem deletar tecle Ctrl+c."

rm -f "$FILE"

# --------------------------------------- #

echo -e "\n:3- Confere a lista de arquivos:\n"

sleep 2

ls -tCF | head -15

# --------------------------------------- #

echo -e "\n\e[1;33;40m*** E tá tudo resolvido! ***\e[0m\n" # mensagem final

# --------------------------------------- #

# fim do script

Senha de Linux ou UNIX protege arquivos?

A senha de Linux ou UNIX protege arquivos?

# ----------------

Como protejo arquivos com senha?

# ----------------

O GNU/Linux e outros sistemas Unix oferecem fortes permissões de arquivo e o conceito de ACL (lista de controle de acesso) na segurança do computador Linux/UNIX, usada para forçar a separação de privilégios. No entanto, nenhum deles oferece uma senha para proteger arquivos.

Você pode usar a ferramenta de criptografia e assinatura GNU gpg (GNU Privacy Guard).

É um conjunto de software criptográfico.

# ----------------

Muitos novos usuários de UNIX/Linux ficam confusos com esse fato.

A solução é usar os seguintes comandos para criptografar ou descriptografar arquivos com uma senha.

Use o comando GNU gpg.

Use o comando mcrypt.

Use o comando openssl.

# ----------------

MCRYPT COMANDO

Mcrypt é um programa simples de criptografia, um substituto para a antiga criptografia unix. Ao criptografar ou descriptografar um arquivo, um novo arquivo é criado com a extensão .nc e modo 0600. Istale pelo software center do seu sistema GNU/Linux.

O novo arquivo mantém a data de modificação do original. O arquivo original pode ser excluído especificando o parâmetro -u.

---

EXEMPLOS:

Encriptar data.txt file:

$ mcrypt data.txt

Output:

Enter the passphrase (maximum of 512 characters)
Please use a combination of upper and lower case letters and numbers.
Enter passphrase:
Enter passphrase:
A new file is created with the extension .nc i.e. data.txt.nc:

$ ls data.txt.nc
$ cat data.txt.nc

Descritografar data.txt.nc file:
$ mcrypt -d data.txt.nc

Output:

Enter passphrase:
File data.txt.nc was decrypted.
Verify that file was decrypted:

$ ls data.txt
$ cat data.txt

# ----------------

COMANDO OPENSSL

O OpenSSL é um kit de ferramentas de criptografia que implementa os protocolos de rede Secure Sockets Layer (SSL v2 / v3) e Transport Layer Security (TLS v1) e os padrões de criptografia relacionados exigidos por eles.

Você pode usar o programa openssl, que é uma ferramenta de linha de comando para usar as várias funções de criptografia da biblioteca de criptografia do OpenSSL a partir do shell.

Pode ser usado para criptografar e descriptografar arquivos com uma senha.

# ----------------

Por exemplo vou criptografar file.txt para file.out usando AES de 256 bits no modo CBC

$ openssl enc-aes-256-cbc -salt -in file.txt -out file.out.

# ----------------

Descriptografe o arquivo criptografado file.out

$ openssl enc-d -es-256-cbc -in file.out

Onde, enc: codificação com cifras.

# ----------------

Uma opção bem fácil também, é usar o SEAHORSE-NAUTILUS. Instale pelo software center do seu sistema GNU/Linux.

# ----------------

Teste com arquivos copiados, até pegar prática.

# ----------------

Você pode até criar um bash shel script para facilitar mais ainda...

#!/usr/bin/env bash

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

# autor: Arceu Valenti_1000%
# test_cryptografar_mcrypt.sh
# data: 29042020
# versão: 0.0
# uso: ./test_cryptografar_mcrypt.sh

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

clear

echo -e "\nAbra o terminal onde está o arquivo a ser criptografado e tecle\
Enter.\nPara sair tecle Ctrl+c"

sleep 2

echo ""

# ------------------------ #

echo -e "\nListando os primeiros arquivos...\n"

sleep 2

ls -tCF | head -15

echo ""

# ------------------------ #

read -p "Digite o nome completo do arquivo : " FILE # armazena URL

echo -e "Você digitou: $FILE" # imprime a FILE

# ------------------------ #

echo "" # parágrafo

# ------------------------ #

echo -e "\e[1mPara criptografar digite um (1), descriptografar dois (2)\e[0m"

while : # loop while
do # fechamento de do é done
read DIGITE # armazena digito 1 ou 2
case $DIGITE in # caso o digito seja...
# fechamento de case é esac

# ------------------------ #

1) # dígito 1 executa...
echo -e "Você digitou: $DIGITE, critografando... "

mcrypt "$FILE" # comando 1

break # sai após executar comando
;;

# ------------------------ #

2) # dígito 2 executa...
echo -e "Você digitou $DIGITE, descriptografando... "

mcrypt -d "$FILE" # comando 2

break # sai após executar comando
;;

# ------------------------- #

*)
echo -e "Desculpe eu só entendo 1 e 2." # se não for nem 1 nem 2...

;;
esac # fechamento de case e sai

# ------------------------ #

done # fechamento de do e acabou

# ------------------------ #

echo ""

read -p "Para deletar o arquivo original Tecle Enter.\
Para sair tecle Ctrl+c."

rm -f "$FILE"

# ------------------------ #

echo -e "\n:Confere a lista de arquivos:\n"

sleep 2

ls -tCF | head -15

# ------------------------ #

echo -e "\n\e[1;33;40m*** E tá tudo resolvido! ***\e[0m\n" # mensagem final

# ------------------------ #

# fim do script

---

Até Breve!

---

Bash abrir um terminal por um arquivo shell script?

---

Linux como abrir um terminal em um shell script e executar um comando

---

Como criar um script que abra as janelas do terminal e execute comandos nelas?

# ---------------------------------

No gnome-terminal, vá para Editar -> Preferências do perfil -> Título. Clique na guia comando. Selecione Segure o terminal no menu suspenso chamado Quando o comando sair. Você deve criar um novo perfil para isso e executar com ele.

gnome-terminal --window-with-profile=NAMEOFTHEPROFILE -e command

# ---------------------------------

Exemplo:

gnome-terminal --window-with-profile=DUPLOTERM -e command

# ---------------------------------

Comandos para colocar no shell script:

gnome-terminal -- commando

Exemplo:

gnome-terminal -- epiphany -p "https://start.duckduckgo.com/ & exit

# ---------------------------------

Ou:

xterm -e command

Ou:

konsole -e command

Também:

terminal -e command

# ---------------------------------

Para fazer o terminal ficar quando o comando acabar:

No Konsole tem a opção --noclose flag.

No Xterm tem a opção -hold flag.

# ---------------------------------

Um Bash shell script para testar isto?

# ---------------------------------

#!/usr/bin/env bash

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

# test_abrir_terminal_executar_cmd.sh

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

clear

# ----------------------- #

function abreterm(){

echo "URL exemplo: https://start.duckduckgo.com/"

sleep 2

read -p "Digite a URL que deseja abrir : " URL

echo "Executando... Para fechar o terminal tecle ctrl+c."

sleep 2

gnome-terminal -- epiphany -p "$URL" &

}

abreterm

# fim do script

# ---------------------------------

OBS:
Tavez fosse mais legal fazer assim:

# ---------------------------------

#!/usr/bin/env bash

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

# test_abrir_programa_e_sair.sh

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

clear

# ----------------------- #

function abreprog(){

echo "URL exemplo: https://start.duckduckgo.com/"

sleep 2

read -p "Digite a URL que deseja abrir : " URL

echo "Executando..."

sleep 2

firejail epiphany -p "$URL" & exit

}

abreprog

exit 0

# fim do script

# ---------------------------------

Até Breve!

:)

# ---------------------------------

Bash script rotacionar imagem

#!/usr/bin/env bash

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

# test_jpg_rotate_90.sh
# rotaciona 90 graus, sobrescrevendo
# metadata

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

# ---------------------------------- #

function rotacionar(){

for img in *.jpg; do
# otimiza
jpegoptim "$img"
# sobrescreve
exiftool -all= -overwrite_original -ext "$img"
# rotaciona
mogrify -rotate 90 "$img"
done

}

rotacionar

# ---------------------------------- #

# pausa
sleep 3

# espaço
echo ""

# ---------------------------------- #

function otimizapng(){

# ---------------------------------- #

# otimiza
optipng *.png
# sobrescreve metadata
exiftool -all= -overwrite_original -ext *.png

}

otimizapng

echo ""

echo -e "\nFeito! \n"

# ---------------------------------- #

# OBS:
# para rotacionar png:
# mogrify -rotate 90 *.png

# fim do script

Teste bash shell script telegram bot envia

#!/usr/bin/env bash

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

# test_telegram_bot_envia_stickers.sh
# precisa do: 1) token, 2) chat_id, 3) código do sticker
# (acha com getupdates info de um sticker enviado a alguém)

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

# ---- Variáveis ---- #

# TOKEN1=""

# URL_UP='https://api.telegram.org/bot"$TOKEN1"/getupdates'

# URLMSG="https://api.telegram.org/bot$TOKEN4/sendMessage"

# URL1="https://api.telegram.org/bot$TOKEN/sendMessage"

URL2="https://api.telegram.org/bot$TOKEN4/sendMessage"

# ------------------- #

clear

echo "*** Busque atualizações de bot e procure o id do bate-papo ***"

sleep 2

echo ""

read -p "Digite o Token de um bot : " TOKENUP

curl https://api.telegram.org/bot"$TOKENUP"/getUpdates

echo ""

echo "*** Colete informações... ***"

sleep 2

echo ""

# ------------------- #

read -p "*** Vamos ver os updates de outro bot? Tecle Enter ***"

read -p "Digite o TOKEN de outro bot : " TOKEN1

# ------------------- #

echo "Verificando..."

sleep 2

# curl "$URL_UP"

curl https://api.telegram.org/bot"$TOKEN1"/getupdates

echo ""

echo "*** Colete informações... ***"

sleep 2

echo ""

# ------------------- #

echo "*** Enviar sticker ***"

sleep 2

echo ""

read -p "Digite o token : " TOKEN3

read -p "Digite o chat_id : " CHAT_ID

read -p "Digite o código do sticker : " STICKER

# ------------------- #

# --------------- ANOTAÇÕES:

# EXEMPLOS:

# para enviar stickers

# https://api.telegram.org/bot/sendSticker?chat_id=&sticker=BCBBADAgADOQADflsDlKEqOOd72VLKAg

# https://api.telegram.org/bot"$TOKEN3"/sendSticker?chat_id=&sticker="$STICKER"

# URL2='https://api.telegram.org/bot"$TOKEN3"/sendSticker?chat_id=&sticker="$STICKER"'

# ------------------- #

# para enviar arquivos

# curl "chat_id=$CHAT_ID&sticker=$STICKER" https://api.telegram.org/bot"$TOKEN3"/sendDocument

# curl https://api.telegram.org/bot"$TOKEN3"/sendSticker?chat_id="$CHAT_ID"&sticker="$STICKER"

# teste alterado para enviar stickers:

# ------------------- #

# teste - ou este...
curl -v -F "chat_id=$CHAT_ID&sticker=$STICKER" https://api.telegram.org/bot"$TOKEN3"/sendSticker

sleep 3

# teste - ou este...
curl https://api.telegram.org/bot"$TOKEN3"/sendSticker?chat_id="$CHAT_ID"&sticker="$STICKER"

# ------------------- #

echo "Confere..."

sleep 2

echo ""

curl https://api.telegram.org/bot"$TOKEN3"/getupdates

echo ""

echo "*** Telegram bot enviar mensagem ***"

echo ""

# URL2="https://api.telegram.org/bot$TOKEN4/sendMessage"

read -p "Digite o Token : " TOKEN4

read -p "Digite o chat_id : " CHAT_ID

read -p "Digite a mensagem : " MSG

curl -s -X POST "$URL2" -d chat_id="$CHAT_ID" -d text="$MSG"

echo ""

echo ":Confere..."

curl https://api.telegram.org/bot"$TOKEN4"/getupdates

# fim do script

Bash scripts para bot Telegram

Linux bash scripts para usar em bots no Telegram.

---

#!/usr/bin/env bash

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

# test_telegr_bot_send_stickers.sh
# precisa do: 1) token, 2) chat_id, 3) código do sticker
# (acha com getupdates info de um sticker enviado a alguém)

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

# ---- Variáveis ---- #

# TOKEN1=""

# URL_UP='https://api.telegram.org/bot"$TOKEN1"/getupdates'

# ------------------- #

read -p "*** Vamos ver os updates do bot. Tecle Enter ***"

read -p "Digite o TOKEN do bot : " TOKEN1

# ------------------- #

echo "Verificando..."

sleep 2

# curl "$URL_UP"

curl https://api.telegram.org/bot"TOKEN1"/getupdates

echo ""

# ------------------- #

echo "*** Enviar sticker ***"

sleep 2

echo ""

read -p "Digite o token : " TOKEN

read -p "Digite o chat_id : "

read -p "Digite o numero do sticker : "

# ------------------- #

# EXEMPLO:
# <a href="https://api.telegram.org/bot/sendSticker?chat_id=&sticker=BCBBADAgADOQADfyekzlsDlKEqOOd72VLKAg">https://api.telegram.org/bot/sendSticker?chat_id=&sticker=BCBBADAgADOQADfyekzlsDlKEqOOd72VLKAg

curl https://api.telegram.org/bot"TOKEN"/sendSticker?chat_id="CHAT_ID"&sticker="TICKER"

# ------------------- #

echo "Confere..."
sleep 2

echo ""

curl https://api.telegram.org/bot"TOKEN1"/getupdates

echo ""

# fim do script

---

#!/usr/bin/env bash

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

# test_bot_enviar_arquivo.sh

# telegram bot enviar arquivo. tem que ter token e chat_id

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

clear

read -p "Digite o Token : " TOKEN

read -p "Digite o chat_id : " CHAT_ID

read -p "Digite o nome/caminho do arquivo : " FILE

curl -v -F "chat_id=$CHAT_ID" -F document=@"$FILE" https://api.telegram.org/bot"TOKEN"/sendDocument

echo ""

# fim do script

---

#!/usr/bin/env bash

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

# tgr_msg.sh

# telegram bot envia mensagem

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

URL="https://api.telegram.org/bot$TOKEN/sendMessage"

clear

read -p "Digite o Token : " TOKEN

read -p "Digite o chat_id : " CHAT_ID ; read -p "Digite a mensagem : " MSG

curl -s -X POST "$URL" -d chat_id="$CHAT_ID" -d text="$MSG"

echo ""

# fim do script

---

#!/usr/bin/env bash

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

# trg_search_id.sh

# busque atualizações de bot e procure o id do bate-papo

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

read -p "Digite o Token : " TOKEN

curl https://api.telegram.org/bot"TOKEN"/getUpdates

echo ""

# fim do script

---

Até breve!

Bash script telegram bot enviar mensagens

Para obter o ID do bate-papo em grupo e enviar mensagens, faça o seguinte. Adicione o Telegram BOT ao grupo. Obtenha a lista de atualizações para o seu bot:

https://api.telegram.org/botTOKEN/getUpdates

Exemplo:

https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates e procure pelo "chat"

{"update_id":8393,"message":{"message_id":3,"from":{"id":7474,"first_name":"AAA"},"chat":{"id":,"title":""},"date":25497,"new_chat_participant":{"id":71,"first_name":"NAME","username":"YOUR_BOT_NAME"}}}

Esta é uma amostra da resposta quando você adiciona seu BOT a um grupo. Use o "id" do objeto "chat" para enviar suas mensagens.

---

#!/usr/bin/env bash

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

# Nome: test_script_telegram_bot_mensagem.sh
# Um script Bash simples que envia a mensagem
# "Hello World" através da API do Telegram.
# Pode enviar outras mensagens também
# Precisa do:
# 1) token:
#
# 2) chat_id:
# Para saber melhor veja os posts anteriores

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

# VARIÁVEIS:

TOKEN=TOKEN (SEQUENCIA DE NUMEROS E LETRAS)

CHAT_ID=-CHAT_ID (NUMEROS)

MESSAGE="Alô Mundo!"

URL="https://api.telegram.org/bot$TOKEN/sendMessage"

# --------------------------- #

# curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE"

echo -e "*** Vamos usar o bot para conversar no Telegram ***"

sleep 2

echo ""

# --------------------------- #

read -p "Digite uma mensagem : " MSG

echo "Você digitou : $MSG"

echo ""

# --------------------------- #

curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MSG"

echo ""

echo "Feito!"

# --------------------------- #

# ENVIAR PELO TERMINAL MENSAGEM A UM DETERMINADO CHAT ESPECÍFICO USANDO CURL:

# Precisa do:

# 1) token: SEQUENCIA DE NÚMEROS E LETRAS

# 2) chat_id: -NUMEROS

# --------------------------- #

# Para descobrir CHAT_ID e outras coisas...

# https://api.telegram.org/botTOKEN/getupdates/

# --------------------------- #

# Comandos:

# 1) curl -s -X POST https://api.telegram.org/bot/sendMessage -d chat_id=- -d text="Muito legal estar aqui pessoal!"

# 2) curl -s -X POST https://api.telegram.org/bot/sendMessage -d chat_id=- -d text="Muito legal! Vamos conversar aqui gente!"

# 3) curl -s -X POST https://api.telegram.org/bot/sendMessage -d chat_id=- -d text="Como é que faz para fazer pedidos aqui? Gostaria de pedir uns..."

# --------------------------- #

# fim do script

Criar Telegram bot rodando no Linux?

Telegram como criar um bot? Um bot bem básico no Linux só para iniciar?

Aqui o que consegui entender...

---

1) Precisa do: BotFather

2) Pode usar uma plataforma para programar o bot por exemplo:

Menu Builder Bot ou chatfuelbot

---

OBS:

Telegram comandos botfather - Comandos do botfather:

Eu posso ajudá-lo a criar e gerenciar bots do Telegram. Se você é novo na API Bot, consulte o manual (https://core.telegram.org/bots). Você pode me controlar enviando estes comandos:

/newbot - create a new bot
/mybots - edit your bots [beta]

Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot

Bot Settings
/token - generate authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode (https://core.telegram.org/bots/inline)
/setinlinegeo - toggle inline location requests (https://core.telegram.org/bots/inline#location-based-results)
/setinlinefeedback - change inline feedback (https://core.telegram.org/bots/inline#collecting-feedback) settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode (https://core.telegram.org/bots#privacy-mode) in groups

Games
/mygames - edit your games (https://core.telegram.org/bots/games) [beta]
/newgame - create a new game (https://core.telegram.org/bots/games)
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game

---

Comandos que usei no botfather do Telegram:

1) /start
2) /newbot

meumeubot

username: meumeu

---

Feito! Parabéns pelo seu novo bot. Você o encontrará em:

t.me/meumeubot

---

Com isso feito, você recebeu a chave de API do seu bot. A chave da API é como o Telegram sabe que o código que você escreve está associado a esse bot em particular. Todo bot tem sua própria chave de API e você não deve compartilhá-lo com ninguém, ou alguém pode invadir seu bot e fazer com que ele pratique más ações. Isso encerra nossa conversa com o BotFather por enquanto no código!

---

O TOKEN - Use this token to access the HTTP API:

numeros-e-letras-do-meu-token

---

Agora você pode adicionar uma descrição, sobre seção e foto de perfil para o seu bot, consulte /help para obter uma lista de comandos. A propósito, quando você terminar de criar seu bot legal, execute um ping no nosso Suporte de Bot se quiser um nome de usuário melhor para ele. Apenas verifique se o bot está totalmente operacional antes de fazer isso.

---

Meumeu

username: meumeubot

t.me/meumeubot

---

Mantenha seu token seguro e armazene-o com segurança, ele pode ser usado por qualquer pessoa para controlar seu bot. Para uma descrição da API Bot, consulte esta página:

https://core.telegram.org/bots/api

---

O bot pode funcionar no Linux.

Configurando as gemas e o diretório do bot.

Abra o terminal e faça mkdir telegram-bot.

Isso cria um novo diretório para os arquivos do seu bot.

É melhor mantê-los confinados em uma pasta para facilitar o gerenciamento. Navegue para o diretório com cd telegram-bot e faça o seguinte:

mkdir ~/Documentos/telegram-bot

cd ~/Documentos/telegram-bot

touch Gemfile

touch bot.rb

atom Gemfile

atom bot.rb

---

Oneliner?

mkdir ~/Documentos/telegram-bot; cd ~/Documentos/telegram-bot ; touch Gemfile; touch bot.rb; atom Gemfile ; atom bot.rb

---

OBS:

Isso cria dois arquivos em branco, um para especificar as gemas necessárias e outro para o código do bot. O último comando abre esses dois arquivos.

---

CONTINUANDO...

---

No arquivo Gemfile cole o seguinte:

source 'https://rubygems.org'
gem 'telegram_bot'

---

Isso diz ao Bundler para pegar a interface do Ruby para a API do Telegram no rubygems.org. Para concluir a configuração da gema, volte ao seu terminal e digite bundle. É isso para a configuração das gemas, agora estamos finalmente entrando no código.

---

Codificando seu primeiro bot de Telegram

---

O código real que será executado constantemente no servidor está dentro do bot.rb. ele está vazio no momento, mas aqui vamos vincular a gema do Telegram que acabamos de agrupar e criar um bot. Não há muito código para escrever.

---

Ele examina o que cada parte do código faz e o escreve à medida que avançamos.

require 'telegram_bot'
token = 'TOKEN'
bot = TelegramBot.new(token: token)

(Substitua o TOKEN pelo token da API que você copiou do BotFather)

---

O Ruby facilita bastante adivinhar o que o código fará. As três linhas acima adicionam a funcionalidade bot do Telegram ao seu arquivo e, em seguida, criam um novo objeto bot da classe TelegramBot, autenticado com seu token para que o programa saiba para onde enviar os dados.

A próxima parte é um grande loop. Parece confuso no começo, mas é fácil de separar.

---

bot.get_updates(fail_silently: true) do |message|
puts "@#{message.from.username}: #{message.text}"
command = message.get_command_for(bot)

message.reply do |reply|
case command
when /start/i
reply.text = "Tudo que posso fazer é dizer Olá. Tente o comando /greet."
when /greet/i
reply.text = "Olá, #{message.from.first_name}. 🤖"
else
reply.text = "IEu não tenho idéia do que #{command.inspect} significa."
end
puts "enviando #{reply.text.inspect} to @#{message.from.username}"
reply.send_with(bot)
end
end

---

A primeira linha diz ao bot para continuar ouvindo comandos. E, quando recebe um comando para passá-lo para a variável de mensagem.
A linha de put registra o comando no seu terminal para que você possa ver o que está acontecendo enquanto o bot é executado.
As ações de resposta do bot são armazenadas em uma declaração de caso.
A entrada da instrução de caso é alimentada a partir da variável de mensagem depois de limpa pelo método get_command_for da gema.
O texto de resposta do bot é definido dependendo do comando armazenado e, finalmente, enviado com send_with antes de o loop reiniciar. Com essa configuração, agora você pode encontrar seu bot no Telegram, enviar os comandos /start e /greet e assisti-lo em ação.

---

Para fazer isso, salve as alterações no Atom e execute:

ruby bot.rb

No terminal. Enquanto esse terminal estiver aberto e funcionando, seu bot enviará respostas!

---

Personalizando seu novo e brilhante bot - O bot que você acabou de criar é bom, mas não é muito interessante.

Os bits básicos estão lá, o que significa que você pode trocá-los e ampliá-los facilmente.

As partes a serem observadas ao personalizar são as linhas when/ command/ i e o texto entre as aspas nas linhas reply.txt.

Essas são as entradas que seu bot aceita e as mensagens que ele envia de volta como respostas. Portanto, se você quiser dizer algo diferente como resposta ao comando /greet, altere o valor de reply.text abaixo da linha de comando greet (quando /greet /i).

---

Aqui está uma variação que você pode tentar:

when /greet/i
greetings = ['bonjour', 'hola', 'hallo', 'sveiki', 'namaste', 'salaam', 'szia', 'halo', 'bom dia']
reply.text = "#{greetings.sample.capitalize}, #{message.from.first_name}!"

---

Aqui, criei uma matriz com algumas maneiras diferentes de dizer olá e, em seguida, adicionei uma à mensagem aleatoriamente usando o método de amostra

---

Transformando seu bot em algo incrível - você pode adicionar quantos comandos, respostas e recursos quiser ao bot.

A maior parte é imaginação e muito pesquisa em ferramentas de busca na web à medida que avança.

Se você quiser aprender muitas coisas aplicáveis a esse bot, comece com Learn Ruby the Hard Way para entender o básico do idioma.

Com um pouco de prática e uma dependência saudável do StackOverflow, você poderá:

Conectar outras APIs para extrair dados de fontes como Airtable, Slack, RSS ou Twitter.

É aí que entra a funcionalidade realmente interessante - você pode criar um bot que atua como uma interface de conversação para um conjunto de dados ou recursos, como um bot que retorna resultados de pesquisa do Twitter ou postagens no Slack.

---

ARMAZENE A ENTRADA DO USUÁRIO EM UM BANCO DE DADOS.

Você pode criar um bot do Telegram que ofereça suporte automatizado aos usuários ou responda a perguntas e armazene seus endereços de e-mail em um banco de dados. A gema Sequel facilita a criação, gravação, edição e leitura de bancos de dados.

Construa uma aventura de texto. Colossal Cave Adventure, um dos primeiros jogos de terminal, foi transportado para o Telegram como um bot.

Se você precisar de inspiração, poderá ler o código-fonte bot de outras pessoas e verificar uma lista de bots do Telegram. Tente descobrir como eles funcionam e recriá-los como prática.

---

Executando seu bot 24/7 - No momento, seu bot está sendo executado no seu terminal no seu computador.

Tudo bem até que você precise reiniciar o computador, o wi-fi cai ou o computador entra no modo de suspensão. Quando isso acontece, ele encerra o processo do bot e os usuários não recebem uma resposta dele. O processo de mover seu bot de um ambiente de desenvolvimento (seu computador em que você usou o Atom para gravá-lo) para um ambiente de produção (um servidor) é conhecido como implantação.

---

Existem algumas opções para implantar seu bot, mas nos dois casos começaremos fazendo o upload dos arquivos no Bitbucket.

O Bitbucket permite que você use o git, um sistema de controle de versão que ajuda você a fazer e acompanhar com segurança as alterações no código do seu bot.

Ao fazer o upload dos arquivos do seu bot para o Bitbucket, você pode usar o Bitbucket como uma maneira de capturar os arquivos do bot quando estiver conectado ao host. Inscreva-se no Bitbucket e crie um novo repositório.

---

Com o terminal aberto e no mesmo diretório que o código-fonte do seu bot, digite o seguinte:

git init
git add .
git commit -m 'initial commit'

---

Agora, siga as instruções mostradas pelo Bitbucket depois de criar o novo repositório. Os meus são: Depois de inserir esses dois comandos destacados no meu terminal e fornecer a minha senha do Bitbucket quando solicitado, os arquivos são enviados. Com seu código vivendo na nuvem, é hora de escolher uma maneira de implantar.

---

Implantando com um Raspberry Pi - Este pequeno computador Raspberry Pi na minha mesa hospeda vários bots - Um Raspberry Pi é um ótimo investimento se você planeja criar e implantar bots - você pode obter um a partir de US $ 7 mais o preço de um cartão SD. Ele usa muito pouca energia, para que você possa mantê-la ligada o tempo todo e não se preocupar com o custo. Pode ser tentador comprar um pacote que vem com teclado, mouse e estojo, mas tudo o que você precisa é de um carregador USB, cartão SD, cabo Ethernet e o próprio computador. Você provavelmente já tem a maioria dessas coisas em seu escritório. Implantando com um servidor em nuvem - Você não precisa possuir o computador em que seu bot está executando, pode usar a memória e a energia da máquina de outra pessoa para executá-lo remotamente. As soluções populares para implantação na nuvem incluem Amazon Web Services (AWS), DigitalOcean e Heroku.

---

Dos três, os mais novos acho que são são DigitalOcean e Heroku. Ao se inscrever no DigitalOcean e criar uma nova conta, você aprenderá como se conectar ao servidor via SSH e iniciar o console. A partir daqui, é o mesmo processo que você fez na sua máquina local, independentemente do servidor que você está usando.

No final, parece ser, vamos para a implantação real.

---

O processo de implantação - em um servidor novo - seja um Raspberry Pi ou um servidor em nuvem como o Digital Ocean - você precisará instalar Ruby, Bundler e Git:

sudo apt-get update
sudo apt-get upgrade
curl -L https://get.rvm.io | bash -s stable --ruby
sudo apt-get install bundler
sudo apt-get install git

---

Em seguida, crie um novo diretório para o seu bot, navegue até lá e faça o download dos arquivos do Bitbucket com os seguintes comandos:

mkdir bots
cd bots
git clone https://[email protected]/meu_repo_bitbucket/telegram-bot.git

---

Lembre-se de substituir o URL acima (https://meu_repo_bitbucket…) pelo URL do repositório do seu bot no Bitbucket.

Você encontrará todo o comando clone por meio do Bitbucket, portanto não precisará fazer isso manualmente. Em seguida, digite bundle para instalar as dependências da gem e, em seguida, ruby bot.rb para iniciar a execução permanente do bot.

---

Nota:

Se você estiver acessando seu servidor via SSH, precisará executar o bot com:

nohup ruby bot.rb

Para garantir que o bot não pare de funcionar quando a sessão SSH for encerrada. Agora você está livre para fechar a janela do terminal, seguro de que seu bot está emitindo um bipe silencioso em segundo plano. Isso conclui sua primeira facada em um bot do Telegram. Ao longo do caminho, você aprendeu sobre o terminal, Ruby, gems, a API do Telegram e como implantar um bot em um servidor.

---

Converter webm para mkv

#!/usr/bin/env bash

# Titulo: conv_lt_webm_to_mkv.sh
# Autor: claytu_dinamitti_1000%
# Versão: 0.0
# Email:
# Site:
# Data: 23-04-2020_11:10:14
# Distro: GNU/Linux
# Exemplo de uso:
# Objetivo:
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

# -------------------- # CONVERTENDO DE WEBM PARA MKV

for f in *.webm; do
ffmpeg -i "$f" -map_metadata -1 -c:v copy -c:a copy -map 0 "${f%.*}.mkv"
done

# -------------------- # Ajusta título

for f in *.mkv; do
mkvpropedit "$f" -e info -s title="${f::-4}"
done

# -------------------- # sobrescrever metadata de mkv

for f in *.mkv; do
mkvpropedit "$f" --tags all: # remove a metadata?
done

echo -e "\n\e[1;33;40m*** Feito! ***\e[0m\n"

# fim do script

Bash script vídeo ou áudio

#!/usr/bin/env bash

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

# Titulo: test_video_ou_audio.sh
# Autor: claytu_tir_1000%
# Versão: 0.0
# Email:
# Site:
# Data: 23-04-2020_10:05:28
# Distro: GNU/Linux
# Exemplo de uso:
# Objetivo: usar ferramenta para obter arquivo de video ou de áudio
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

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

clear # limpa a tela

# --------------------------------------- #

echo -e "\e[1m*** Ferramenta para download com youtube-dl ***\e[0m"

# --------------------------------------- #

read -p "Digite a URL : " URL # armazena URL

echo -e "Você digitou $URL" # imprime a URL

# --------------------------------------- #

echo -e "\e[1m*** Baixar vídeo digite (1) ou áudio (2) ***\e[0m"
# oferece duas opções

while : # loop while
do # fechamento de do é done
read DIGITE # armazena digito 1 ou 2
case $DIGITE in # caso o digito seja...
# fechamento de case é esac

# --------------------------------------- #

1) # dígito 1 executa...
echo -e "Você digitou: $DIGITE, baixando vídeo... "

firejail youtube-dl -cwi "$URL" # comando 1

break # sai após executar comando
;;

# --------------------------------------- #

2) # dígito 2 executa...
echo -e "Você digitou $DIGITE, baixando áudio... "

firejail youtube-dl --extract-audio --audio-format mp3 "$URL" # comando 2

break # sai após executar comando
;;

# --------------------------------------- #

*)
echo -e "Desculpe eu só entendo 1 e 2." # se não for nem 1 nem 2...

;;
esac # fechamento de case e sai

# --------------------------------------- #

done # fechamento de do e acabou

# --------------------------------------- #

echo -e "\n\e[1;33;40m*** E tá tudo resolvido! ***\e[0m\n" # mensagem final

# --------------------------------------- #

# fim do script

Linux como verificar a soma de verificação de uma ISO do Linux e confirmar se ela não foi adulterada?


Linux como verificar a soma de verificação de uma ISO do Linux e confirmar se ela não foi adulterada? Como este processo funciona? O processo de verificação de uma ISO é um pouco complexo. Uma soma de verificação é um dado de tamanho pequeno de um bloco de dados digitais com o objetivo de detectar erros que podem ter sido introduzidos durante sua transmissão ou armazenamento. Portanto, uma soma de verificação é uma longa sequência de dados que contém várias letras e números. Você geralmente os encontra ao baixar arquivos da Web, por exemplo Imagens de distribuição do Linux, pacotes de software etc. O uso mais comum de somas de verificação é para verificar se um arquivo baixado está corrompido.

---

Como um checksum é gerado?

Cada soma de verificação é gerada por um algoritmo de soma de verificação. Sem entrar em detalhes técnicos, digamos que ele pega um arquivo como entrada e gera o valor da soma de verificação desse arquivo.

---

Você fará o download do arquivo ISO do Linux no site da distribuição Linux - ou em outro lugar - como de costume.

Você fará o download de uma SOMA DE VERIFICAÇÃO e de sua ASSINATURA DIGITAL no site da distribuição Linux. Podem ser dois arquivos TXT separados, ou você pode obter um único arquivo TXT contendo os dois dados. Você receberá uma chave PGP pública pertencente à distribuição Linux. Você pode obter isso no site da distribuição Linux ou em um servidor-chave separado, gerenciado pelas mesmas pessoas, dependendo da sua distribuição Linux. Você usará a chave PGP para verificar se a assinatura digital da soma de verificação foi criada pela mesma pessoa que fez a chave; nesse caso, os mantenedores dessa distribuição Linux. Isso confirma que a soma de verificação em si não foi violada. Você gera a soma de verificação do seu arquivo ISO baixado e verifica se ele corresponde ao arquivo TXT da soma de verificação que você baixou. Isso confirma que o arquivo ISO não foi adulterado ou corrompido. O processo pode diferir um pouco para diferentes ISOs, mas geralmente segue esse padrão geral. Por exemplo, existem vários tipos diferentes de somas de verificação. Tradicionalmente, as somas MD5 são as mais populares. No entanto, as somas do SHA-256 agora são mais frequentemente usadas pelas distribuições modernas do Linux, pois o SHA-256 é mais resistente a ataques teóricos. Aqui é sobre as somas do SHA-256 aqui, embora um processo semelhante funcione para as somas do MD5. Algumas distribuições Linux também podem fornecer somas SHA-1, embora sejam ainda menos comuns. Da mesma forma, algumas distros não assinam suas somas de verificação com o PGP.

Você só precisará executar algumas etapas, mas o processo é muito mais vulnerável. Afinal, se o invasor puder substituir o arquivo ISO para download, ele também poderá substituir a soma de verificação. Sim, mas não a soma do site oficial. Tendo a soma do site oficial para comparar com a soma da iso baixada acredito que é seguro. Eu só faço o que posso com as ferramentas que os desenvolvedores nos oferecem. Então o que escrevo aqui eu executo. mais que isto exede minhas capacidades.

---

Tem distros que você devia baixar o arquivo de soma de verificação sha256sum.txt e a chave PGP sha256sum.txt.gpg. Por exemplo o Linux Mint.

---

As FERRAMENTAS para verificar md5, sha1 e sha256 se chamam:

1) md5sum
2) sha1sum
3) sha256sum

---

O que precisamos:

1) a ISO

2) o arquivo de soma de verificação (sha256sum.txt).

3) o arquivo de assinatura digital da soma de verificação e a chave PGP (sha256sum.txt.gpg).

---

Então, mudava para a pasta para a qual foram baixados e executa:

1) gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 0FF405B2

2) sha256sum --check sha256sum.txt

---

Mas tem uma maneira mais fácil oferecida pelas distros Linux hoje em dia se na página oficial de uma distro ela oferece por exemplo um sha256sum:

df43424db9bfc5d2d28b7c64326716001f1780053d95a0c122a514b59a198544

Eu copio e guardo este sha256sum. Agora devo obter a soma sha256sum da iso que baixei. Então eu abro o terminal onde está a iso que baixei e executo:

1) sha256sum nome_da_iso_que_baixei.iso

Se baixei uma iso chamada: ubuntu-mate-16.10-desktop-amd64.iso, eu uso a ferramenta sha256sum neste arquivo assim:

sha256sum ubuntu-mate-16.10-desktop-amd64.iso

Se a soma de verificação gerada corresponder à fornecida na página de download do Ubuntu MATE, isso significa que nenhum dado foi alterado durante o download do arquivo - em outras palavras, o arquivo baixado não está corrompido.

---

Se fosse MD5:

2) md5sum nome_da_iso_que_baixei.iso

E confiro os dois no olho mesmo.

---

Ou se baixei do site oficial o sha256sum.txt:

2) sha256sum --check sha256sum.txt

---

Com que precisão isso funciona? Se você está se perguntando com que precisão essas somas de verificação detectam arquivos corrompidos - se você excluir ou alterar mesmo um caractere de qualquer um dos arquivos de texto dentro da imagem iso, o algoritmo de soma de verificação gerará um valor totalmente diferente para a imagem alterada. E isso definitivamente não corresponderá à soma de verificação fornecida na página de download.

---

Linux comando mv exemplos

Linux comando mv exemplos

---

O comando mv no Linux é usado para mover e renomear arquivos e diretórios. O mv é um dos comandos obrigatórios no Linux. mv significa movimento e é essencialmente usado para mover arquivos ou diretórios de um local para outro. A sintaxe é semelhante ao comando cp no Linux, porém há uma diferença fundamental entre esses dois comandos. Você pode pensar no comando cp como uma operação de copiar e colar. Enquanto o comando mv pode ser equiparado à operação de recortar e colar. O que significa que, quando você usa o comando mv em um arquivo ou diretório, o arquivo ou diretório é movido para um novo local e o arquivo/diretório de origem não existe mais. É uma operação de recortar e colar, não é?

1) comando cp = copiar e colar

2) comando mv = recortar e colar

---

O comando mv também pode ser usado para renomear um arquivo. O uso do comando mv é bastante simples e, se você aprender algumas opções, ele se tornará ainda melhor.

mv file1.txt file.2.txt file3.txt target_directory

---

Você também pode usar padrões regex para mover vários arquivos correspondentes a um padrão. Por exemplo, no exemplo acima, em vez de fornecer todos os arquivos individualmente, você também pode usar o padrão regex que corresponde a todos os arquivos com a extensão .txt e os move para o diretório de destino.

mv *.txt target_directory

---

Como renomear um arquivo - Um uso essencial do comando mv é renomear arquivos. Se você usar o comando mv e especificar um nome de arquivo no destino, o arquivo de origem será renomeado para o arquivo de destino.

mv source_file target_directory/target_file

---

No entanto, se o target_file já existir, ele será sobrescrito sem perguntar. O que significa que o conteúdo do arquivo de destino existente será alterado com o conteúdo do arquivo de origem. Você não é obrigado a fornecer um diretório de destino. Se você não especificar o diretório de destino, o arquivo será renomeado e mantido no mesmo diretório.

---

Lembre-se: Por padrão, o comando mv substitui se o arquivo de destino já existir. Esse comportamento pode ser alterado com a opção -n ou -i.

---

mv source_directory target_directory

---

No exemplo acima, se o diretório de destino existir, o diretório de origem inteiro será movido dentro do diretório de destino. O que significa que o source_directory se tornará um subdiretório do target_directory. Como renomear um diretório

---

Renomear um diretório é o mesmo que mover um diretório. A única diferença é que o diretório de destino ainda não deve existir. Caso contrário, o diretório inteiro será movido dentro dele, como vimos no diretório anterior.

mv source_directory path_to_non_existing_directory

---

Como lidar com a substituição de um arquivo enquanto se move? Se você estiver movendo um arquivo e já houver um arquivo com o mesmo nome, o conteúdo do arquivo existente será substituído imediatamente. Isso pode não ser o ideal em todas as situações. Você tem algumas opções para lidar com o cenário de substituição. Para evitar a substituição de arquivos existentes, você pode usar a opção -n. Dessa forma, o mv não substituirá o arquivo existente.

mv -n source_file target_directory

---

Você também pode usar a opção de atualização -u ao lidar com a substituição. Com a opção -u, os arquivos de origem serão movidos para o novo local apenas se o arquivo de origem for mais novo que o arquivo existente ou se ele não existir no diretório de destino.

---

Para resumir:

-i: Confirme antes de substituir
-n: Sem substituição
-b: Substituindo pelo backup
-u: Substitua se o arquivo de destino for antigo ou não existir.

---

Mas talvez você queira substituir alguns arquivos. Você pode usar a opção interativa -i e ela perguntará se você deseja substituir os arquivos existentes.

mv -i source_file target_directory
mv: overwrite 'target_directory/source_file'?

---

Você pode digitar y para substituir o arquivo existente ou n para não substituí-lo. Há também uma opção para fazer backups automáticos. Se você usar a opção -b com o comando mv, ele substituirá os arquivos existentes, mas antes disso, criará um backup dos arquivos substituídos.

---

mv -b file.txt target_dir/file.txt
ls target_dir
file.txt file.txt~

---

Por padrão, o backup do arquivo termina com ~. Você pode alterá-lo usando a opção -S e especificando o sufixo:

mv -S .back -b file.txt target_dir/file.txt
ls target_dir
file.txt file.txt.back

---

Você também pode usar a opção de atualização -u ao lidar com a substituição. Com a opção -u, os arquivos de origem serão movidos para o novo local apenas se o arquivo de origem for mais novo que o arquivo existente ou se ele não existir no diretório de destino.

Para resumir:

-i: Confirme antes de substituir
-n: Sem substituição.
-b: Substituindo pelo backup
-u: Substitua se o arquivo de destino for antigo ou não existir.

Como mover com força os arquivos. Se o arquivo de destino estiver protegido contra gravação, você será solicitado a confirmar antes de substituir o arquivo de destino. Para evitar esse prompt e substituir o arquivo imediatamente, você pode usar a opção force -f.

mv -f file1.txt target

---

Anotação rmvb para mp4

Testando um script bash para converter rmvb para mp4.

#!/usr/bin/env bash

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

# Titulo: conv_lt_rmvb_2_mp4.sh
# Autor: arceu_valenti_1000%
# Versão: 0.0
# Email:
# Site:
# Data: 15-04-2020_09:35:04
# Distro: GNU/Linux
# Exemplo de uso:
# Objetivo:
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

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

function rmvb2mp4(){

clear

# ------------------------- #

# SOBREESCREVE METADATA 1

#echo "*** SOBREESCREVE METADATA 1 ***"

#for i in *.rmvb; do
# exiftool "$i" --tags all: # Não
#done

# ------------------------- #

# AJUSTA TITULO 1

echo "*** AJUSTA TITULO 1 ***"

for f in *.rmvb; do
ffmpeg -i "$f" -e info -s title="${f::-4}"
sleep 2
done

# ------------------------- #

# CONVERTE DE RMVB PARA MP4 SOBRESCREVE METADATA

echo "*** CONVERTE DE RMVB PARA MP4 SOBRESCREVE METADATA ***"

# for f in *.rmvb; do ffmpeg -i "$f" -map_metadata -1 -c:v copy -c:a copy -map 0 "${f%.*}.mp4"; done # NAO

# for f in *.rmvb; do ffmpeg -i "$f" -c:a copy "${f%.*}.mp4"; done # NAO

# Loop for simplificado:

# for %%G in (*.rmvb) do ffmpeg -i "%%~G" -c:v h264 -c:a aac "%%~nG.mp4" # SIM

# Este converte h264 video e aac audio. Estes codecs parecem ser
# bem comuns hoje em dia.

# O padrão do vídeo é CRF 23, enquanto o áudio deve ter 128k.
# Isso deve oferecer qualidade razoável em talvez um décimo da taxa de bits
# mostrado na imagem de 9300k, talvez abaixo de 1000k.

# ------------------------- #

for f in *.rmvb; do
ffmpeg -i "$f" -c:v h264 -c:a aac "${f%.*}.mp4"
done

# TRABALHO PESADO ESTA CONVERSÃO
# Oneliner?

# for f in *.rmvb; do ffmpeg -i "$f" -c:v h264 -c:a aac "${f%.*}.mp4"; done

# ------------------------- #

#for f in *.rmvb; do
# ffmpeg -i "$f" -map_metadata -1 -c:v copy -c:a copy "${f%.*}.mp4"
# sleep 3
# ls -ltF | head
#done

# ONELINER?

# for f in *.rmvb; do ffmpeg -i "$f" -map_metadata -1 -c:v copy -c:a copy "${f%.}.mp4"; sleep 3; ls -ltF | head; done

# for f in *.rmvb; do ffmpeg -i "$f" -c:a copy "${f%.}.mp4"

# ------------------------- #

# QUEBRA DE LINHA

# for f in *.rmvb; do ffmpeg -i "$f" \
# -map_metadata -1 -c:v copy \
# -c:a copy "${f%.}.mp4"; \
# sleep 3; ls -ltF | head; \
# done

# ------------------------- #

# DELETA RMVB

for file in *.mp4; do
ls -lt | head
read -p "Sair: Ctrl+c. Deletar rmvb? Para isto, tecle Enter : "
rm -f "$file"
done

# ------------------------- #

# SOBREESCREVE METADATA 2

echo "*** SOBREESCREVE METADATA 2 ***"

for i in *.mp4; do
exiftool "$i" --tags all:
done

# ------------------------- #

# AJUSTA TITULO 2

echo "*** AJUSTA TITULO 2 ***"

for f in *.mp4; do
ffmpeg -i "$f" -e info -s title="${f::-4}"
sleep 2
done

# ------------------------- #

# EXIBE METADATA

echo "*** EXIBE METADATA ***"

for f in *.mp4; do
exiftool "$f"
done

# ------------------------- #

echo "Feito!"

}

rmvb2mp4

# NOTAS:
# ffmpeg -i input.mp4 -map_metadata -1 -c:v copy -c:a copy output.mp4

# fim do script

Loop for exemplo prático

Loop for exemplo mp3 para wav

Um exemplo prático - para loops, faça mais do que repetir listas de números.

Por exemplo, use a saída de outros comandos como a lista. O exemplo a seguir mostra como converter arquivos de áudio de MP3 para WAV:

---

#!/usr/bin/env bash

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

# nome: lt_conv_mp3_2_wav.sh
# objetivo converter mp3 para wav

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

function mp32wav () {

# ------------------ #

clear

# ------------------ #

# sobrescreve metadata loop

for i in *.mp3; do
exiftool -all= -overwrite_original -ext "$i" .
done

# ------------------ #

# melhora ganho de audio mp3 loop

for i in *.mp3; do
mp3gain -c -r "$i"
done

# ------------------ #

# CONVERTE PARA WAV loop

for i in *.mp3; do
ffmpeg -i "$i" "${i/%mp3/wav}"
done

# ------------------ #

# sobrescreve metadata

for i in *.wav; do
exiftool -all= -overwrite_original -ext "$i" .
done

}

mp32wav

# fim do script

---

A lista neste exemplo é todo arquivo com a extensão .MP3 na pasta atual e a variável é um arquivo. O comando converte o arquivo MP3 em WAV. No entanto, você provavelmente precisará instalar esta ferramenta usando um gerenciador de pacotes primeiro.

Zipar uma pasta usando linha de comando no Linux

Zip uma pasta na linha de comando do Linux

---

A sintaxe para usar o comando zip é bastante direta.

zip [option] arquivo_zip_a_criar.zip entrada1 entrada2

---

Embora possa haver várias opções, aqui o básico para não ter confusão.

Se o único objetivo é criar uma pasta zip a partir de vários arquivos e diretórios, use um comando como este.

zip -r nome_do_folder.zip arquivo1 diretorio1

---

A opção -r será recursiva em diretórios e compactará seu conteúdo também. A extensão .zip nos arquivos de saída é opcional, pois .zip é adicionado por padrão.

Você pode ver os arquivos sendo adicionados à pasta compactada durante a operação zip.

---

Você pode usar a opção -e para criar uma pasta zip protegida por senha no Linux.

---

Você nem sempre está restrito ao terminal para criar arquivos compactados. Você pode fazer isso graficamente também com um gerenciador de compactação. Instale-o pelo software center do seu sistema operacional GNU/Linux.

---

Sintaxe:

zip [option] arquivo_zip_a_criar.zip entrada1 entrada2

---

Comando:

zip -r zipado_pacote.zip meu_arquivo1 meu_diretorio1

---

Onde:

ARQUIVO ZIP A SER CRIADO: zipado_pacote.zip

ARQUIVOS QUE IRÃO SER ZIPADOS: meu_arquivo1 meu_diretorio1

---

Um script para zipar ~/bin:

#!/usr/bin/env bash

# Titulo: test_zip_bin.txt.sh
# Autor: claytu_dinamitti_1000%
# Versão:
# Email:
# Site:
# Data:
# Distro:
# Exemplo de uso:
# Objetivo:
# Variaveis:
DDT=`date +%d-%m-%Y`
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

# zip [option] nome_arq_zipado entrada1 entrada2

function zipbin () {

zip -r zip_bin_$DDT.zip ~/bin

}

zipbin

# fim do script

---

Teste converter mkv para avi

#!/usr/bin/env bash

# Titulo: test_conv_mkv_2_avi.sh
# Autor: claytu_dinamitti_1000%
# Versão: 0.0 Forever!
# Email:
# Site:
# Data: 11-04-2020_10:13:54
# Distro:
# Exemplo de uso: ./test_conv_mkv_2_avi.sh
# Objetivo: Aprendizado
# Variaveis: VANUTIL=’variavel_util_aqui’
# TODO – Não sei o que lá…
# FIXME – Tudo – Ajustar o título original do arquivo avi…
# XXX – Não teste em originais. Teste em cópias primeiro.

# ————————————————————– #

# 1 – Sobreescrever metadata de mkv

# Usar: mkvpropedit *.mkv –tags all:

echo ‘Comando 1 – Sobrescrever metadata…’
sleep 3

for i in *.mkv; do
mkvpropedit “$i” –tags all:
done

# ————————————————————– #

# Ajustar o título original do arquivo

echo ‘2 – Ajustar o título original do arquivo mkv…’
sleep 3

for i in *.mkv; do
mkvpropedit “$i” -e info -s title=”${i::-4}”
done

# ————————————————————– #

# 2 – Converter de mkv para mp4 e de mp4 para avi

echo ‘Comando 3 – Converter de mkv para mp4 e de mp4 para avi…’

# inspirado em:
# ffmpeg -i input.mkv -codec copy output.mp4
# Converter mkv para mp4

for f in *.mkv; do
ffmpeg -i “$f” -codec copy “$(basename “${f/.mkv}”).mp4″
sleep 4
done

# ————————————————————– #

for f in *.mp4; do
ffmpeg -i “$f” -codec copy “$(basename “${f/.mp4}”).avi”
sleep 4
done

# ————————————————————– #

echo ‘Feito!’
sleep 3

# ————————————————————– #

echo ‘4 – Listando os dez primeiros arquivos: ‘

# Uma função para algo tão simples…
# Kkkkk…
# Estou aprendendo a usar estes troços.
# Fazer o quê?

function listar () {
ls -t | head
sleep 4
}

listar

# Oneliner?
# function listar () { ls -tLC | head; sleep 4; }; listar

# ————————————————————– #

echo ‘5 – Removendo TODOS os arquivos mkv e mp4 em 8 segundos a menos que tecle Ctrl+c para interromper…’

sleep 8

function removemkvmp4 () {
rm -rf *.mkv
rm -rf *.mp4
}

removemkvmp4

# ————————————————————– #

echo ‘6 – Confere agora os dez primeiros arquivos: ‘

ls -t | head

sleep 4

# ————————————————————– #

echo ‘7 – Ajustar o título original do arquivo avi…’
sleep 3

# Testando não sei o que fazer…
# Devia testar individualmente…
# Um destes funciona.

for f in *.avi; do
mkvpropedit “$f” -e info -s title=”${f::-4}” # usado em mkv.
ffmpeg -i “$f” -e info -s title=”${f::-4}” # acho que não vai…
exiftool “$f” -e info -s title=”${f::-4}” # talvez em mp4. avi veremos…
done

# ————————————————————– #

echo ‘Listando…’

sleep 3

ls -tCF | head

sleep 4

# ————————————————————– #

echo ‘8 – Exibindo metadata dos arquivos avi deste diretório: ‘

sleep 2

pwd

sleep 4

# Usando função

function avimetadata () {
exiftool *.avi
}

avimetadata

# ————————————————————– #

# fim do script

Linux script converter em lote png para jpg

#!/usr/bin/env bash

# titulo: script_png2jpg.sh
# autor: claytu_dinamitti_1000%
# data:
# uso:

# Comandos:
# jpegoptim *.JPG
# jpegoptim *.jpg
# optipng *.JPG

# ——————————————- #

echo ‘Comando 1’

for png in *.png; do
optipng “$png”
done

# ——————————————- #

echo ‘Comando 2’

ls -1 *.png | xargs -n 1 bash -c ‘convert “$0” “${0%.png}.jpg”‘

# ——————————————- #

# OBS: Converter PNG em JPG (vice-versa) usando os comandos ls e xargs. O comando ls permite listar todas as suas imagens png e o xargs possibilita criar e executar um comando de conversão da entrada padrão para converter todas as imagens .png em .jpg. – Explicação sobre as opções usadas no comando acima. -1 O sinalizador diz ao ls para listar uma imagem por linha. -n Especifica o número máximo de argumentos, que é 1 para o caso. -c Instrui o bash para executar o comando fornecido. ${0% .png} .jpg Define o nome da nova imagem convertida, o sinal% ajuda a remover a extensão de arquivo antiga. – Usei o comando ls -ltr para listar todos os arquivos por data e hora modificadas.’

# ——————————————- #

echo ‘Comando 3’

for jpg in *.jpg; do
jpegoptim “$jpg”
done

# ——————————————- #

# optipng *.PNG
# optipng *.png

# ——————————————- #

echo ‘Comando 4’

jpegoptim *.jpg

optipng *.png

# ——————————————- #

echo ‘Tudo feito!’

# fim do script

Linux script funções aninhadas

Linux shell script funções 11042020

Funções aninhadas. Uma das características mais interessantes das funções é que elas podem se chamar e também outras funções. Uma função que se chama é conhecida como função recursiva. O exemplo a seguir demonstra o aninhamento de duas funções:

#!/usr/bin/env bash

# Nome: chama_funcao_de_outra.sh

# Chamando uma função de outra.

clear

numero_um () {
echo “Esta é a primeira função falando …”
numero_dois
}

numero_dois () {
echo “Esta é a segunda função falando …”
}

# Chamando a função um.

numero_um

# fim do script

Para treinar seria legal tentar escrever pelo menos um shell script teste por dia. Nestes shell scripts haveriam funções e loops por exemplo. Na falta de idéias vale tentar escrever um script antigo de uma maneira diferente.

Tentar colocar funções em shell scripts. Dentro de uma função um loop? Uma função que converte jpg para png:

#!/usr/bin/env bash

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

# Nome: funcao_conv_jpg_2_png.sh
# OBS:
# Sempre efetue um backup de todas as suas imagens antes de utilizar qualquer
# programa de otimização, pois, caso algo ocorra inesperadamente você tem a
# possibilidade de reverter rapidamente os arquivos para os arquivos originais.
# Pode ser que os utilitários alterem as permissões do arquivos, certifique-se
# sempre que a imagem está disponível no navegador.
# Para funcionar este shell script precisa dos programas exiftool,
# jpegoptim, optipng

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

# —————————————- #

# primeiro sobreescrever metadata

read -p “Sobreescrever metadata de jpg? Tecle Enter para continuar ou Ctrl+c para sair: ”

echo ‘Função 1 sobreescrever:’

function sobreescrever () {

exiftool -all= -overwrite_original -ext jpg .
sleep 4

}

sobreescrever

echo ‘*** Função 1 executada ***’

# —————————————- #

read -p “Otimizar jpg? Tecle Enter para continuar ou Ctrl+c para sair: ”

echo ‘Função 2 otimizar jpg:’

function otimizar () {

jpegoptim *.jpg

jpegoptim *.JPG

optipng *.JPG

sleep 4

}

otimizar

echo ‘*** Função 2 executada ***’

# —————————————- #

read -p “Converter jpg para png? Tecle Enter para continuar: ”

echo ‘Função 3 converter jpg para png’

# OBS: dentro da função 3 é executado um loop for

function converter () {

for image in *.jpg; do convert “$image” “${image%.jpg}.png”; done

sleep 3

}

converter

echo ‘*** Função 3 executada ***’

# —————————————- #

read -p “Sobreescrever metadata e otimizar png? Tecle Enter para continuar: ”

echo ‘Função 4 sobreescrever metadata de png’

function metapng () {

exiftool -all= -overwrite_original -ext png .
sleep 3
optipng *.png
optipng *.PNG
sleep 3

}

metapng

echo ‘*** Função 4 executada ***’

# —————————————- #

read -p “Listar 10 arquivos do diretório que foram alterados? Tecle Enter para continuar: ”

echo ‘Função 5 listar os 10 primeiros’

function listahead () {

ls -t | head

}

listahead

echo ‘*** Função 5 executada ***’

echo ‘Feito!’

# fim do script

Comandos Linux e shell script revisão

Comandos Linux Revisao

---
O que é um sistema operacional? Sempre que você liga o computador, você vê uma tela na qual pode realizar atividades diferentes, como escrever, navegar na Internet ou assistir a um vídeo ele está lá.

O que faz o hardware do computador funcionar assim?

Como o processador do seu computador sabe que você está solicitando a execução de um arquivo mp3?

Bem, é o SISTEMA OPERACIONAL ou o KERNEL que faz esse trabalho. Um kernel é um programa no cerne, na base ou no coração de qualquer sistema operacional que cuida de coisas fundamentais, como permitir que o hardware se comunique com o software. Portanto, para trabalhar no seu computador, você precisa de um sistema operacional (SO). Na verdade, você está usando um enquanto lê isso no seu computador. Agora, você pode ter usado sistemas operacionais populares como Windows, Apple OS X, mas aqui aprenderemos o que é o Linux e quais benefícios ele oferece sobre outras opções de sistemas operacionais. Os benefícios do uso do Linux? O Linux agora desfruta de popularidade em seu auge, e é famoso entre programadores e usuários regulares de computadores em todo o mundo. Seus principais benefícios são:

Oferece um sistema operacional gratuito. Você não precisa desembolsar centenas de dólares para obter o sistema operacional como o Windows!

Sendo de código aberto, qualquer pessoa com conhecimento de programação pode modificá-lo. Os sistemas operacionais Linux agora oferecem milhões de programas/aplicativos para escolher, a maioria deles grátis! Depois de instalar o Linux, você não precisa mais de um antivírus! O Linux é um sistema altamente seguro. Mais ainda, há uma comunidade global de desenvolvimento constantemente procurando maneiras de melhorar sua segurança. A cada atualização, o sistema operacional se torna mais seguro e robusto. O Linux é o sistema operacional preferido para ambientes de servidor devido à sua estabilidade e confiabilidade (megaempresas como Amazon, Facebook e Google usam Linux para seus servidores). Um servidor baseado em Linux pode funcionar sem parar sem reinicializar por anos a fio.

---
A principal vantagem do Linux era que os programadores podiam usar o Linux Kernel para projetar seus próprios sistemas operacionais personalizados. Com o tempo, uma nova gama de sistemas operacionais amigáveis inundou o mundo dos computadores. Agora, o Linux é um dos mais populares e amplamente utilizados Kernel, e é a espinha dorsal de sistemas operacionais populares como Debian, Knoppix, Ubuntu, Solus, Deepin, Mx-Linux e Fedora. No entanto, a lista não termina aqui, pois EXISTEM MILHARES DE SISTEMAS OPERACIONAIS BASEADOS EM LINUX que oferecem uma variedade de funções aos usuários. O Linux Kernel é normalmente usado na combinação do projeto GNU do Dr. Richard Stallman.

TODAS AS DISTRIBUIÇÕES MORDERNAS DO LINUX SÃO NA VERDADE DISTRIBUIÇÕES DO LINUX/GNU.

---
Por que aprender interface de linha de comando? Embora o mundo esteja migrando para sistemas baseados em GUI, a CLI tem seus usos específicos e é amplamente usada em scripts e administração de servidores. Vejamos alguns usos convincentes. Comparativamente, os comandos oferecem mais opções e são flexíveis. Tubulação e stdin/stdout são imensamente poderosos não estão disponíveis na GUI. Algumas configurações na GUI têm até 5 telas de profundidade, enquanto em uma CLI é apenas um único comando. Mover, renomear milhares de arquivos na GUI consumirá muito tempo (usar Control/Shift para selecionar vários arquivos), enquanto estiver na CLI, usar expressões regulares para executar a mesma tarefa com um único comando. A CLI carrega rapidamente e não consome.

---
O grande atrativo do terminal é que, com exceção de alguns poucos aplicativos específicos, os comandos são sempre os mesmos. Isso faz com que ele seja um porto seguro, com o qual você pode contar, sem importar se você está no Ubuntu ou no Slackware. O terminal é também a forma mais natural de "conversar" com o sistema, sempre que você precisa de qualquer coisa fora do comum.

Comandos básicos do Linux/Unix - o gerenciamento de arquivos se torna fácil se você souber os comandos certos. Às vezes, os comandos também são chamados de "programas", pois sempre que você executa um comando, é o código do programa correspondente, escrito para o comando, que está sendo executado. Por exemplo, imagine que você precisa mover todos os arquivos com extensão .jpg de uma pasta com muitos arquivos para outra. Em vez de precisar mover um por um, ou fazer algum malabarismo com a ordem de exibição dos arquivos (para organizar a exibição com base na extensão dos arquivos e poder assim selecionar todos os .jpg com o mouse), você poderia simplesmente abrir o terminal e digitar:

mv *.jpg /outra-pasta

Além dos comandos básicos, dois outros recursos que tornam o terminal tão poderoso são a possibilidade de combinar diferentes comandos para executar tarefas mais complexas (ou filtrar os resultados para localizar informações específicas) e a possibilidade de escrever pequenos programas em shell script.

---
Comandos mais usados para um usuário linux tem a ver com arquivos e sua manipulação. Tudo começa com coisas simples muito importantes. Quais são elas? Se mover pelos diretórios, mover arquivos de um diretório para outro, copiar, recortar, colar, renomear, baixar, converter e sobrescrever. Para isto em grande escala ou em um único arquivo, o terminal do Linux é bastante útil.

1- pwd Diz onde está na árvore de diretórios.
2- cd Permite se mover pelos diretórios, cd .., cd -, cd ~/caminho/para/diretório. cd /usr/local/bin, cd 'dir com espaço'.
3- ls Lista o que existe no diretório, ls -t, ls -lah, ls -R
4- mv Move de um diretório a outro ou renomeia arquivos. Opções: -i, -u, -v
5- cp Copia arquivo, cp -r Copia diretório, cp arquivo_antigo novo_nome_arquivo Renomeia um arquivo substituindo nome antigo por um novo nome. Opções: -i, -n, -u, -R, -v
6- rm -f Remove arquivos, rm -r Remove diretório.
7- rmdir Remove diretório vazio. Opções: -p, -pv (Remove todos os pais e subdiretórios junto com o detalhado).
8- mkdir -p Cria diretórios e subdiretórios. mkdir –p nome_dir/{sub1,sub2,sub3}
9- date Data atual
10- cat Imprime conteúdo de arquivo na tela. cat ~/Documentos/texto_teste.txt. Opções: -b, -n, -s, -E
11- df -h Mostra tamanho, espaço usado e espaço disponível
12- exit Sai do teminal
13- find Encontra arquivos que existem mas não lembra onde os colocou. find . -name *nomedoarquivo* , find . -type f -name *nomedoarquivo*
12- finger
13- free -h
14- grep Este comando é usado para procurar uma sequência/palavra específica em um arquivo de texto. É semelhante a "Ctrl + F", mas executado via CLI. Opções: -i, -n, -v, -c
15- egrep (grep -E)
16- head
17- tail
20- history
21- kill
22- less
23- man
24- clear Limpa a tela do terminal
25- sort Este comando classifica os resultados de uma pesquisa alfabética ou numericamente. Arquivos, conteúdo e diretórios podem ser classificados usando este comando. Opções: -r, -f, -n.
26- tar Compacta arquivos em formato .tar. Exemplo: tar -cvf nome_do_arquivo_tar diretório_a_ser_compactado
27- touch Cria arquivo, modifica horário de acesso a arquivo. Comando: touch texto_teste.txt Cria arquivo chamado: texto_teste.txt

---
Existem muitos outros comandos, saber sobre eles depende quais o usuário necessita usar diariamente.

---
Comandos mais usados em Shell Script no Linux? São muitos e podem ser combinados de diversas maneiras. Um usuário que escreve scripts em sua casa necessita saber quais comandos para evoluir em seus estudos rotineiros?
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.

---
Os shell scripts mais comuns são invólucros simples em torno dos binários de terceiros ou do sistema. Um wrapper (invólucro, embrulho) nada mais é do que um script de shell, uma função de shell ou um alias que inclui um comando ou utilitário do sistema.

---
COLOQUE A CHAMADA DO SHELL NA PRIMEIRA LINHA. A primeira linha do script deve ser:

#!/usr/bin/env 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):

chmod +x nome-do-teu-shellscript.sh

---
Para permitir que todos os usuários possam executar o script:

chmod +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 (cada linha é um comando):

echo
ls
echo 'ls é Listar arquivos'
echo ''
echo ""
echo "Olá!"
printf 'Bem vindo ao bash!' (Aperte a tecla enter e digite: ls)
echo '#!/bin/bash'
echo "#!/usr/bin/env 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 -sch
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
touch Meu_Arquivo.txt
ls -t
ls -t | head
pwd
rm -f Meu_Arquivo.txt
ls -t
echo 'Cadê Meu_Arquivo.txt?'
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

---
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 " (as duas são úteis em determinadas circunstâncias). 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 OU #!/usr/bin/env bash

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

---
Exemplo:

#!usr/bin/env bash

# Este é um comentário!
# Em bash shell scripts não recomendam usar
# ponto e vírgula para separar comandos.
# Mas acontece dos primeiros scripts serem assim.
# Sem variáveis, sem declarações ou comparações; apenas comandos.

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 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:

1) bash meu_script.sh
2) sh 'nome_do_arquivo_sem_aspas'
3) ./'nome_do_arquivo_sem_aspas'
---

SHELL - É importante saber o que é Shell? O shell do Linux é o Bash. A shebang do shell script é #!/usr/bin/env bash. Os comandos do Linux são executados no Bash. Na linha de comandos de um shell, podemos utilizar diversos comandos um após o outro, ou mesmo combiná-los numa mesma linha embora isto não seja o mais recomendado. 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/Linux 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.

---
#!/usr/bin/env bash

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

# isto é um comentário
# comentários são ignorados pelo script
# servem para ajudar e informar o programador

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

# limpa a tela
clear

# imprime pergunta na tela
echo "Vou buscar os dados do sistema. Posso continuar? [S/n] "

# armazena resposta
read RESPOSTA

# testa a resposta e executa
test "$RESPOSTA" = "n" && exit

# imprime informação na tela
echo ; echo "Data e Horário:" ; echo

# comando mostra data
date

# espaço entre linhas
echo

# imprime informação na tela
echo "Uso do disco:"

# espaço entre linhas
echo

# comando informa uso de espaço em disco
df -ht

# espaço entre linhas
echo

# imprime informação na tela
echo "Usuários conectados:"

# espaço entre linhas
echo

# comando w
w

# espaço entre linhas
echo

# imprime informação na tela
echo "Seu nome de login é:"

# comando whoami
whoami

# espaço entre linhas
echo

# comando para sair
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:

1) O conteúdo da variável é acessado colocando-se um cifrão "$" na frente
2) O comando test é útil para fazer vários tipos de verificações em textos e arquivos
3) 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

---

Para fazer uma pergunta direta (que é o formato mais simples), usamos o comando "read ", que lê uma resposta e a armazena em uma variável. Quase sempre ele é usado em conjunto com o "echo", que permite escrever texto na tela, fazendo a pergunta, como em:

#!/usr/bin/env bash

echo "Digite a URL do arquivo a baixar"
read arquivo
wget -c $arquivo

# fim do script

---
Com estes três comandos, criamos um gerenciador de downloads primitivo, que pede a URL do arquivo (que você poderia colar no terminal usando o botão central do mouse) e faz o download usando o wget, que é um gerenciador em modo texto, muito usado em scripts. A URL digitada é armazenada na variável "arquivo", que pode ser usada ao longo do script. Ao usá-la, é necessário incluir um "$", que faz com que o shell entenda que se trata da variável "arquivo" e não de um trecho de texto qualquer. Quando o script fosse executado, o "wget -c $arquivo" seria transformado em algo como: "wget -c http://gdhpress.com.br/arquivo.zip", iniciando o download. O "-c" é uma opção para o wget, que faz com que ele continue o download caso interrompido. Se você pressionasse "Ctrl+C" durante o download para encerrar o script e o executasse novamente, fornecendo a mesma URL, ele continuaria o download de onde parou.

---
USAR O COMANDO/PROGRAMA DIALOG NOS BASH SHELL SCRIPTS:

O dialog é muito fácil de usar. Se você tem o teclado à mão, aqui está um exemplo de uma linha de uma caixa de mensagem que você pode tentar.
Cole este exemplo no terminal:

dialog --title 'Message' --msgbox 'Olá, Mundo!' 5 20

Depois tecle Enter, digite: clear e tecle Enter. Este exemplo cria uma caixa de mensagem com o título "Mensagem", contendo a saudação "Olá, mundo!". A caixa tem 5 linhas de altura e 20 caracteres de largura, com a mensagem bem centralizada na caixa. Um botão "OK" aparece na parte inferior; pressionar dispensa o menu. Tipos de caixas de diálogo - a maioria das chamadas para caixas de diálogo tem um formato semelhante: um título opcional, o tipo de caixa de diálogo, o texto a ser exibido e a altura e largura (em caracteres) da caixa de diálogo. Seguem parâmetros adicionais específicos para cada tipo de menu. Vamos dar uma breve olhada em cada um dos tipos disponíveis. O menu "yesno" é muito semelhante ao nosso primeiro exemplo:

dialog --title "Message" --yesno "Você está se\ divertindo?" 6 25

Escolha sim ou não. Depois tecle Enter, digite: clear e tecle Enter. Se você tentar este exemplo, verá que agora existem dois botões na parte inferior, rotulados como "Sim" e "Não". Você pode selecionar entre os botões usando as teclas do cursor (ou ) e fazer sua seleção pressionando . O status de saída retornado ao shell será 0 se "Sim" for escolhido e 1 se uma seleção "Não" for feita. Você pode tentar experimentar os parâmetros de altura e largura. Se a largura for menor que o comprimento da string, ela será quebrada (nos limites da palavra). Se você tornar a caixa de diálogo muito pequena, os caracteres serão perdidos. Anteriormente, vimos a caixa de mensagem. A "caixa de informações" é semelhante, exceto pelo fato de não esperar o usuário selecionar um botão "OK". Isso é útil para exibir uma mensagem enquanto uma operação está em andamento. Aqui está um exemplo:

dialog --infobox "Favor esperar" 10 30 ; sleep 4

A "caixa de entrada" permite que um usuário insira uma string. As teclas de edição habituais podem ser usadas e o campo de texto rola, se necessário. Depois que o usuário digita os dados, eles são gravados no erro padrão (ou mais comumente redirecionados para um arquivo como neste exemplo):

dialog --inputbox "Digite seu nick:" 8 40 2>answer

dialog --inputbox "Digite seu nome:" 10 40 2>nome.txt (Joga a resposta para um arquivo chamado nome.txt)

---
Dialog exemplo de mensagem:

dialog --title Information[!] --msgbox "Esta é uma menssagem informativa." 10 50

---
Dialog tem certeza que...

dialog --title "Confirmation" --yesno "Deletar mesmo este arquivo?" 10 40

---
Pega um nome de arquivo como parâmetro:

dialog --textbox /etc/profile 22 70

---
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:

#!/usr/bin/env bash

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 # Fechamento do if

---
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".

---
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.

---
Exemplo:

# !/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. Exemplo:

# /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

---
Uma prática um pouco mais avançada é o uso de funções. Elas permitem que você crie blocos de código destinados a executarem tarefas específicas que podem ser usados ao longo do script. Em outras palavras, as funções são pequenos scripts dentro do script. A grande vantagem de criar funções (em vez de simplesmente repetir os comandos quando precisar) é que, ao atualizar o script, você precisa alterar apenas um bloco de comandos, em vez de precisar procurar e alterar os comandos manuais em vários pontos do script. Por permitirem reaproveitar o código, as funções fazem com que o script seja mais organizado e fique com menos linhas, o que facilita muito a manutenção em scripts complexos.

---
msgerro()
{
echo "Algo deu errado durante a conexão. O erro foi:"

echo "$msg"
}

---
Veja que a função começa com uma declaração ("msgerro()"), onde você especifica um nome e adiciona o "()", que faz com que o sistema entenda que se trata de uma função e não de um outro bloco de comandos qualquer. Os comandos são, em seguida, colocados dentro de um par de chaves ( { .... } ), que indicam o início e o final. A partir daí, você pode executar os comandos dentro do script chamando o nome da função (msgerro), como se fosse um comando qualquer.

---
Ex:

#!/usr/bin/env bash

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

# REALIZAR BACKUP DO DIR

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

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

clear

# -------------------------- # Este é um comentário que serve pra organizar

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

clear

verifica_argumentos(){ # O nome da função é: verifica_argumentos

if [ $# -lt 1 ];
then

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

exit 1

fi

}

# -------------------------- #

copia_arquivos(){ # O nome da função é: 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 # Chama a função pelo nome dela

# 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<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 (imprime texto)

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 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.

---
Base para escrever shell script com if, them, else e fi:

if COMANDO
then
comandos
else
comandos
fi

# fim do script

---
RODO ESTE SIMPLES SCRIPT QUE ESCREVI:

#!/usr/bin/env bash

# nome: if_then_else_fi_scr_contg.sh

contagem=1

if [ $contagem -eq 1 ]
then
echo
echo '*** Listando ***'
echo
ls -t | head
echo
echo '*** Onde estamos ***'
echo
pwd
echo
else
echo '*** Contagem não é 1 ***'
fi

---
Ex:

for VAR in LISTA
do
comandos
done

# fim do script

---
#!/usr/bin/env bash

# nome: exemplo_loop_for_test.sh

for f in .; do
echo '*** Listando ***'
ls -t | head
echo '*** Data atual ***'
date
done

# fim do script

---
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 simples script ls com read, while, case e for

#!/usr/bin/env bash

# Titulo: test_script_ls.sh
# Autor: claytu_dinamitti_1000%
# Versão:
# Email:
# Site:
# Data: 29-03-2020_18:34:50
# Distro GNU/Linux:
# Exemplo de uso:
# Objetivo:
# Variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - notícia, chama a atenção

read -p "Vamos listar arquivos. Tecle Enter para continuar: "
read -p "Listar o diretório atual? [y/n] " answer
while true
do
case $answer in
[yY]* ) ls .
echo -e "\nDiretório atual listado.\n"
break;;

[nN]* ) exit;;

* ) echo -e "\nFavor digitar Y ou N.\n"; break ;;
esac
done
read -p "Deseja listar 5 sub-dir de usuário no diretório atual? [y/n] " atual
while true
do
case $atual in
[yY]* ) ls -R . | head -6
echo -e "\n5 sub-diretórios listados.\n"
break;;

[nN]* ) exit;;

* ) echo -e "\nFavor digitar Y ou N.\n"; break ;;
esac
done

for i in 1; do
echo -e "\n\e[1;33;40mEntão é isto. Até Breve! \e[0m\n"
done

# for i in 1; do echo -e "\n\e[1;33;40mEntão é isto. Até Breve! \e[0m\n"; done

# fim do script

Simples bash script ajuda a remover files via terminal

#!/usr/bin/env bash

# titulo: teste_rm_arquivos_e_diretorios.sh
# autor:
# email:
# site:
# data: 29-03-2020_08:30:16
# distro GNU/Linux:
# exemplo de uso:
# objetivo: Este script ajuda a remover arquivos/Diretórios
# variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - Notícia, chama a atenção

echo -e "\n\e[1;32mEste script ajuda a remover definitivamente arquivos e diretórios da home\e[0m\n"
cd
ls -CF
pwd
echo -e "\n\e[1;32mDigite em qual diretório estão os arquivos. \nSe deseja remover diretórios tecle Enter. Para sair tecle Ctrl+c.\e[0m\n"
read arquivos
echo -e "\n\e[1;34;47mVocê digitou: $arquivos\e[0m\n"
cd "$arquivos"
pwd
ls -CF
read -p "Digite o arquivo que deseja remover: " remover
echo -e "\n\e[1;34;47mVocê digitou: $remover\e[0m\n"
rm -rfv "$remover"
echo -e "\n\e[1;32mFeito! \e[0m\n"
read -p "Deseja remover algum diretório? Se sim tecle Enter, ou para sair Ctrl+c."
cd
ls -CF
read -p "Digite onde está ou o nome do diretório a remover: " diretorio
echo -e "\n\e[1;34;47mVocê digitou: $diretorio\e[0m\n"
read -p "Para remover "$diretorio" tecle Enter."
rm -rfv "$diretorio"
echo -e "\n\e[1;32mFeito! \e[0m\n"
read -p "Deseja remover mais algum arquivo/diretório? Se sim tecle Enter. Se não tecle Ctrl+c para sair."
~/bin/./remove_arquivos_e_diretorios.sh

simples rename script

#!/usr/bin/env bash

# titulo: test_simples_rename_files.sh
# autor: claytu_dinamitti_1000%
# email:
# site:
# data: 29-03-2020_10:54:32
# distro:
# exemplo de uso:
# objetivo:
# variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - Notícia, chama a atenção

read -p "Vamos renomear um arquivo. Tecle Enter: "
ls . -t
read -p "\n\e[1;32mDigite o nome completo do arquivo com extensão: \e[0m\n" arquivo_old
echo -e "\n\e[1;32mVocê digitou: $arquivo_old\e[0m\n"
read -p "Digite o nome do novo arquivo: " novo_arquivo
echo -e "\n\e[1;32mVocê digitou: $novo_arquivo\e[0m\n"
mv "$arquivo_old" "$novo_arquivo"
ls . -CF
echo -e "\n\e[1;32mFeito! \e[0m\n"

Linus script find

Um simples bash shell script usando o comando find. Veja abaixo:

#!/usr/bin/env bash

# titulo: script_find_test.sh
# autor:
# email:
# site:
# data: 28-03-2020_20:14:01
# distro:
# exemplo de uso:
# objetivo: script que busca arquivos em diretório especificado.
# variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - Notícia, chama a atenção

echo -e "\n\e[1;37;40m*** Script para ajudar a usar o find ***\e[0m\n"

read -p "Digite o diretório onde vai fazer a busca: " busca
echo
echo -e "\e[1;37;42mVocê digitou: $busca\e[0m"

read -p "Digite o nome do(s) arquivo(s) que procura: " procurar
echo -e "\e[1;36;40mVocê digitou: $procurar\e[0m"

read -p "Vou realizar a busca se digitar Enter. Caso queira sair digite Ctrl+c."

find "$busca" -iname "$procurar"

# fim do script

Linux grep e egrep expressões regulares teoria e prática? Hmm…

Expressões regulares – uma expressão regular é um padrão que descreve um conjunto de strings. Expressões regulares são construídas analogamente às expressões aritméticas, usando vários operadores para combinar expressões menores. O Grep entende duas versões diferentes da sintaxe da expressão regular: “básico” e “estendido”. No GNU grep, não há diferença na funcionalidade disponível usando a sintaxe. Em outras implementações, expressões regulares básicas são menos poderosas. A descrição a seguir se aplica a expressões regulares estendidas, usadas no egrep; as diferenças para expressões regulares básicas são resumidas posteriormente. Os blocos de construção fundamentais são as expressões regulares que correspondem a um único caractere. A maioria dos caracteres, incluindo todas as letras e dígitos, são expressões regulares correspondentes. Qualquer metacaractere com significado especial pode ser citado precedendo-o com uma barra invertida. Uma expressão entre colchetes é uma lista de caracteres entre [e]. Corresponde a qualquer caractere único nessa lista; se o primeiro caractere da lista for o sinal de intercalação ^, ele corresponderá a qualquer caractere que não esteja na lista. Por exemplo, a expressão regular [0123456789] corresponde a qualquer dígito único. Dentro de uma expressão entre colchetes, uma expressão de intervalo consiste em dois caracteres separados por um hífen (“-“). Corresponde a qualquer caractere único que classifique entre os dois caracteres, inclusive, usando a sequência de intercalação e o conjunto de caracteres da localidade. Por exemplo, no código de idioma C padrão, [a-d] é equivalente a [abcd]. Muitos códigos de idioma ordenam caracteres na ordem do dicionário e, nesses locais, [a-d] geralmente não é equivalente a [abcd]; pode ser equivalente a [aBbCcDd], por exemplo. Para obter a interpretação tradicional das expressões entre colchetes, você pode usar o código de idioma C configurando a variável de ambiente LC_ALL para o valor C. Por fim, determinadas classes de caracteres nomeadas são predefinidas nas expressões entre colchetes, da seguinte maneira. Seus nomes são auto-explicativos e são [: alnum:], [: alpha:], [: cntrl:], [: digit:], [: graph:], [: lower:], [: print:] , [: punct:], [: space:], [: upper:] e [: xdigit:]. Por exemplo, [[: alnum:]] significa [0-9A-Za-z], exceto que a última forma depende da localidade C e da codificação de caracteres ASCII, enquanto a anterior é independente da localidade e do conjunto de caracteres. (Observe que os colchetes nesses nomes de classe fazem parte dos nomes simbólicos e devem ser incluídos além dos colchetes que delimitam a lista de colchetes.) A maioria dos metacaracteres perde seu significado especial nas listas. Para incluir um literal], coloque-o primeiro na lista. Da mesma forma, para incluir um literal, coloque-o em qualquer lugar, exceto primeiro. Finalmente, para incluir um literal – coloque-o por último. O período . corresponde a qualquer caractere único. O símbolo w é sinônimo de [[: alnum:]] e W é sinônimo de [^ [: alnum]]. O sinal de intercalação ^ e o cifrão (“$”) são metacaracteres que correspondem respectivamente à sequência vazia no início e no final de uma linha. Os símbolos correspondem respectivamente à sequência vazia no início e no final de uma palavra. O símbolo b corresponde à sequência vazia na extremidade de uma palavra e B corresponde à sequência vazia, desde que não esteja na extremidade de uma palavra. Uma expressão regular pode ser seguida por um dos vários operadores de repetição:

Uma expressão regular pode ser seguida por um dos vários operadores de repetição:

? O item anterior é opcional e corresponde ao máximo uma vez.
* O item anterior corresponderá a zero ou mais vezes.
+ O item anterior será correspondido uma ou mais vezes.
{n} O item anterior corresponde exatamente n vezes.
{n,} O item anterior corresponde a n ou mais vezes.
{n, m} O item anterior corresponde a pelo menos n vezes, mas não mais que m vezes.

Duas expressões regulares podem ser concatenadas; a expressão regular resultante corresponde a qualquer sequência formada concatenando duas substrings que correspondem respectivamente às subexpressões concatenadas. Duas expressões regulares podem ser unidas pelo operador infix |; a expressão regular resultante corresponde a qualquer sequência que corresponda a qualquer subexpressão. A repetição tem precedência sobre a concatenação, que por sua vez tem precedência sobre a alternância. Uma subexpressão inteira pode ser colocada entre parênteses para substituir essas regras de precedência. A referência anterior n, onde n é um dígito único, corresponde à substring correspondida anteriormente pela n-ésima subexpressão entre parênteses da expressão regular. Nas expressões regulares básicas, os metacaracteres?, +, {, |, (, E) perdem seu significado especial; em vez disso, use as versões com barra invertida?, +, {, |, (, e). O egrep tradicional não suportava o {metacaractere, e algumas implementações do egrep suportam {em vez disso, portanto, os scripts portáteis devem evitar {nos padrões do egrep e devem usar [{] para corresponder a um literal {. O GNU egrep tenta dar suporte ao uso tradicional assumindo que {não é especial se for o início de uma especificação de intervalo inválida. Por exemplo, o comando shell egrep ‘{1’ pesquisa a cadeia de dois caracteres {1 em vez de relatar um erro de sintaxe na expressão regular. O POSIX.2 permite esse comportamento como uma extensão, mas os scripts portáteis devem evitá-lo. Variáveis de ambiente – O comportamento do Grep é afetado pelas seguintes variáveis de ambiente: Um código de idioma LC_foo é especificado examinando as três variáveis de ambiente LC_ALL, LC_foo, LANG, nessa ordem. A primeira dessas variáveis configuradas especifica o código do idioma. Por exemplo, se LC_ALL não estiver definido, mas LC_MESSAGES estiver definido como pt_BR, o português do Brasil será usado para o código de idioma LC_MESSAGES. O código de idioma C é usado se nenhuma dessas variáveis de ambiente estiver definida, ou se o catálogo de códigos de idioma não estiver instalado, ou se o grep não tiver sido compilado com o NLS (National Language Support). GREP_OPTIONS – Esta variável especifica opções padrão a serem colocadas na frente de qualquer opção explícita. Por exemplo, se GREP_OPTIONS for ‘- arquivos binários u003d sem correspondência – diretórios u003d ignorar’, grep se comportará como se as duas opções – arquivos binários u003d sem correspondência e – diretórios u003d ignor fossem especificadas antes de qualquer opções explícitas. As especificações das opções são separadas por espaços em branco. Uma barra invertida escapa ao próximo caractere, portanto, pode ser usada para especificar uma opção que contenha espaço em branco ou uma barra invertida. GREP_COLOR – especifica o marcador para realçar. LC_ALL, LC_COLLATE, LANG. Essas variáveis especificam o código de idioma LC_COLLATE, que determina a sequência de intercalação usada para interpretar expressões de intervalo como [a-z]. LC_ALL, LC_CTYPE, LANG – Essas variáveis u200bu200bespecificam a localidade LC_CTYPE, que determina o tipo de caracteres, por exemplo, quais caracteres estão em branco. LC_ALL, LC_MESSAGES, LANG – Essas variáveis especificam o código do idioma LC_MESSAGES, que determina o idioma que o grep usa para mensagens. A localidade C padrão usa mensagens em inglês americano. POSIXLY_CORRECT – Se definido, o grep se comporta conforme requer o POSIX.2; caso contrário, o grep se comportará mais como outros programas GNU. O POSIX.2 requer que as opções que seguem os nomes dos arquivos sejam tratadas como nomes de arquivo; por padrão, essas opções são permutadas para a frente da lista de operandos e são tratadas como opções. Além disso, o POSIX.2 exige que as opções não reconhecidas sejam diagnosticadas como “ilegais”, mas como elas não são realmente contrárias à lei, o padrão é diagnosticá-las como “inválidas”. POSIXLY_CORRECT também desativa _N_GNU_nonoption_argv_flags_, descrito abaixo. _N_GNU_nonoption_argv_flags_ (Aqui N é o ID numérico do processo do grep.) Se o i-ésimo caractere do valor dessa variável de ambiente for 1, não considere o i-ésimo operando do grep como uma opção, mesmo que pareça ser um. Um shell pode colocar essa variável no ambiente para cada comando executado, especificando quais operandos são os resultados da expansão de curinga do nome do arquivo e, portanto, não devem ser tratados como opções. Esse comportamento está disponível apenas na biblioteca GNU C e somente quando POSIXLY_CORRECT não está definido. Exemplos:

Procure padrões de ajuda de suporte e janelas no arquivo myfile.txt. Faça a correspondência de quaisquer linhas no myfile.txt que iniciem uma linha com uma palavra alfabética que também termine a linha. Faça a correspondência de quaisquer linhas no myfile.txt que iniciem uma linha com uma palavra alfabética que também termine a linha.

Crio um diretório e um arquivo para testes.

1) mkdir -pv ~/TESTES/TESTES_grep

2) cd ~/TESTES/TESTES_grep

3) touch myfile.txt

4) echo -e “support\nhelp \n58 \n01 ball \n10 hands \n99 \nwindows \nbegin \nLinux \nend \nUnix \nSupport \nEnd \nfight \nHelp \nJoe \njone \n1 Fight \n8 Windows \nZulu \n77 \nLIFE \n0 init \n9 conf \nAlpha\n” > myfile.txt

Com o diretório eo arquivo criados podemos testar alguns comandos nele:

egrep “support|help|windows” myfile.txt

Resultado:

~/TESTES/TESTES_grep:$ egrep “support|help|windows” myfile.txt
support
help
windows
~/TESTES/TESTES_grep:$

Também podemos especificar caracteres do alfabeto com [a-z] para caracteres em minúsculas e [A-Z] para caracteres em maiúsculas. Neste exemplo, corresponderemos caracteres maiúsculos.

egrep ‘^[a-zA-Z]+$’ myfile.txt

Resultado:

~/TESTES/TESTES_grep:$ egrep ‘^[a-zA-Z]+$’ myfile.txt
support
Alpha
~/TESTES/TESTES_grep:$

egrep -c ‘^begin|end$’ myfile.txt

Resultado:

~/TESTES/TESTES_grep:$ grep -c ‘^begin|end$’ myfile.txt
0

cat /etc/passwd/

egrep systemd /etc/passwd

Resultado:

~:$ egrep systemd /etc/passwd
systemd-resolve:x:988:988:systemd Resolver:/:/sbin/nologin
systemd-timesync:x:987:987:systemd Time Synchronization:/:/sbin/nologin
systemd-coredump:x:986:986:systemd Core Dumper:/:/sbin/nologin

Comandos:

egrep ‘[0-9]’ myfile.txt

Resultado:

~/TESTES/TESTES_grep:$ egrep ‘[0-9]’ myfile.txt
58
01 ball
10 hands
99
1 Fight
8 Windows
77
0 init
9 conf
~/TESTES/TESTES_grep:$

Executo os comandos abaixo:

egrep ‘[A-Z]’ myfile.txt

egrep ‘^[a-Z]’ myfile.txt

egrep ‘[0-9]$’ myfile.txt

egrep -i ‘alpha’ myfile.txt

Linux shell script usando egrep

Linux shell script usando egrep

---

Neste teste crio um diretório e dentro dele um arquivo com strings para o script
Realizar a busca. Executo os comandos abaixo:

1) mkdir -pv ~/TESTES/TESTES_grep/

2) cd ~/TESTES/TESTES_grep/

3) touch texto_testes_grep_egrep.txt

4) echo -e "caminho\nCaminho \ncaminhos \nLuz \nluz \nSol \nsolar\nTempo\nvirus\n" > texto_testes_grep_egrep.txt

5) cat texto_testes_grep_egrep.txt

---

Crio bash shell script em um arquivo de texto no diretório TESTES_grep/ (dou permissão de execução chmod +x ) este bash shell script abaixo:

#!/usr/bin/env bash

# titulo: egrep_script_test_1.sh
# autor:
# email:
# site:
# data: 28-03-2020_10:09:59
# distro:
# exemplo de uso: . ./egrep_script_test_1.sh
# objetivo:
# variaveis:
# TODO - indica uma tarefa a ser feita
# FIXME - indica um bug conhecido que precisa ser arrumado
# XXX - Notícia, chama a atenção

echo -e "\n\e[1;32mVou buscar uma string em algum arquivo.\e[0m\n"
read -p "Digite o termo de busca: " busca
echo -e "\n\e[1;32mVocê digitou $busca\e[0m\n"

# -------------------- #

read -p "Digite o caminho/nome do arquivo: " arquivo
echo -e "\n\e[1;32mVocê digitou $arquivo\e[0m\n"
read -p "tecle Enter para iniciar a busca: "
egrep -i "$busca" "$arquivo"

# fim do script

---

Agora vou testar o script criado.

---

~/TESTES/TESTES_grep:$ ls -CF
egrep_script_test_1.sh* texto_testes_grep_egrep.txt
~/TESTES/TESTES_grep:$ . ./egrep_script_test_1.sh

Vou buscar uma string em algum arquivo.

Digite o termo de busca: caminho

Você digitou caminho

Digite o caminho/nome do arquivo: texto_testes_grep_egrep.txt

Você digitou texto_testes_grep_egrep.txt

tecle Enter para iniciar a busca:
caminho
Caminho
caminhos
~/TESTES/TESTES_grep:$

---

Linux w3m script

#!/usr/bin/env bash

# titulo: w3m_busca_noticias.sh

# —————- #

echo -e “Digite o título que procura: ”
read procura
echo -e “Você digitou: $procura”
read -p ‘Digite Enter para continuar ou Ctrl+c para sair: ‘
w3m -dump https://duckduckgo.com/?q=IMDB+”$procura&#8221;\&ia=web

# —————- #

echo
read -p “Para pesquisar usando lynx digite Enter: ”
echo -e “Digite o título que procura: ”
read procura
echo -e “Você digitou: $procura”
read -p ‘Digite Enter para continuar ou Ctrl+c para sair: ‘
lynx -dump https://duckduckgo.com/?q=IMDB+”$procura&#8221;

# —————- #

echo
read -p “Gostaria de saber algumas notícias do mundo? Tecle Enter. Para sair tecle Ctrl+c ”
echo -e “Digite o assunto que procura: ”
read procura
echo -e “Você digitou: $procura”
read -p ‘Digite Enter para continuar ou Ctrl+c para sair: ‘
w3m -dump https://start.duckduckgo.com/?q=world+news+”$procura&#8221;

# —————- #

# fim do script

Argumentos de linha de comando em shell script

20-08-2020
---

Argumentos de linha de comando em Shell Script

---

Os argumentos da linha de comando também são conhecidos como parâmetros posicionais.

Esses argumentos são específicos com o script de shell no terminal durante o tempo de execução.

Cada variável passada para um script de shell na linha de comando é armazenada nas variáveis ​​de shell correspondentes, incluindo o nome do script de shell.

---

Sintaxe:

./meu_script.sh ARG1 ARG2 ARG3 ARG4 ARG5 ARG6 ARG7 ARG8 ARG9 ARG10

---

Elas também são conhecidas como variáveis ​​especiais fornecidas pelo shell. Existem algumas variáveis ​​mais especiais...

---

Variável Especial

---

Detalhes de Variável
$1 a $n

---

$1
são os primeiros argumentos, $ 2 é o segundo argumento até $ n n'ésimos argumentos. A partir do décimo argumento, você deve incluí-los entre colchetes como $ {10}, $ {11} e assim por diante

$0
O nome do próprio script

$$
Id do processo do shell atual

$*
Valores de todos os argumentos. Todos os argumentos estão com "aspas duplas"

$#
Número total de argumentos passados ​​para o script

$@
Valores de todos os argumentos

$?
ID de status de saída do último comando

$!
Id do processo do último comando

---

Script de exemplo

Os argumentos da linha de comando podem ser passados ​​logo após o nome do arquivo de script com espaços separados. Se algum argumento tiver espaço, coloque-o entre aspas simples ou duplas. Leia abaixo o script simples.

---

#!/bin/bash

### Print total de argumentos e seus valuores

echo "Total Argumentos:" $#
echo "Todos os valores de argumentos:" $@

## Argumentos de comandos
## podem ser acessados como:

echo "Primeiro->" $1
echo "Segundo->" $2

# Pode também acessar todos os argumentos em um array e usa-los em um script.

args=("$@")
echo "Primeiro->" ${args[0]}
echo "Segundo->" ${args[1]}

---

Permissão para sair

!/bin/bash

# -----------------

## Data: 20-08-2020
## Nome do script: permissao_sair.sh

# -----------------

clear

# -----------------

echo
echo "Linux aprenda: if then elif else e fi"
echo
sleep 3

# -----------------

echo -n "Se quiser sair a noite, digite a sua idade (10 a 19) : "
read REPLY

# -----------------

# declaração: if then elif else e fi

if [[ "$REPLY" -ge 19 ]] # declaração if
then
echo 'Você pode ir para a festa.'

elif [[ "$REPLY" -eq 18 ]] # declaração elif
then
echo 'Você pode ir à festa, mas estará de volta antes da meia-noite.'

elif [[ "$REPLY" -eq 10 ]] # declaração elif
then
echo 'Você não pode ir à festa. Tome banho, escove os dentes. Vá dormir ás 22:00. Estamos te vendo pelas cameras da casa agora.'

else # comando else
echo 'Você não pode ir à festa. Fique no berço.'

fi # fechamento do if é o fi

## fim ##

Dica códigos android

Linux Dica códigos android

1

#Dica_linux
#Dica_codigos_android

O Android é o sistema operacional para smartphones mais popular de todos os tempos. Os desenvolvedores criam vários tipos de backdoor nos aplicativos e sistemas operacionais. Por meio desses backdoors, qualquer usuário com conhecimento suficiente pode entrar no sistema muito mais profundo do que em comparação com outros usuários. Como todos sabemos, o Android é um sistema operacional de código aberto baseado no Linux Kernel e desenvolvido pelo Google. O sistema operacional Android está sendo amplamente difundido no mundo. Os desenvolvedores do Android também criam muitas backdoors pelas quais você pode entrar no sistema e alterar as configurações. Não se destina a usar essas backdoors para intenções maliciosas, porque os desenvolvedores bloqueiam alguns modos e essas backdoor são o caminho ou permitem que os usuários entrem no sistema e permitam que se familiarizem com o sistema. Nos smartphones, esses backdoor são chamados de “códigos secretos”. Também listamos os códigos secretos do iPhone. Estas são as seqüências numéricas/simbólicas que permitem acessar as configurações do sistema para vários usos. Então, aqui coletamos alguns códigos secretos ocultos do Android. Talvez alguns deles não funcionem no dispositivo específico, mas você pode tentar.

#31#

Oculta seu número em todas as chamadas realizadas.

*#06#

Mostra informação do seu IMEI

*#*#4636#*#*

Mostra sinal do wifi, bateria, estatisticas de uso e outras informações

2

#Dica_linux
#Dica_codigos_android

*#*#7780#*#*

Volta instantaneamente aos padrões de fábrica (Hard Reset). Deleta apenas aplicações.

*#*#8351#*#*

Ouça gravações de sua voz durande as últimas 20 chamadas.

*#3282*727336*#

Status de uso de dados.

*#12580*369*

Informações sobre software e hardware.

*#*#7780#*#*

Configuração de restauração de fábrica. Limpe todos os aplicativos e dados. Remova a configuração da conta do Google. Remova o sistema, os dados do aplicativo e as configurações.

3

#Dica_linux
#Dica_codigos_android

*2767*3855#

Reinstale o firmware do telefone. É usado para o formato de fábrica. Remova todos os arquivos e configurações, incluindo armazenamento interno. Reinstale o firmware.

*#*#197328640#*#*

Ativando o modo de teste para atividade de serviço. É usado para entrar no modo de serviço. Você pode executar e alterar vários testes e configurações no modo de serviço.

*#*#4636#*#*

Informações básicas do telefone. Detalhes de uso do telefone. Informações sobre a bateria.

*#*#34971539#*#*

Informações sobre câmeras móveis. Obtenha informações da câmera. Nota: – Evite atualizar a opção de firmware da câmera.

*#*#273283*255*663282*#*#*

Create backup to all your media files. Opens file copy screen where you can backup your media files like (images, videos, and audios).

*2767*4387264636*

Usado para exibir o código do produto.

*#*#3264#*#*

Versão RAM.