Jedi Tux

Bash – comandos, argumentos e a importância das apas

Posted in 5584, Linux by Fernando Basso on 4 de janeiro de 2012

Intro

Interactive mode: modo de operação onde um prompt de comando espera que você digite um comando por vez.

Script: um arquivo que contém uma sequência de comandos para serem executados um após o outro.

Ao iniciar o Bash, bash –posix ou set -o posix se o Bash já está em execução coloca o Bash em modo POSIX.

No Arch Linux (e quase todas as outras distribuições), /bin/sh é um symlink para /bin/bash. Se o Bash é invocado com o nome “sh”, ele tenta imitar o comportamento de versões históricas do sh o melhor possível, enquanto conformando com o padrão POSIX. Neste modo, o Bash lê os arquivos de inicialização e então entra em modo de compatibilidade com o padrão POSIX.

/etc/profile é lido por todos todo Bourne-compatible shell no login. Ele configura o ambiente e carrega configurações específicas a certas applicações (/etc/profile.d/*.sh).

.profile é lido pelo Bash quando um shell com login interativo é iniciado.

.bashrc é lido pelo Bash quando um interativo non-login shell é iniciado, por exemplo, quando alguém abre um console virtual (x terminal) a partir de um Window Manager ou Desktop Environmen (Openbox, LXDE, Gnome, KDE, etc.). Este arquivo é útil para configurar o ambiente de shell específico do usuário.

Leia mais: https://wiki.archlinux.org/index.php/Bash

Comandos e Argumentos

 O Bash lê linhas do terminal (usuário digitando comandos) ou de arquivos. Cada linha é uma comando – uma tarefa para ser executada.

 IMPRTANTE: O Bash divide cada linha em palavras. Palavras são separadas por espaços.

 A primeira palavra em uma linha/comando é o nome do comando. Todas as outras (palavras) são os argumentos que são passados para o comando especificado.

 echo This is a test echo → é o nome do comando;

this → é um argumento.

is → outro argumento.

a → mais outro argumento.

test → ainda mais um argumento – e o último, no exemplo.

 MAS:

echo"This is a test"

echo → é o nome do comando.

“This is a test” → é um único argumento.

 As aspas não são parte do argumento. O Bash as remove antes de lidar com o argumento.

 CUIDADO: Digamos que temos dois arquivos em um diretório. Os arquivos são:

“The secret voice in your head.ogg”

“secret”

 “secret” contém um segredo muito importante que pode salvar o mundo.

E agora você faz:

 rm The secret voice in your head.ogg

 O Bash vai pensar que você passou seis argumentos, e um deles é “secret” – seu venerado arquivo. Você recebeu erros porque o comando rm não conseguiu remover/encontrar os arquivos “The”, “voice”, “in”, “your”, e “head.ogg” (já que eles não são arquivos por si próprios), exceto “secret”, é que sim um arquivo. É por isso quo Bash reclamou dos outros mas não reclamou de “secret”. Agora o pior: o arquivo chamado “secret” já era. Para sempre se foi (não tem lixeira na linha de comando), e a música (que é o que queríamos deletar) ainda está lá. A maneira correta é usar apas:

 rm “The secret voice in you head.ogg”

Assim, você está agrupando todas as palavras em um único argumento. Descanse em paz. O “segredo” está seguro agora.

 Veja este próximo caso.

 [ é um comando, similar ao comando test. Se testarmos alguma coisa assim:

 [-f file.txt]

 …está errado. -f não deve estar “colado” ao [. Devemos separá-los. [ é o nome do comando, portanto uma palavra. -f é a segunda palavra (um argumento), file é a terceira palavra (outro artumento) e o ] é o ultimo argumento – que é mandatório toda vez que usamos [. Esta é a maneira correta (note os espaços):

 [ -f file.txt ]

 A propósito, uma maneira mais aconselhável ainda é colocar o nome do arquivo entre aspas (você já viu o que pode acontecer se um nome de arquivo contém espaços, e não o protejemos com aspas).

 [ -f “my file” ]

É boa prática sempre usar apas.

 Uma dica rápida: use o perl-rename para mudar todos os espaços nos nomes dos arquivos por underscores:

 perl-rename ‘s/ /_/’ ./*.txt

 …para arquivos .txt (mude a extensão para outros tipos de arquivos), ou

 perl-rename ‘s/ /_/’ ./*

 …para todos os arquivos do diretório.

 NOTA: No Arch Linux, no nome é perl-rename. prename em outras distros – não confunda com rename, que é um comando bem simplificado e não faz o que o exemplo mostra. (Se não me engano já vi uma distro em que rename era na verdade o um symlink para o perl-rename).

Este conteúdo é basicamente um tradução livre do (excelente) site:

http://mywiki.wooledge.org/BashGuide

Este conteúdo não é, de forma alguma, mérito meu, mas sim dos proprietários do site acima mencionado.

3_php

Posted in 5584 by Fernando Basso on 9 de setembro de 2009

A Função strlen()

A função strlen() (string length) retorna o número de caracteres que uma string possui. Espaços em branco também contam.

echo(strlen("Cinco")); // 'Cinco' possui 5 caracteres.
echo(strlen("Cin co")); // 'Cin co' possui 6 caracteres.
echo(strlen("Já") // O acento conta por si só. 'Já' são 3 caracteres.
echo(strlen('Maçã')) //'Maçã tem 6. 'ã' vale por dois e 'ç' vale por dois também.

A Função strpos()

A função strpos (string position) retorna a posição em que uma determinada substring começã. Para simplificar a definição de substring, imagine que cada palavra em um frase é uma substring.
Vamos ver onde começa a substring ‘bom’ na string a seguir.

echo(strpos("Olá meu bom amigo.<br />", "bom")); /* IMPORTANTE: Aqui, echo 
* vai mostar o retorno de strlen() apenas, e o <br /> não vai produzir 
* uma nova linha. */

Lembre-se de dos “caracteres duplos” como ‘á’ e ‘ç’ que contam por dois. A função strpos() conta apartir do index zero. (zero-indexed, em Inglês).

Um exemplo assinando uma string à uma var, e aplicando a função strpos() na var.
$a = “Olhando para a imensidade desta matéria, a Matemática, mesmo a Matemática moderna, é uma ciência na sua infância.”;

print(strpos($a, "matéria")); // Posição 32.