Linux, Variáveis…

Variáveis especiais

Variáveis especiais, os argumentos da linha de comando são acessados dentro do código dos scripts de shell usando outro conjunto de variáveis especiais. Essas variáveis são parâmetros posicionais: $ 1, $ 2,. . . , $ n que contém valores fornecidos pelo usuário para: arg1, arg2,…, argn. $# (o número de argumentos passados para o script). $*, $@. Ambas as variáveis têm o mesmo uso: elas contêm a lista de argumentos. Comandos para imprimir Shell e variáveis de ambiente:

printenv

printenv SHELL

set | less

printenv | grep VAR_TESTE

Nenhuma saída será retornada ao executar "printenv | grep VAR_TESTE".

Vamos considerar isso como uma oportunidade de demonstrar uma maneira de acessar o valor de qualquer variável shell ou variável ambiental.

Como você pode ver, faça referência ao valor de uma variável precedendo-a com um sinal $. O shell considera que isso deve substituir o valor da variável quando se deparar com isso.


bash
echo $VAR_TESTE


Se digitarmos bash para gerar um shell filho e tentarmos acessar o conteúdo da variável, nada será retornado. Isso é o que se espera. Volte para o shell original digitando exit.

---

Fico por aqui. Até breve!

🙂

---


Fonte: https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps

: Variáveis Espaciais :

Consulta-para-ShellScript-e-Aliases

:: Variáveis Especiais ::

Podemos utilizar em scripts, para verificação de parâmetros, valores de retorno de comandos e parâmetros para funções.

$0
Parâmetro número 0 (nome do comando ou função)

$1
Parâmetro número 1 (da linha de comando ou função)

...
Parâmetro número N ...

$9
Parâmetro número 9 (da linha de comando ou função)

${10}
Parâmetro número 10 (da linha de comando ou função)

...
Parâmetro número NN ...

$#
Número total de parâmetros da linha de comando ou função

$*
Todos os parâmetros, como uma string única

$@
Todos os parâmetros, como várias strings protegidas

$$
Número PID do processo atual (do próprio script)

$!
Número PID do último job em segundo plano

$_
Último argumento do último comando executado

$?
Código de retorno do último comando executado

:: Variáveis de Ambiente ::

HOME :: echo $HOME
SHEL :: echo $SHELL
TERM :: echo $TERM
USER :: echo $USER
PATH :: echo $PATH
OSTYPE :: echo $OSTYPE

:: Variáveis Locais ::

Podem ser criadas pelo usuário. Algumas já vem criadas:

set
env
printenv

:: Variável Local pode virar Global ::

Exemplo...

1) Criar variavel local:
VAR=free

2) Exportar:
export VAR

3) Verificar:
env | grep VAR

:: Deletar Variável ::

unset VAR

::::::::::::::::::

:: Shell Script ::

Operadores de Atribuição

= Atribui valor a uma variável
+= Incrementa a variável por uma constante
-= Decrementa a variável por uma constante
*= Multiplica a variável por uma constante
/= Divide a variável por uma constante
%= Resto da divisão por uma constante
++ Incrementa em 1 o valor da variável
-- Decrementa em 1 o valor da variável

::::::::::::::::::

Operadores Relacionais

== Igual
!= Diferente
> Maior
>= Maior ou Igual
< Menor
<= Menor ou Igual

::::::::::::::::::

Operadores Lógicos

&& E lógico (AND)
|| OU lógico (OR)

::::::::::::::::::

Redirecionamento

Redireciona a saída padrão (STDOUT)
2> Redireciona a saída de erro (STDERR)
>> Redireciona a saída padrão, anexando
2>> Redireciona a saída de erro, anexando
| Conecta a saída padrão com a entrada padrão de outro comando
2>&1 Conecta a saída de erro na saída padrão
>&2 Conecta a saída padrão na saída de erro
>&- Fecha a saída padrão
2>&- Fecha a saída de erro
3arq Conecta o descritor de arquivos 3 ao arquivo 'arq'
<<FIM Alimenta a entrada padrão (Here Document)
<<-FIM Alimenta a entrada padrão, cortando TABs
<(cmd) A saída do comando 'cmd' é um arquivo: diff <(cmd1) (cmd) A entrada do comando 'cmd' é um arquivo: tar cf >(bzip2 -c >file.tbz) $dir

::::::::::::::::::

:: Expansão de variáveis ::

${var:-texto} Se var não está definida, retorna 'texto'
${var:=texto} Se var não está definida, defina-a com 'texto'
${var:?texto} Se var não está definida, retorna o erro 'texto'
${var:+texto} Se var está definida, retorna 'texto', senão retorna o vazio

${var} É o mesmo que $var, porém não ambíguo
${#var} Retorna o tamanho da string
${!var} Executa o conteúdo de $var (igual 'eval \$$var')
${!texto*} Retorna os nomes de variáveis começadas por 'texto'
${var:N} Retorna o texto a partir da posição 'N'
${var:N:tam} Retorna 'tam' caracteres a partir da posição 'N'
${var#texto} Corta 'texto' do início da string
${var##texto} Corta 'texto' do início da string (* guloso)
${var%texto} Corta 'texto' do final da string
${var%%texto} Corta 'texto' do final da string (* guloso)
${var/texto/novo} Substitui 'texto' por 'novo', uma vez
${var//texto/novo} Substitui 'texto' por 'novo', sempre
${var/#texto/novo} Se a string começar com 'texto', substitui 'texto' por 'novo'
${var/%texto/novo} Se a string terminar com 'texto', substitui 'texto' por 'novo'

:: Blocos e agrupamentos ::

"..." Protege uma string, mas reconhece $, \ e ` como especiais "abc"
'...' Protege uma string completamente (nenhum caractere é especial) 'abc'
$'...' Protege uma string completamente, mas interpreta \n, \t, \a, etc $'abc\n'
`...` Executa comandos numa subshell, retornando o resultado `ls`
{...} Agrupa comandos em um bloco { ls ; }
(...) Executa comandos numa subshell ( ls )
$(...) Executa comandos numa subshell, retornando o resultado $( ls )
((...)) Testa uma operação aritmética, retornando 0 ou 1 ((5 > 3))
$((...)) Retorna o resultado de uma operação aritmética $((5+3))
[...] Testa uma expressão, retornando 0 ou 1 (alias do comando 'test') [ 5 -gt 3 ]
[[...]] Testa uma expressão, retornando 0 ou 1 (podendo usar && e ||) [[ 5 > 3 ]]

::::::::::::::::::

:: if, for, select, while, until, case ::

:: if ::

if COMANDO
then
...
elif COMANDO
then
...
else
...
fi

:: for ::

for VAR in LISTA
do
...
done

ou:

for ((exp1;exp2;exp3))

:: while/until ::

while COMANDO
do
...
done

:: case ::

case $VAR in
txt1) ... ;;
txt2) ... ;;
txtN) ... ;;
*) ... ;;
esac

::::::::::::::::::

:: Opções do comando test ou [ ::

Comparação Numérica

-lt É menor que (LessThan)
-gt É maior que (GreaterThan)
-le É menor igual (LessEqual)
-ge É maior igual (GreaterEqual)
-eq É igual (EQual)
-ne É diferente (NotEqual)

Comparação de Strings

= É igual
!= É diferente
-n É não nula
-z É nula

Operadores Lógicos

! NÃO lógico (NOT)
-a E lógico (AND)
-o OU lógico (OR)

Testes em arquivos

-b É um dispositivo de bloco
-c É um dispositivo de caractere
-d É um diretório
-e O arquivo existe
-f É um arquivo normal
-g O bit SGID está ativado
-G O grupo do arquivo é o do usuário atual
-k O sticky-bit está ativado
-L O arquivo é um link simbólico
-O O dono do arquivo é o usuário atual
-p O arquivo é um named pipe
-r O arquivo tem permissão de leitura
-s O tamanho do arquivo é maior que zero
-S O arquivo é um socket
-t O descritor de arquivos N é um terminal
-u O bit SUID está ativado
-w O arquivo tem permissão de escrita
-x O arquivo tem permissão de execução
-nt O arquivo é mais recente (NewerThan)
-ot O arquivo é mais antigo (OlderThan)
-ef O arquivo é o mesmo (EqualFile)

::::::::::::::::::

:: Escapes reconhecidos pelo comando echo ::

\a Alerta Alerta (bipe)
\b Backspace Caractere Backspace
\c EOS Termina a string
\e Escape Caractere Esc
\f Form feed Alimentação
\n Newline Linha nova
\r Return Retorno de carro
\t Tab Tabulação horizontal
\v Vtab Tabulação vertical
\\ Backslash Barra invertida \ literal
\nnn Octal Caractere cujo octal é nnn
\xnn Hexa Caractere cujo hexadecimal é nn

::::::::::::::::::::

:: Formatadores do comando date ::

%a Nome do dia da semana abreviado (Dom..Sáb)
%A Nome do dia da semana (Domingo..Sábado)
%b Nome do mês abreviado (Jan..Dez)
%B Nome do mês (Janeiro..Dezembro)
%c Data completa (Sat Nov 04 12:02:33 EST 1989)
%y Ano (dois dígitos)
%Y Ano (quatro dígitos)
%m Mês (01..12)
%d Dia (01..31)
%j Dia do ano (001..366)
%H Horas (00..23)
%M Minutos (00..59)
%S Segundos (00..60)
%s Segundos desde 1º de Janeiro de 1970
%% Um % literal
%t Um TAB
%n Uma quebra de linha

:: Letras identificadoras de arquivos no comando ls -l ::

- - Arquivo normal
d Directory Diretório
l Link Link simbólico
b Block Dispositivo de blocos (HD)
c Char Dispositivo de caracteres (modem serial)
s Socket Socket mapeado em arquivo (comunicação de processos)
p Pipe FIFO ou Named Pipe (comunicação de processos)

- - Permissão desativada
r Read Acesso de leitura
w Write Acesso de escrita
x eXecute Acesso de execução (ou acesso ao diretório)
X eXecute Acesso ao diretório somente
s Set ID Usuário/grupo para execução (SUID, SGID) - permissão 'x' ativada
S Set ID Usuário/grupo para execução (SUID, SGID) - permissão 'x' desativada
t sTicky Usuários só apagam seus próprios arquivos - permissão 'x' ativada
T sTicky Usuários só apagam seus próprios arquivos - permissão 'x' desativada

:::::::::::::::::::

:: Curingas para nomes de arquivo (glob) ::

* Qualquer coisa *.txt
? Um caractere qualquer arquivo-??.zip
[...] Qualquer um dos caracteres listados [Aa]rquivo.txt
[^...] Qualquer um caractere, exceto os listados [^A-Z]*.txt
{...} Qualquer um dos textos separados por vírgula arquivo.{txt,html}

:: Curingas para os itens do comando case ::

* Qualquer coisa *.txt) echo ;;
? Um caractere qualquer arquivo-??.zip) echo ;;
[...] Qualquer um dos caracteres listados [0-9]) echo ;;
[^...] Qualquer um caractere, exceto os listados [^0-9]) echo ;;
...|... Qualquer um dos textos separados por | txt|html) echo ;;

:::::::::::::::::::

:: Metacaracteres das expressões regulares ::

. Ponto Curinga de um caractere
[] Lista Casa qualquer um dos caracteres listados
[^] Lista negada Casa qualquer caractere, exceto os listados
? Opcional O item anterior pode aparecer ou não (opcional)
* Asterisco O item anterior pode aparecer em qualquer quantidade
+ Mais O item anterior deve aparecer no mínimo uma vez
{,} Chaves O item anterior deve aparecer na quantidade indicada {mín,máx}
^ Circunflexo Casa o começo da linha
$ Cifrão Casa o fim da linha
\b Borda Limita uma palavra (letras, números e sublinhado)
\ Escape Escapa um meta, tirando seu poder
| Ou Indica alternativas (usar com o grupo)
() Grupo Agrupa partes da expressão, é quantificável e multinível
\1 Retrovisor Recupera o conteúdo do grupo 1
\2 Retrovisor Recupera o conteúdo do grupo 2 (segue até o \9)
.* Curinga Casa qualquer coisa, é o tudo e o nada
?? Opcional NG Idem ao opcional comum, mas casa o mínimo possível
*? Asterisco NG Idem ao asterisco comum, mas casa o mínimo possível
+? Mais NG Idem ao mais comum, mas casa o mínimo possível
{}? Chaves NG Idem às chaves comuns, mas casa o mínimo possível

:::::::::::::::::::

:: Códigos prontos para copiar e colar ::

: Condicionais com o IF :

if [ -f "$arquivo" ]; then echo 'Arquivo encontrado'; fi
if [ ! -d "$dir" ]; then echo 'Diretório não encontrado'; fi
if [ $i -gt 5 ]; then echo 'Maior que 5'; else echo 'Menor que 5'; fi
if [ $i -ge 5 -a $i -le 10 ]; then echo 'Entre 5 e 10, incluindo'; fi
if [ $i -eq 5 ]; then echo '=5'; elif [ $i -gt 5 ]; then echo '>5'; else echo '<5'; fi
if [ "$USER" = 'root' ]; then echo 'Oi root'; fi
if grep -qs 'root' /etc/passwd; then echo 'Usuário encontrado'; fi

: Condicionais com o E (&&) e OU (||) :

[ -f "$arquivo" ] && echo 'Arquivo encontrado'
[ -d "$dir" ] || echo 'Diretório não encontrado'
grep -qs 'root' /etc/passwd && echo 'Usuário encontrado'
cd "$dir" && rm "$arquivo" && touch "$arquivo" && echo 'feito!'
[ "$1" ] && param=$1 || param='valor padrão'
[ "$1" ] && param=${1:-valor padrão}
[ "$1" ] || { echo "Uso: $0 parâmetro" ; exit 1 ; }

: Adicionar 1 à variável $i :

i=$(expr $i + 1)
i=$((i+1))
let i=i+1
let i+=1
let i++
Loop de 1 à 10
for i in 1 2 3 4 5 6 7 8 9 10; do echo $i; done
for i in $(seq 10); do echo $i; done
for ((i=1;i<=10;i++)); do echo $i; done
i=1 ; while [ $i -le 10 ]; do echo $i ; i=$((i+1)) ; done
i=1 ; until [ $i -gt 10 ]; do echo $i ; i=$((i+1)) ; done

: Loop nas linhas de um arquivo ou saída de comando :

cat /etc/passwd | while read LINHA; do echo "$LINHA"; done
grep 'root' /etc/passwd | while read LINHA; do echo "$LINHA"; done
while read LINHA; do echo "$LINHA"; done < /etc/passwd
while read LINHA; do echo "$LINHA"; done < <(grep 'root' /etc/passwd)

: Curingas nos itens do comando case :

case "$dir" in /home/*) echo 'dir dentro do /home';; esac
case "$user" in root|joao|maria) echo "Oi $user";; *) echo "Não te conheço";; esac
case "$var" in ?) echo '1 letra';; ??) echo '2 letras';; ??*) echo 'mais de 2';; esac
case "$i" in [0-9]) echo '1 dígito';; [0-9][0-9]) echo '2 dígitos';; esac

: Caixas do Dialog :

dialog --calendar 'abc' 0 0 31 12 1999
dialog --checklist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off
dialog --fselect /tmp 0 0
(echo 50; sleep 2; echo 100) | dialog --gauge 'abc' 8 40 0
dialog --infobox 'abc' 0 0
dialog --inputbox 'abc' 0 0
dialog --passwordbox 'abc' 0 0
dialog --menu 'abc' 0 0 0 item1 'desc1' item2 'desc2'
dialog --msgbox 'abc' 8 40
dialog --radiolist 'abc' 0 0 0 item1 'desc1' on item2 'desc2' off
dialog --tailbox /tmp/arquivo.txt 0 0
dialog --textbox /tmp/arquivo.txt 0 0
dialog --timebox 'abc' 0 0 23 59 00
dialog --yesno 'abc' 0 0
Dica1: dialog ... && echo 'Apertou OK/Yes' || echo 'Apertou Cancel/No'
Dica2: resposta=$(dialog --stdout --TIPODACAIXA 'abc' ...)

:: Ferramentas do Shell Script ::

cat Mostra arquivo -n, -s
cut Extrai campo -d -f, -c
date Mostra data -d, +'...'
diff Compara arquivos -u, -Nr, -i, -w
echo Mostra texto -e, -n
find Encontra arquivos -name, -iname, -type f, -exec, -or
fmt Formata parágrafo -w, -u
grep Encontra texto -i, -v, -r, -qs, -n, -l, -w -x, -A -B -C
head Mostra início -n, -c
od Mostra caracteres -a, -c, -o, -x
paste Paraleliza arquivos -d, -s
printf Mostra texto nenhuma
rev Inverte texto nenhuma
sed Edita texto -n, -f, s/isso/aquilo/, p, d, q, N
seq Conta números -s, -f
sort Ordena texto -n, -f, -r, -k -t, -o
tac Inverte arquivo nenhuma
tail Mostra final -n, -c, -f
tee Arquiva fluxo -a
tr Transforma texto -d, -s, A-Z a-z
uniq Remove duplicatas -i, -d, -u
wc Conta letras -c, -w, -l, -L
xargs Gerencia argumentos -n, -i

:::::::::::::::::::

Até Breve!

:)

-