Mostrando postagens com marcador Shell Scrpit. Mostrar todas as postagens
Mostrando postagens com marcador Shell Scrpit. Mostrar todas as postagens

quinta-feira, 8 de setembro de 2016

Comando printf no bash - Ou formatação de números

O comando printf no bash funciona de maneira parecida com a função homônima no C. A sintaxe para os comandos de formatação de variáveis são os mesmos.

Basicamente, o uso é:

i=9
printf "%02d" %i 

Saida:
09


Concatenando strings no bash

A maneira mais fácil é (dentro de um editor de texto, ou no próprio shell) escrever as strings dentro de uma variável, concatenando-as.

Por exemplo:
E=BandaEsquerda
D=BandaDireita
Bunda=$E$D
echo $Bunda
Saida:
BandaEsquerdaBandaDireita

Outra maneira - útil ao misturar palavras com strings para nomear arquivos, por exemplo - é utilizar chaves para distinguir a palavra da variável a ser com ela concatenada:
Ex:
I=10
rm backup${I}.dat

sábado, 25 de julho de 2015

Processando arquivos e strings contendo espaços no Bash

A última vez que eu escrevi um script decente em bash foi em 2001. Lá se vão vários anos, até que eu esquecesse totalmente de como programar em bash. Tornei-me monolíngue em C.
Gozado, o que exige-se de um usuário de Windows é que saiba clicar no botão iniciar (ainda existe? Deixei de usar este "sistema" ainda na versão 95) e usar o pacote de escritórios da Microsoft. Já o que se exige de um usuário GNU/Linux é que ele tenha seja onisciente em computação... E isso é bom. Um dia chego à perfeição. :-D

Tive problemas com com arquivos cujos nomes continham espaços.
O delimitador de campos do bash é o espaço. Para lidar com nomes e strings contendo espaço (e fazer com que tudo seja interpretado como um único campo), podemos mudar para próxima linha.
A variável IFS é a responsável para mudar este delimitador.

Ao digitar no bash (por uma sessão), ou no script
IFS=$'\n' (ou IFS=$ \n) ,
altera-se o delimitador de campo, e aí conseguimos processar strings que contenham espaço, como nomes de arquivos com espaço.
\n é o caractere de próxima linha também no bash (velho conhecido de quem usa C).