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!

🙂

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!

🙂

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

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