Bash

Alguns comandos usando Bash.

Etiquetas: LinuxSoftware

Relacionado com: LinuxSoftwaresWiki Pessoal

Decompor um nome de ficheiro

filename="ficheiro.tar.gz"

echo "${filename%%.*}"  => ficheiro
echo "${filename%.*}"   => ficheiro.tar
echo "${filename#*.}"   => tar.gz
echo "${filename##*.}"  => gz

Caso a variável contenha o caminho (path) do ficheiro, usar basename para imprimir apenas o nome do ficheiro.

file_path="path/to/ficheiro.tar.gz"
filename=$(basename $file_path);

echo $filename  => ficheiro.tar.gz

Substituir parte do conteúdo de um ficheiro com outro ficheiro

(Sem compatibilidade POSIX. Para esses casos, usar sed.)
Subsituir %TEXT% que se encontra no file1.txt com o conteúdo do file2.txt, usando a seguinte expressão: ${var_name/pattern/replacement}, para casos substituir apenas uma ocasião daquele padrão; ${var_name//pattern/replacement} - para substituir todas as ocasiões do padrão selecionado.

FILE1=$(<file1.txt)
FILE2=$(<file2.txt)
echo "${FILE1//%TEXT%/$FILE2}"

Também existem outras formas, usando sed, etc. Mas nesta opção, usando um script em sed:

/%TEXT%/ {
  r file1.txt
  d
}

E depois, na linha de comandos, é só correr o seguinte: sed -f script.sed file2.txt

Incrementar o valor de um número com zeros à esquerda

Mudar o valor de '%03d' com o número de casas que se pretenda ter.

for ((i = 0; i < 10; ++i))
do
    printf -v number '%03d' $i
    echo $number
done

---

for ((i = 0; i < 10; ++i))
do
    printf '%03d ' $i
done

=> 000 001 002 003 004 005 006 007 008 009

Incrementar o valor com um determinado intervalo

Para incrementar o valor com um determinado intervalo, usar o seguinte comando, onde o primeiro valor é o início, o segundo valor é o final e o último é o intervalo:

for i in {0..10..2}
do
    printf "$i\n"
done

=> 0 2 4 6 8 10

Com leading zero:

for i in {000..100..10}
do
    printf "$i\n"
done

=> 000 010 020 030 040 050 060 070 080 090 100

Também se pode usar o comando seq 0 2 10, onde o primeiro valor é o início, o segundo valor é o valor do intervalo e o último o valor final.

Mudar conteúdo para minúsculas ou maiúsculas

Ainda a analisar se alguma coisa aqui está errada...

Para mudar o conteúdo de uma variável ou de um texto para minúsculas ou maiúsculas, pode-se usar o seguinte:

string="hello world"
echo $string          » hello world
echo ${string^}       » Hello world
echo ${string^^]      » HELLO WORLD
echo ${string^^[wd]}  » hello WorlD

Aqui, quando se usa algum caracter após um único ^, este vai transformar para maiúscula, caso este seja o início do texto. Já num uso diferente, caso se use um caracter ou um conjunto de caracteres após dois ^^, este vai transformar para maiúscula.

Operadores

  • -eq equal | igual
  • -ne not equal | diferente
  • -lt less than | menor que
  • -le less than or equal | menor ou igual
  • -gt greater than | maior que
  • -ge greater than or equal | maior ou igual

Forçar interpretação base-10

Quando se está a trabalhar com loops e números que começam com vários zeros, ocorrem "erros" de tipo: 0008: value too great for base (error token is "0008"), então, de forma a resolver, escrever a varivável da seguinte forma: $((10#var)), usando avaliação aritmética.