<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Beraldo &#187; Linux</title>
	<atom:link href="http://www.rberaldo.com.br/blog/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rberaldo.com.br/blog</link>
	<description>Programação, Música, Entretenimento e o que mais me vier à mente</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:23:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Curso de Shell Script &#8211; Módulo #1: Scripts Shell e suas estruturas</title>
		<link>http://www.rberaldo.com.br/blog/curso-de-shell-script-modulo-1-scripts-shell-estruturas/</link>
		<comments>http://www.rberaldo.com.br/blog/curso-de-shell-script-modulo-1-scripts-shell-estruturas/#comments</comments>
		<pubDate>Sat, 05 Nov 2011 20:44:59 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=478</guid>
		<description><![CDATA[(Caso não tenha lido a primeira parte (módulo #0), veja-a aqui: http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux/) Inicialmente, eu separaria este texto em vários módulos. Porém, optei por faer algo mais sucinto e criar apenas este módulo &#8211; que complementa o Módulo #0, sobre os comandos básicos do Linux. Neste módulo, serão abordados vários temas da programação em Shell (Bash), [...]]]></description>
			<content:encoded><![CDATA[<p>(Caso não tenha lido a primeira parte (módulo #0), veja-a aqui: <a href="http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux/">http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux/</a>)</p>
<p>Inicialmente, eu separaria este texto em vários módulos. Porém, optei por faer algo mais sucinto e criar apenas este módulo &#8211; que complementa o Módulo #0, sobre os comandos básicos do Linux.</p>
<p>Neste módulo, serão abordados vários temas da programação em Shell (Bash), desde variáveis e funções, até expansões, expressões regulares etc.</p>
<p>Sem mais delongas, vamos ao que interessa! :)</p>
<p><span id="more-478"></span></p>
<h3>Sumário</h3>
<p><a href="#scripts">0. Scripts Shell</a><br />
<a href="#vars">1. Variáveis</a><br />
<a href="#envvars">1.1 Variáveis de Ambiente</a><br />
<a href="#espvars">1.2. Variáveis Especiais</a><br />
<a href="#fluxo">2. Controle de Fluxo</a><br />
<a href="#cond">2.1. Condicionais</a><br />
<a href="#if">2.1.1. if</a><br />
<a href="#case">2.1.2. case</a><br />
<a href="#select">2.1.3. select</a><br />
<a href="#repeat">2.2. Estruturas de Repetição (Loops)</a><br />
<a href="#for">2.2.1. for</a><br />
<a href="#while">2.2.2. while</a><br />
<a href="#until">2.2.3. until&#8230;do</a><br />
<a href="#break">2.2.4. break</a><br />
<a href="#continue">2.2.5. continue</a><br />
<a href="#cpattern">3. Padrão C/C++ em Expressões &#8220;(())&#8221;</a><br />
<a href="#es">4. Entrada/Saída</a><br />
<a href="#redir">4.1. Redirecionamento</a><br />
<a href="#pipe">4.2. Usando Pipelines</a><br />
<a href="#expansoes">5. Expansões</a><br />
<a href="#varexp">5.1. Expansão de Variáveis</a><br />
<a href="#params">6. Parâmetros de linha de comando</a><br />
<a href="#funcs">7. Definindo Funções</a><br />
<a href="#return">7.1. Retorno de Funções</a><br />
<a href="#er">8. Expressões Regulares em Bash</a><br />
<a href="#mathexp">9. Expressões Matemáticas</a><br />
<a href="#bashrc">10. O Arquivo .bashrc</a><br />
<a href="#alias">11. Aliases (Apelidos)</a><br />
<a href="#refs">12. Referências</a></p>
<h3><a name="scripts">0. Scripts Shell</a></h3>
<p>Antes de mostrar os recursos do shell, vamos dar uma olhada na maneira como devemos criar scripts shell. Isso facilitará a compreensão do restante do artigo.</p>
<p>Todo arquivo com códigos shell deve ter, na primeira linha, o identificador do interpretador a ser utilizado. A &#8220;linha mágica&#8221; que chama o interpretado bash é:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span></pre></div></div>

<p>O mesmo vale para outras linguagens interpretadas, como PHP, Python, Ruby, Perl etc.</p>
<p>Tendo essa linha no início do arquivo, o segundo passo é dar permissão de execução ao arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">chmod</span> +x script.sh
<span style="color: #000000; font-weight: bold;">&lt;</span>pre<span style="color: #000000; font-weight: bold;">&gt;</span>
&nbsp;
Feito isso, basta executar o script:
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;</span>pre <span style="color: #007800;">lang</span>=<span style="color: #ff0000;">&quot;bash&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span>
$ .<span style="color: #000000; font-weight: bold;">/</span>script.sh</pre></div></div>

<p>Também é possível executar o script usando o comando <strong>bash</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">bash</span> script.sh</pre></div></div>

<p>Assim não é necessário haver a &#8220;linha mágica&#8221; no início do script. Também não é preciso dar permissão de execução ao arquivo.</p>
<h3><a name="vars">1. Variáveis</a></h3>
<p>O Bash, assim como muitas outras linguagens, possui o conceito de variável. Para definir uma variável:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">nome_da_variavel</span>=<span style="color: #ff0000;">&quot;valor da variável&quot;</span></pre></div></div>

<p>É importante ressaltar que não deve haver espaços entre o símbolo de atribuição, o nome da variável e seu valor, para que o bash interprete o comando como atribuição, não chamada de comandos.</p>
<p>Para exibir o valor de uma variável, basta usar <strong>echo</strong> da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$nome_da_variavel</span></pre></div></div>

<h4><a name="envvars">1.1 Variáveis de Ambiente</a></h4>
<p>As variáveis de ambiente são aquelas conhecidas pelos demais processos (programas em execução). Exemplos destas variáveis são: HOME, PATH, EDITOR, etc.</p>
<p>Para entender o seu uso, vejamos um exemplo: editores de texto, como <strong>Vi</strong>, possuem diferentes interfaces para os modos texto e gráfico e necessitam saber qual o tipo de terminal o usuário está usando. A variável de ambiente TERM é o modo pelo qual isto pode ser determinado. Outro exemplo são os programas de e-mail que permitem ao usuário editar mensagens com o editor de textos de sua preferência. Como estes programas sabem qual editor usar? É através da variável EDITOR ou VISUAL.</p>
<p>Qualquer variável pode se tornar uma variável de ambiente. Para isto, ela deve ser &#8220;exportada&#8221;, com o comando <strong>export</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #000000; font-weight: bold;">&lt;</span>variável<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Também podemos exportar e atribuir valores a uma variável numa única linha de comando:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #000000; font-weight: bold;">&lt;</span>variável<span style="color: #000000; font-weight: bold;">&gt;</span>=<span style="color: #000000; font-weight: bold;">&lt;</span>valor<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Podemos verificar quais são as variáveis de ambiente já definidas e seus respectivos valores usando o comando abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #660033;">-p</span></pre></div></div>

<p>Para visualizar todas as variáveis basta usar set ou env. Uma importante variável de ambiente é PATH que ajuda o shell a encontrar os comandos que o usuário executa. Todo comando executado é, na realidade, um arquivo. Estes arquivos são chamados executáveis e estão armazenados em vários diretórios como /bin ou /usr/bin. O valor da variável PATH é uma lista de diretórios em que o shell procura toda vez que executamos um comando cujo arquivo não é encontrado no diretório corrente. Assim, não precisamos alterar o diretório de trabalho todas vez que necessitamos executar um comando que se encontra em outro diretório. Basta acrescentar o diretório que contém tal comando à variável PATH. Os nomes dos diretórios na variável são separados pelo caractere dois-pontos (:).</p>
<p>Caso o usuário joao queira adicionar um outro diretório, digamos /home/joao/bin à variável PATH, deve proceder como mostrado a seguir:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">export</span> <span style="color: #007800;">PATH</span>=<span style="color: #007800;">$PATH</span>:<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>joao<span style="color: #000000; font-weight: bold;">/</span>bin   <span style="color: #666666; font-style: italic;"># adiciona o diretório</span>
$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$PATH</span>                         <span style="color: #666666; font-style: italic;"># verifica</span>
<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>bin:<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>joao<span style="color: #000000; font-weight: bold;">/</span>bin</pre></div></div>

<p>O primeiro comando faz com que a variável receba o seu valor atual, concatenado com o nome do diretório a ser acrescentado. Observe que existe um &#8220;:&#8221; antes do nome do diretório. O segundo comando é utilizado apenas para visualizarmos o resultado do primeiro.</p>
<h4><a name="espvars">1.2. Variáveis Especiais</a></h4>
<p>Existem algumas variáveis especiais, normalmente utilizadas em script shell, para verificação de parâmetros, valores de retorno de comandos e funções etc.</p>
<table width="100%">
<thead>
<tr>
<td>Variável</td>
<td>Descrição</td>
</tr>
</thead>
<tbody>
<tr>
<td>$0</td>
<td>Parâmetro número 0 (nome do comando ou função)</td>
</tr>
<tr>
<td>$1</td>
<td>Parâmetro número 1 (da linha de comando ou função)</td>
</tr>
<tr>
<td>&#8230;</td>
<td>Parâmetro número N &#8230;</td>
</tr>
<tr>
<td>$9</td>
<td>Parâmetro número 9 (da linha de comando ou função)</td>
</tr>
<tr>
<td>${10}</td>
<td>Parâmetro número 10 (da linha de comando ou função)</td>
</tr>
<tr>
<td>$#</td>
<td>Número total de parâmetros da linha de comando ou função</td>
</tr>
<tr>
<td>$*</td>
<td>Todos os parâmetros, como uma string única</td>
</tr>
<tr>
<td>$@</td>
<td>Todos os parâmetros, como várias strings protegidas</td>
</tr>
<tr>
<td>$$</td>
<td>Número PID do processo atual (do próprio script)</td>
</tr>
<tr>
<td>$!</td>
<td>Número PID do último processo em segundo plano</td>
</tr>
<tr>
<td>$_</td>
<td>Último argumento do último comando executado</td>
</tr>
<tr>
<td>$?</td>
<td>Valor de retorno do último comando executado</td>
</tr>
</tbody>
</table>
<h3><a name="fluxo">2. Controle de Fluxo</a></h3>
<p>Controle de fluxo permite interromper, continuar e deslocar o fluxo de execução do script. Isso envolve controles de decisão (condicionais) e estruturas de repetição (loops).</p>
<h4><a name="cond">2.1. Condicionais</a></h4>
<h4><a name="if">2.1.1. if</a></h4>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #000000; font-weight: bold;">&lt;</span>condicao<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">then</span>
    comandos
<span style="color: #000000; font-weight: bold;">elif</span> <span style="color: #000000; font-weight: bold;">&lt;</span>condicao_2<span style="color: #000000; font-weight: bold;">&gt;</span>
    comandos 
<span style="color: #000000; font-weight: bold;">else</span>
    comandos 
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>O <strong>if</strong>, ao contrário do que ocorre em muitas outras linguagens, testa o retorno de um comando, não uma expressão.</p>
<p>Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #000000;">5</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">7</span>
<span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'5 é menor que 7'</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>Porém, é possível posicionar a expressão entre colchetes, de forma a tornar o if mais parecido com o que acontece em outras linguagens:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000;">5</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">7</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'5 é menor que 7'</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>O &#8220;-lt&#8221; significa &#8220;<em>less than</em>&#8220;, ou seja, &#8220;<em>menor que</em>&#8220;, equivalendo ao operador &#8220;<".</p>
<p>Outros possíveis operadores são:</p>
<p><strong>Comparação Numérica</strong><br />
-lt: É menor que (LessThan)<br />
-gt: É maior que (GreaterThan)<br />
-le: É menor igual (LessEqual)<br />
-ge: É maior igual (GreaterEqual)<br />
-eq: É igual (EQual)<br />
-ne: É diferente (NotEqual)</p>
<p><strong>Comparação de Strings</strong><br />
=: É igual<br />
!=: É diferente<br />
-n: É não nula (não vazia)<br />
-z: É nula (vazia)</p>
<p><strong>Operadores Lógicos</strong><br />
!: NÃO lógico (NOT)<br />
-a: E lógico (AND)<br />
-o: OU lógico (OR)</p>
<p><strong>Testes em arquivos</strong><br />
-b: É um dispositivo de bloco<br />
-c: É um dispositivo de caractere<br />
-d: É um diretório<br />
-e: O arquivo existe<br />
-f: É um arquivo normal<br />
-g: O bit SGID está ativado<br />
-G: O grupo do arquivo é o do usuário atual<br />
-k: O sticky-bit está ativado<br />
-L: O arquivo é um link simbólico<br />
-O: O dono do arquivo é o usuário atual<br />
-p: O arquivo é um named pipe<br />
-r: O arquivo tem permissão de leitura<br />
-s: O tamanho do arquivo é maior que zero<br />
-S: O arquivo é um socket<br />
-t: O descritor de arquivos N é um terminal<br />
-u: O bit SUID está ativado<br />
-w: O arquivo tem permissão de escrita<br />
-x: O arquivo tem permissão de execução<br />
-nt: O arquivo é mais recente (NewerThan)<br />
-ot: O arquivo é mais antigo (OlderThan)<br />
-ef: O arquivo é o mesmo (EqualFile)</p>
<h4><a name="case">2.1.2. case</a></h4>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">case</span> <span style="color: #000000; font-weight: bold;">&lt;</span>string<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">in</span>
    opcao1<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        comandos 
        <span style="color: #000000; font-weight: bold;">;;</span>
    opcao2<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        comandos 
        <span style="color: #000000; font-weight: bold;">;;</span>
    <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
        operação padrão
<span style="color: #000000; font-weight: bold;">esac</span></pre></div></div>

<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Digite um número&quot;</span>
<span style="color: #c20cb9; font-weight: bold;">read</span> x
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$x</span>&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> 
    <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Você digitou o número 1&quot;</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
    <span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Você digitou o número 2&quot;</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
    <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Você digitou outro número&quot;</span>
<span style="color: #000000; font-weight: bold;">esac</span></pre></div></div>

<h4><a name="select">2.1.3. select</a></h4>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">select</span> <span style="color: #000000; font-weight: bold;">&lt;</span>variavel<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>opcao1<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">&lt;</span>opcao2<span style="color: #000000; font-weight: bold;">&gt;</span> ...
<span style="color: #000000; font-weight: bold;">do</span> 
    comandos 
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>O comando <strong>select</strong> é pouco utilizado, mas pode ser muito útil para montar menus. Esse comando exibe um menu, associando cada opção a um número. Quando o usuário seleciona o número da opção, o seu valor é associado à <variavel>.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">select</span> i <span style="color: #000000; font-weight: bold;">in</span> lista_arquivos lista_arquivos_tree
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$i</span>&quot;</span> <span style="color: #000000; font-weight: bold;">in</span> 
        lista_arquivos<span style="color: #7a0874; font-weight: bold;">&#41;</span>
            <span style="color: #c20cb9; font-weight: bold;">ls</span>
            <span style="color: #000000; font-weight: bold;">;;</span>
        lista_arquivos_tree<span style="color: #7a0874; font-weight: bold;">&#41;</span>
            <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-R</span>
            <span style="color: #000000; font-weight: bold;">;;</span>
    <span style="color: #000000; font-weight: bold;">esac</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<h4><a name="repeat">2.2. Estruturas de Repetição (Loops)</a></h3>
<p>Loops são estruturas que permitem fazer iterações sobre algum dado.</p>
<h4><a name="for">2.2.1. for</a></h4>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> <span style="color: #000000; font-weight: bold;">&lt;</span>var<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">&lt;</span>lista<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>comandos<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>&#8220;var&#8221; é o nome da variável a ser usada no bloco de repetição. &#8220;lista&#8221; pode ser uma lista de dados, fixa ou retornada por outro comando (como o ls), uma sequência de números etc.</p>
<p>Exemplos:</p>
<p>Exibe uma sequência de números:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000;">1</span> <span style="color: #000000;">2</span> <span style="color: #000000;">3</span> <span style="color: #000000;">4</span> <span style="color: #000000;">5</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Lista os diretórios e arquivos da raiz do sistema de arquivos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">1</span> <span style="color: #000000;">10</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> $<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<h4><a name="while">2.2.2. while</a></h4>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">while</span> <span style="color: #000000; font-weight: bold;">&lt;</span>condicao<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>comandos<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Exemplos:</p>
<p>Exibe a sequência de 1 a 10:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
    <span style="color: #007800;">i</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Loop infinito que exibe &#8220;bash&#8221; na tela:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">true</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'bash'</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Lendo strings da entrada padrão:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> i
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Voce digitou a string: '</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Exibe as linhas de um arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #ff0000;">'arquivo.txt'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> i
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Esse exemplo facilita o trabalho com arquivos de texto, cujas linhas possuem espaços. Se fosse usado um loop for nesse caso, seria necessário alterar a variável de ambiente IFS, definindo o separador para quebra de linha (\n).</p>
<p>Uma variação do exemplo anterior é esta:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> i
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span> <span style="color: #000000; font-weight: bold;">&lt;</span> arquivo.txt</pre></div></div>

<p>A principal diferença entre estes dois últimos exemplos é que, no primeiro, o loop while é executado num subshell, devido ao uso do pipe (|). No segundo exemplo, o while é executado no shell corrente.</p>
<p>Para ilustrar o problema, crie um arquivo chamado &#8220;arq.txt&#8221; com algumas linhas de texto. Crie este script e execute-o:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">FILE</span>=<span style="color: #ff0000;">'arq.txt'</span>
&nbsp;
<span style="color: #007800;">total</span>=<span style="color: #000000;">0</span>
<span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #007800;">$FILE</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> i
<span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #007800;">total</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>total+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Total de linhas: '</span> <span style="color: #007800;">$total</span>
&nbsp;
<span style="color: #007800;">total</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> i
<span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #007800;">total</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>total+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span> <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #007800;">$FILE</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'Total de linhas: '</span> <span style="color: #007800;">$total</span></pre></div></div>

<p>O primeiro loop é executado num subshell, fazendo com que a variável &#8220;total&#8221;, usada no corpo do loop, existe apenas nesse subshell. No segundo caso, isso não ocorre. Isso pode gerar grandes dores de cabeça&#8230; (como já ocorreu comigo)</p>
<h4><a name="until">2.2.3. until&#8230;do</a></h4>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">until</span> <span style="color: #000000; font-weight: bold;">&lt;</span>condicao<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">&lt;</span>comandos<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Nesse loop, a condição é oposta à usada no while. Por exemplo:</p>
<p>Com while:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-lt</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
    <span style="color: #007800;">i</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Com unitl:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">until</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-ge</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
    <span style="color: #007800;">i</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Para fazer a mesma coisa, tivemos que usar expressões diferentes na condição do loop. </p>
<h4><a name="break">2.2.4. break</a></h4>
<p>O comando break encerra um loop imediatamente.</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">true</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-ge</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
    <span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #7a0874; font-weight: bold;">break</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
    <span style="color: #007800;">i</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i+<span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> i
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$i</span> <span style="color: #660033;">-eq</span> <span style="color: #000000;">0</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
    <span style="color: #000000; font-weight: bold;">then</span>
        <span style="color: #7a0874; font-weight: bold;">break</span>
    <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<h4><a name="continue">2.2.5. continue</a></h4>
<p>O comando continue para a execução da iteração corrente e vai para a próxima iteração, mesmo que haja mais comandos no bloco de repetição.</p>
<h3><a name="cpattern">3. Padrão C/C++ em Expressões &#8220;(())&#8221;</a></h3>
<p>É possível usar o padrão C em expressões do shell, como em condicionais de estruturas de controle. Para isso, basta colocar a expressão entre dois parênteses. </p>
<p>Exemplos;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">i</span>=<span style="color: #000000;">0</span>
<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span> i <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000;">10</span> <span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
    <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i++<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>É possível, inclusive, usar o padrão do loop for do C:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">for</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i = <span style="color: #000000;">0</span>; i <span style="color: #000000; font-weight: bold;">&lt;</span> <span style="color: #000000;">10</span>; i++<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$i</span>
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<h3><a name="es">4. Entrada/Saída</a></h3>
<p>Existem três dispositivos principais, que sempre estão abertos, que merecem destaque:</p>
<p>stdin (standard input): entrada padrão. Corresponde, em geral, ao teclado;<br />
stdout (standard output): saída padrão. Corresponde, em geral, à tela do terminal;<br />
stderr (standard error): saída padrão de erros. Corresponde, em geral, à tela do terminal, também.</p>
<p>Esses três dispositivos estão em /dev e estão sempre disponíveis. Quem programa em C, sabe muito bem disso, pois já deve ter usado stdin, stdout e stderr junto com fprintf, fread, fwrite e semelhantes; esses três dispositivos comportam-se como arquivos comuns, sempre abertos e que não devem ser fechados.<br />
É possível brincar com eles no próprio shell. Experimentem dar um cat em /dev/stdin para ver o que acontece. :)</p>
<h4><a name="redir">4.1. Redirecionamento</a></h4>
<p>A entrada de um programa consiste nos dados que lhe são passados inicialmente, os quais são necessários para a execução do programa. A entrada de um programa pode vir do teclado ou de um arquivo, por exemplo. Argumentos passados à comandos constituem a sua entrada.<br />
A saída é constituída pelas informações geradas pelo programa, ou seja, o resultado de sua execução. A saída pode ser mostrada na tela ou gravada em um arquivo de registro.</p>
<p>Muitos comandos do Linux têm sua entrada configurada para a entrada padrão e sua saída para a saída padrão. A entrada padrão é o teclado e a saída padrão é o monitor. Vejamos um exemplo usando o comando cat, que lê dados de todos os arquivos passados como parâmetros e os envia diretamente para a saída padrão. Usando o comando abaixo, veremos o conteúdo do arquivo &#8220;arq1&#8243; seguido pelo conteúdo de &#8220;arq2&#8243;.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> arq1 arq2</pre></div></div>

<p>Entretanto, se nenhum nome de arquivo for dado como parâmetro, o comando cat lê dados da entrada padrão e os envia para a saída padrão. Para interromper, deve-se pressionar as teclas ctrl e d simultaneamente (ctrl+d).</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> 
Ola<span style="color: #000000; font-weight: bold;">!</span> Tem alguem ai?  <span style="color: #666666; font-style: italic;"># usuário </span>
Ola<span style="color: #000000; font-weight: bold;">!</span> Tem alguem ai?  <span style="color: #666666; font-style: italic;"># eco do sistema </span>
Ate mais<span style="color: #000000; font-weight: bold;">!</span>            <span style="color: #666666; font-style: italic;"># usuário </span>
Ate mais<span style="color: #000000; font-weight: bold;">!</span>            <span style="color: #666666; font-style: italic;"># eco do sistema</span>
              <span style="color: #666666; font-style: italic;"># usuário pressiona ctrl+d</span></pre></div></div>

<p>Como podemos ver, cada linha que o usuário digita é imediatamente ecoada pelo comando cat. Aqui um outro exemplo: o comando sort lê dados da entrada padrão &#8211; a menos que algum arquivo seja dado como parâmetro &#8211; e ordena os dados, enviando-os para a saída padrão:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sort</span> 
bananas     <span style="color: #666666; font-style: italic;"># usuário</span>
peras       <span style="color: #666666; font-style: italic;"># usuário</span>
goiabas     <span style="color: #666666; font-style: italic;"># usuário</span>
            <span style="color: #666666; font-style: italic;"># ctrl+d</span>
bananas     <span style="color: #666666; font-style: italic;"># eco do sistema</span>
goiabas     <span style="color: #666666; font-style: italic;"># eco do sistema</span>
peras       <span style="color: #666666; font-style: italic;"># eco do sistema</span></pre></div></div>

<p>Digamos que queremos enviar a saída do comando sort para um arquivo, gravando os dados digitados anteriormente. O shell nos permite redirecionar a saída para um arquivo usando o símbolo &#8220;>&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">&gt;</span> lista
bananas  <span style="color: #666666; font-style: italic;"># usuário</span>
peras    <span style="color: #666666; font-style: italic;"># usuário</span>
goiabas  <span style="color: #666666; font-style: italic;"># usuário</span>
         <span style="color: #666666; font-style: italic;"># ctrl+d</span></pre></div></div>

<p>Como se pode ver, o resultado do comando sort não é mostrado imediatamente após o se digitar ctrl+d. Ao invés disso, é salvo em um arquivo chamado &#8220;lista&#8221;. Vejamos o conteúdo desse arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> lista
bananas
goiabas
peras</pre></div></div>

<p>Com o redirecionamento de saída, temos uma maneira simples de criar arquivos de texto. Para isso, utilizamos o comando cat para ler a entrada padrão (teclado) e redirecionamos sua saída para um arquivo.</p>
<p>Ao usar &#8220;>&#8221; para redirecionar a saída para um arquivo, estamos realizando um redirecionamento destrutivo, ou seja, o comando &#8220;ls > lista&#8221; sobrescreve o conteúdo do arquivo &#8220;lista&#8221;. Isto é equivalente a dizer que todo o conteúdo anterior de &#8220;lista&#8221; é apagado.<br />
Se, ao invés disso, redirecionarmos usando &#8220;>>&#8221;, a saída será concatenada ao final do arquivo e o conteúdo (se houver) de &#8220;lista&#8221; será preservado. Para melhor entender isso, experimente executar a seguinte seqüência de comandos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> listagem
<span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span> listagem
<span style="color: #c20cb9; font-weight: bold;">less</span> listagem</pre></div></div>

<p>O redirecionamento neste exemplo, diferentemente do exemplo anterior, é denominado redirecionamento não-destrutivo.</p>
<h3><a name="pipe">4.2. Usando Pipelines</a></h3>
<p>Nos exemplos para o filtro sort, os dados de entrada eram digitados pelo usuário ou estavam gravados em um arquivo. O que aconteceria se quiséssemos ordenar dados vindos do saída de outro comando ? Para listar os arquivos do diretório corrente em ordem alfabética invertida devemos fazer com que a saída do comando ls seja ordenada pelo comando sort. Usando a opção &#8220;-r&#8221;, este comando ordena os dados na ordem inversa.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span>
historia  notas     tese      testes 
$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">&gt;</span> lista 
$ <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-r</span> lista 
testes
tese
notas
lista                             <span style="color: #666666; font-style: italic;"># observe esse nome de arquivo</span>
historia</pre></div></div>

<p>Aqui, salvamos a saída do comando ls em um arquivo (lista) e usamos sort com a opção &#8220;-r&#8221;. Porém, isso faz com que tenhamos um arquivo temporário para armazenar os dados. Assim, toda vez que fizermos isso, teremos que, em seguida, remover o arquivo lista. A solução é usar o que chamamos de pipeline, outro recurso do shell que nos permite conectar vários comandos usando um pipe, onde a saída do primeiro comando é enviada diretamente à entrada do segundo e assim por diante no caso de haver mais de dois comandos conectados por pipes.</p>
<p>No nosso caso, queremos enviar a saída do comando ls para a entrada do comando sort. O símbolo &#8220;|&#8221; (barra vertical) é usado para criar um pipe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-r</span> 
testes
tese
notas
historia</pre></div></div>

<p>Note que neste exemplo, nenhum nome de arquivo é usado na linha de comando, diferentemente do exemplo anterior que fazia o uso do arquivo intermediário lista. Outra diferença é que o nome desse arquivo intermediário aparece no resultado do penúltimo exemplo, mas não neste último. O comando é mais curto, mais fácil de digitar e o resultado é mais adequado pois não inclui nomes de arquivos intermediários.</p>
<p>É importante observar que o redirecionamento e o uso de pipes são características do shell e não dos comandos em si. É o shell quem provê a sintaxe dos símbolos &#8220;>&#8221;, &#8220;<" e "|". Logo, se você criar um programa que utilize entrada de dados via stdin, poderá usar redirecionamento para especificar uma entrada para o seu programa.</p>
<h3><a name="expansoes">5. Expansões</a></h3>
<p>Expansões são caracteres, ou uma sequência deles, que expressa outro significado. O intuito disso é facilitar e padronizar comandos.</p>
<p>~: path à home do usuário corrente<br />
~user: path à home do usuário &#8220;user&#8221;<br />
{a,b,c}: presença do caractere &#8220;a&#8221;, &#8220;b&#8221; ou &#8220;c&#8221;. Podem ser usadas strings em vez de simplesmente caracteres.</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> ~</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> ~root</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">/</span>dev<span style="color: #000000; font-weight: bold;">/</span>std<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000; font-weight: bold;">in</span>,out,err<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<h4><a name="varexp">5.1. Expansão de Variáveis</a></h4>
<table width="100%">
<thead>
<tr>
<td>Sintaxe</td>
<td>Expansão</td>
</tr>
</thead>
<tbody>
<tr>
<td>${var:-texto}</td>
<td>Se var não está definida, retorna &#8216;texto&#8217;</td>
</tr>
<tr>
<td>${var:=texto}</td>
<td>Se var não está definida, defina-a com &#8216;texto&#8217;</td>
</tr>
<tr>
<td>${var:?texto}</td>
<td>Se var não está definida, retorna o erro &#8216;texto&#8217;</td>
</tr>
<tr>
<td>${var:+texto}</td>
<td>Se var está definida, retorna &#8216;texto&#8217;, senão retorna o vazio</td>
</tr>
<tr>
<td>${var}</td>
<td>É o mesmo que $var, porém não ambíguo</td>
</tr>
<tr>
<td>${#var}</td>
<td>Retorna o tamanho da string</td>
</tr>
<tr>
<td>${!var}</td>
<td>Executa o conteúdo de $var (igual &#8216;eval \$$var&#8217;)</td>
</tr>
<tr>
<td>${!texto*}</td>
<td>Retorna os nomes de variáveis começadas por &#8216;texto&#8217;</td>
</tr>
<tr>
<td>${var:N}</td>
<td>Retorna o texto a partir da posição &#8216;N&#8217;</td>
</tr>
<tr>
<td>${var:N:tam}</td>
<td>Retorna &#8216;tam&#8217; caracteres a partir da posição &#8216;N&#8217;</td>
</tr>
<tr>
<td>${var#texto}</td>
<td>Corta &#8216;texto&#8217; do início da string</td>
</tr>
<tr>
<td>${var##texto}</td>
<td>Corta &#8216;texto&#8217; do início da string (* guloso)</td>
</tr>
<tr>
<td>${var%texto}</td>
<td>Corta &#8216;texto&#8217; do final da string</td>
</tr>
<tr>
<td>${var%%texto}</td>
<td>Corta &#8216;texto&#8217; do final da string (* guloso)</td>
</tr>
<tr>
<td>${var/texto/novo}</td>
<td>Substitui &#8216;texto&#8217; por &#8216;novo&#8217;, uma vez</td>
</tr>
<tr>
<td>${var//texto/novo}</td>
<td>Substitui &#8216;texto&#8217; por &#8216;novo&#8217;, sempre</td>
</tr>
<tr>
<td>${var/#texto/novo}</td>
<td>Se a string começar com &#8216;texto&#8217;, substitui &#8216;texto&#8217; por &#8216;novo&#8217;</td>
</tr>
<tr>
<td>${var/%texto/novo}</td>
<td>Se a string terminar com &#8216;texto&#8217;, substitui &#8216;texto&#8217; por &#8216;novo&#8217;</td>
</tr>
</tbody>
</table>
<h3><a name="params">6. Parâmetros de linha de comando</a></h3>
<p>Assim como em outras linguagens, é possível passar parâmetros para scripts shell. Para isso, usam-se as variáveis $1, $2, &#8230; A variável $0 contém o comando chamado via linha de comando.</p>
<p>Exemplo:</p>
<p>Crie um arquivo &#8220;test.sh&#8221; com este conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'$0 = '</span><span style="color: #007800;">$0</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'$1 = '</span><span style="color: #007800;">$1</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'$2 = '</span><span style="color: #007800;">$2</span></pre></div></div>

<p>Veja as saídas das execuções abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>test.sh 
<span style="color: #007800;">$0</span> = .<span style="color: #000000; font-weight: bold;">/</span>test.sh
<span style="color: #007800;">$1</span> = 
<span style="color: #007800;">$2</span> = 
$ .<span style="color: #000000; font-weight: bold;">/</span>test.sh um
<span style="color: #007800;">$0</span> = .<span style="color: #000000; font-weight: bold;">/</span>test.sh
<span style="color: #007800;">$1</span> = um
<span style="color: #007800;">$2</span> = 
$ .<span style="color: #000000; font-weight: bold;">/</span>test.sh um dois
<span style="color: #007800;">$0</span> = .<span style="color: #000000; font-weight: bold;">/</span>test.sh
<span style="color: #007800;">$1</span> = um
<span style="color: #007800;">$2</span> = dois</pre></div></div>

<h3><a name="funcs">7. Definindo Funções</a></h3>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> nome_da_funcao<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
     <span style="color: #000000; font-weight: bold;">&lt;</span>comandos<span style="color: #000000; font-weight: bold;">&gt;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

<p>Para chamar a função:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">nome_da_funcao
&nbsp;
<span style="color: #666666; font-style: italic;"># caso haja parâmetros</span>
nome_da_funcao param1 param2 ...</pre></div></div>

<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> imprime<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Sou a função '<span style="color: #007800;">${0}</span>'&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Param 1: <span style="color: #007800;">${1}</span>&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Param 2: <span style="color: #007800;">${2}</span>&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Lista de parâmetros: <span style="color: #007800;">${*}</span>&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
imprime um dois tres quatro</pre></div></div>

<p>Da mesma forma como foram usados $0, $1 etc anteriormente, aqui essas variáveis são usadas para retornar os parâmetros da função. Logo, percebe-se que, dentro de funções, não é possível acessar parâmetros de script, a menos que eles sejam passados por parâmetro para a função.</p>
<h4><a name="return">7.1. Retorno de Funções</a></h4>
<p>Antes de tudo, é preciso diferenciar retorno de função e saída de função. Por exemplo, ao se executar o comando &#8220;cat /etc/passwd&#8221;, a saída é o conteúdo do arquivo; o retorno é 0 (ou outro valor, caso ocorra erro). O retorno de uma função shell é um valor inteiro, normalmente utilizado para definir o status da função, ou seja, se ocorreu algum erro ou e ela foi executada corretamente.</p>
<p>Para obter o valor de retorno de uma função, usa-se a variável &#8220;$?&#8221;. Ela exibe o retorno do último  comando executado. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$?</span></pre></div></div>

<p>Para retornar valor (status) numa função, usa-se o comando return.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> retorna<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;sou um valor&quot;</span>
    <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #000000;">42</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #007800;">valor</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span>retorna<span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$?</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$valor</span></pre></div></div>

<p>Ao se executar a função, sua saída será &#8220;sou um valor&#8221;; seu retorno será 42.</p>
<p>Em shell, considera-se o valor 0 como execução bem sucedida. Qualquer outro valor representa erro. É por isso que recomenda-se que toda função <code>main</code> de um programa em C retorne o valor 0, desde que não ocorra algum erro.</p>
<h3><a name="er">8. Expressões Regulares em Bash</a></h3>
<p>Expressões regulares em shell podem ser usadas em comparações (if&#8217;s), por exemplo. Em if&#8217;s, usa-se o operador &#8220;=~&#8221; para realizar comparações usando ER&#8217;s:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">s</span>=<span style="color: #ff0000;">&quot;bash&quot;</span>
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$s</span>&quot;</span> =~ ^b <span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">'começa com b'</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<h3><a name="mathexp">9. Expressões Matemáticas</a></h3>
<p>O bash não trabalha com expressões matemáticas tão facilmente. Existe o comando &#8220;let&#8221;, que permite realizar expressões matemáticas, mas é mais comum se usar a sintaxe semelhante ao C, utilizando dois parênteses:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #007800;">a</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">1</span> + <span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
$ <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>i++<span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
$ <span style="color: #007800;">x</span>=$<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>x<span style="color: #000000; font-weight: bold;">*</span><span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
...</pre></div></div>

<h3><a name="bashrc">10. O Arquivo .bashrc</a></h3>
<p>Na home dos usuários (~), é comum haver o arquivo .bashrc (o ponto no início indica que o arquivo é oculto). Esse arquivo é sempre executado quando se abre um shell. Nele, constam diversas configurações, como definição de variáveis de ambientes, definição de aliases etc. Você pode editar esse arquivo (ou criá-lo, caso não exista):</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">vim</span> ~<span style="color: #000000; font-weight: bold;">/</span>.bashrc</pre></div></div>

<p>É possível usar outros editores, não apenas o vim.</p>
<h3><a name="alias">11. Aliases (Apelidos)</a></h3>
<p>Algumas vezes usamos comandos que necessitam de várias opções e argumentos. Para amenizar o trabalho de digitarmos repetidamente estes comandos o bash oferece um recurso chamado alias com o qual podemos definir sinônimos ou &#8220;apelidos&#8221; para um comando. Um alias pode ser definido na linha de comando da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #000000; font-weight: bold;">&lt;</span>nome<span style="color: #000000; font-weight: bold;">&gt;</span>=<span style="color: #000000; font-weight: bold;">&lt;</span>comando<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Observe que não pode haver espaços em branco antes ou depois do &#8220;=&#8221;.</p>
<p>Esta sintaxe indica que nome é um &#8220;alias&#8221; (apelido) para comando. Toda vez que digitarmos o comando &#8220;nome&#8221;, o bash o substituirá por &#8220;comando&#8221;.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">lf</span>=<span style="color: #ff0000;">'ls -F'</span></pre></div></div>

<p>Isso fará o shell executar &#8220;ls -F&#8221; toda vez que usarmos &#8220;lf&#8221; na linha de comando. Ou seja, o que o alias faz na verdade é substituir a palavra &#8220;lf&#8221; por &#8220;ls -F&#8221;. Observe neste exemplo, existe um espaço em branco entre ls e -F. Sempre que houver espaços em branco na definição de um campo, todo o campo deve ser digitado entre aspas simples (&#8216;) ou duplas (&#8220;).</p>
<p>É possível definir aliases em seu .bashrc, para que eles estejam sempre disponíveis na sua sessão.</p>
<h3><a name="refs">12. Referências</a></h3>
<p>Linux Básico:<br />
http://www.inf.ufpr.br/nicolui/Docs/Livros/LinuxBasico/ ou http://www.inf.ufpr.br/nicolui/Docs/Livros/LinuxBasico.pdf</p>
<p>Linux Avançado</p>
<p>http://www.inf.ufpr.br/nicolui/Docs/Livros/LinuxAvancado.pdf</p>
<p>Canivete Suiço do Shell (Bash)</p>
<p>http://aurelio.net/shell/canivete/</p>
<p>Livro Shell Script Profissional (Livro físico):</p>
<p>http://www.shellscript.com.br/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/curso-de-shell-script-modulo-1-scripts-shell-estruturas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Curso de Shell Script: Módulo #0 &#8211; Comandos Básicos do Linux</title>
		<link>http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux/</link>
		<comments>http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux/#comments</comments>
		<pubDate>Fri, 06 May 2011 14:34:11 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[básicos]]></category>
		<category><![CDATA[comandos]]></category>
		<category><![CDATA[iniciante]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=443</guid>
		<description><![CDATA[Pretendo escrever uma série de posts sobre Shell Script, para ensinar e consolidar o que sei, além de aprender alguns detalhes a mais. Não adianta querer programar usando Shell sem conhecer os comandos básicos do Linux. Por isso o primeiro módulo do &#8220;curso&#8221; abordará os comandos básicos do Linux, que são fundamentais para a construção [...]]]></description>
			<content:encoded><![CDATA[<p>Pretendo escrever uma série de posts sobre Shell Script, para ensinar e consolidar o que sei, além de aprender alguns detalhes a mais.</p>
<p>Não adianta querer programar usando Shell sem conhecer os comandos básicos do Linux. Por isso o primeiro módulo do &#8220;curso&#8221; abordará os comandos básicos do Linux, que são fundamentais para a construção dos scripts.</p>
<p><span id="more-443"></span></p>
<p>Vamos analisar apenas alguns comandos, os mais conhecidos e usados, juntamente com algumas de suas opções. A maioria dos comandos permitem o uso de inúmeras opções, não sendo possível abordar todos elas neste texto.</p>
<p>Antes de iniciarmos, vale lembrar que os manuais de todos os comandos podem ser lidos usando o comando <code>man nome_do_comando</code>, por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">man</span> <span style="color: #7a0874; font-weight: bold;">echo</span></pre></div></div>

<p>A maioria dos comandos também têm a opção -h, ou &#8211;help, que lista os parâmetros aceitos pelo programa.</p>
<p>Os comandos estão ordenados alfabeticamente, sem levar em consideração relevância ou complexidade de utilização.</p>
<h3>Sumário</h3>
<p><a href="#cmd_awk">awk</a><br />
<a href="#cmd_cat">cat</a><br />
<a href="#cmd_cd">cd</a><br />
<a href="#cmd_chmod">chmod</a><br />
<a href="#cmd_cut">cut</a><br />
<a href="#cmd_date">date</a><br />
<a href="#cmd_diff">diff</a><br />
<a href="#cmd_echo">echo</a><br />
<a href="#cmd_find">find</a><br />
<a href="#cmd_grep">grep</a><br />
<a href="#cmd_head">head</a><br />
<a href="#cmd_kill">kill</a><br />
<a href="#cmd_ls">ls</a><br />
<a href="#cmd_printf">printf</a><br />
<a href="#cmd_rev">rev</a><br />
<a href="#cmd_scp">scp</a><br />
<a href="#cmd_sed">sed</a><br />
<a href="#cmd_seq">seq</a><br />
<a href="#cmd_sort">sort</a><br />
<a href="#cmd_ssh">ssh</a><br />
<a href="#cmd_tac">tac</a><br />
<a href="#cmd_tail">tail</a><br />
<a href="#cmd_top">top</a></p>
<h3><a name="cmd_awk">awk</a></h3>
<p>O AWK é uma linguagem de programação para processamento de textos. Ao lado do comando <a href="#cmd_sed">SED</a>, é capaz de realizar muitos truques.</p>
<p>Um post exclusivo sobre AWK pode ser visto aqui:</p>
<p><a href="http://www.rberaldo.com.br/blog/tutorial-awk" target="_blank">http://www.rberaldo.com.br/blog/tutorial-awk</a></p>
<h3><a name="cmd_cat">cat</a></h3>
<p>Exibe o conteúdo de um arquivo.</p>
<p>Opções:<br />
-n : numera as linhas</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">hostname</span> 
orion</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #660033;">-n</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">hostname</span> 
     <span style="color: #000000;">1</span>	orion</pre></div></div>

<h3><a name="cmd_cd">cd</a></h3>
<p>Muda o diretório de trabalho, ou seja, entra em um determinado diretório.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>tmp</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">cd</span> ~</pre></div></div>

<h3><a name="cmd_chmod">chmod</a></h3>
<p>O chmod (<em>change mode</em>) muda as permissões de um arquivo ou diretório. O sistema de permissões em sistemas Unix-Like, como Linux ou Mac OS, é um dos pontos fortes desses sistemas. Porém, infelizmente, poucos usuários realmente sabem usá-lo.</p>
<p>Um post exclusivo ao chmod pode ser lido aqui:</p>
<p><a href="http://www.rberaldo.com.br/blog/chmod-permissoes-em-sistemas-linux-e-unix-like" target="_blank">http://www.rberaldo.com.br/blog/chmod-permissoes-em-sistemas-linux-e-unix-like</a></p>
<h3><a name="cmd_cut">cut</a></h3>
<p>Separa trechos ou campos de uma linha, por meio de um delimitador. Também trunca textos, exibindo apenas um número específico de caracteres.</p>
<p>Opções<br />
-d : define o delimitador<br />
-f : define o(s) campo(s) a ser(em) exibido(s)<br />
-c : número do caractere a ser exibido ou intervalo de caracteres</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;um:dois:tres:quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> -d: <span style="color: #660033;">-f</span> <span style="color: #000000;">2</span>
dois</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;um:dois:tres:quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> -d: <span style="color: #660033;">-f</span> <span style="color: #000000;">2</span>,<span style="color: #000000;">3</span>
dois:tres</pre></div></div>

<p>Também é possível definir intervalo de valores para a opção -f:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;um:dois:tres:quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> -d: <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span>-<span style="color: #000000;">3</span>
um:dois:tres</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;um:dois:tres:quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> -d: <span style="color: #660033;">-f</span> <span style="color: #000000;">2</span>-
dois:tres:quatro</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;1234567890&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">7</span>
<span style="color: #000000;">7</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;1234567890&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">1</span>,<span style="color: #000000;">3</span>,<span style="color: #000000;">5</span>
<span style="color: #000000;">135</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">beraldo<span style="color: #000000; font-weight: bold;">@</span>orion:~$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;1234567890&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">1</span>-<span style="color: #000000;">7</span>
<span style="color: #000000;">1234567</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;1234567890&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">8</span>-
<span style="color: #000000;">890</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">beraldo<span style="color: #000000; font-weight: bold;">@</span>orion:~$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;1234567890&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-c</span> <span style="color: #660033;">-5</span>
<span style="color: #000000;">12345</span></pre></div></div>

<h3><a name="cmd_date">date</a></h3>
<p>Mostra a data atual ou uma data específica, com diversas opções para formatação da data.</p>
<p>Opções:<br />
-d : especifica a data (Ex: tomorrow, 5 days ago)<br />
+%? : define o padrão de formatação da data. A lista de opções pode ser lida no manual do comando (<code>man date</code>).</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">date</span>
Dom Mai  <span style="color: #000000;">1</span> <span style="color: #000000;">20</span>:05:<span style="color: #000000;">47</span> BRT <span style="color: #000000;">2011</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;yesterday&quot;</span>
Sáb Abr <span style="color: #000000;">30</span> <span style="color: #000000;">20</span>:05:<span style="color: #000000;">59</span> BRT <span style="color: #000000;">2011</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;2 days ago&quot;</span>
Sex Abr <span style="color: #000000;">29</span> <span style="color: #000000;">20</span>:06:<span style="color: #000000;">10</span> BRT <span style="color: #000000;">2011</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">beraldo<span style="color: #000000; font-weight: bold;">@</span>orion:~$ <span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;2 days&quot;</span>
Ter Mai  <span style="color: #000000;">3</span> <span style="color: #000000;">20</span>:06:<span style="color: #000000;">13</span> BRT <span style="color: #000000;">2011</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">date</span> +<span style="color: #ff0000;">&quot;%d/%m/%Y&quot;</span>
01<span style="color: #000000; font-weight: bold;">/</span>05<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2011</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">date</span> <span style="color: #660033;">-d</span> <span style="color: #ff0000;">&quot;30 days&quot;</span> +<span style="color: #ff0000;">&quot;Daqui 30 dias será %d/%m/%Y&quot;</span>
Daqui <span style="color: #000000;">30</span> dias será <span style="color: #000000;">31</span><span style="color: #000000; font-weight: bold;">/</span>05<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2011</span></pre></div></div>

<h3><a name="cmd_diff">diff</a></h3>
<p>Exibe as diferenças entre dois arquivos.</p>
<p>Opções:<br />
-i : case-insensitive (indiferente a maiúsculas e minúsculas)<br />
-y : exibe as diferenças lado a lado<br />
-E : ignora diferenças no tamanho do TAB<br />
-B : ignora linhas vazias<br />
-b : ignora quantidade de espaços</p>
<p>Outros comandos semelhantes muito úteis: <code>vimdiff</code> e <code>diff3</code></p>
<p>O comando diff é muito útil para encontrar cópias de trabalhos de faculdade, por exemplo. :P</p>
<h3><a name="cmd_echo">echo</a></h3>
<p>Exibe um texto na saída padrão.</p>
<p>Opções:<br />
-n : não pula linha no final do texto<br />
-e : interpreta caracteres de escape</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;sou <span style="color: #000099; font-weight: bold;">\n</span> um <span style="color: #000099; font-weight: bold;">\n</span> texto&quot;</span>
sou \n um \n texto</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou <span style="color: #000099; font-weight: bold;">\n</span> um <span style="color: #000099; font-weight: bold;">\n</span> texto&quot;</span>
sou 
 um 
 texto</pre></div></div>

<h3><a name="cmd_find">find</a></h3>
<p>Localiza arquivos no sistema de arquivos.</p>
<p>Esse comando possui diversas opções e truques. Por isso, merece um post específico para ele. Um post muito bom sobre o find pode ser encontrado aqui:</p>
<p><a href="http://gerencievocemesmo.com.br/site/?p=56" target="_blank" onclick="urchinTracker('/outgoing/gerencievocemesmo.com.br/site/?p=56&amp;referer=');">http://gerencievocemesmo.com.br/site/?p=56</a></p>
<h3><a name="cmd_grep">grep</a></h3>
<p>Localiza padrões dentro de um ou mais arquivos. A busca é feita usando Expressões Regulares.</p>
<p>Opções:<br />
-i : case-insensitive<br />
-v : inverte o critério de busca<br />
-r : recursivo, busca em subdiretórios também<br />
-n : mostra, também, o número da linha<br />
-c : conta o número de linhas que casaram com o padrão<br />
-l : exibe só o nome do arquivo onde o padrão foi encontrado<br />
-A N : mostra N linhas após a linha onde o padrão foi encontrado<br />
-B N : mostra N linhas antes da linha onde o padrão foi encontrado<br />
-C N : mostra N linhas antes e depois da linha onde o padrão foi encontrado</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">10</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-A2</span> <span style="color: #660033;">-B3</span> <span style="color: #ff0000;">&quot;5&quot;</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">3</span>
<span style="color: #000000;">4</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">6</span>
<span style="color: #000000;">7</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;olá<span style="color: #000099; font-weight: bold;">\n</span>sou<span style="color: #000099; font-weight: bold;">\n</span>1<span style="color: #000099; font-weight: bold;">\n</span>teste<span style="color: #000099; font-weight: bold;">\n</span>para<span style="color: #000099; font-weight: bold;">\n</span>grep&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;^[a-z]&quot;</span>
olá
sou
teste
para
<span style="color: #c20cb9; font-weight: bold;">grep</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;olá<span style="color: #000099; font-weight: bold;">\n</span>sou<span style="color: #000099; font-weight: bold;">\n</span>1<span style="color: #000099; font-weight: bold;">\n</span>teste<span style="color: #000099; font-weight: bold;">\n</span>para<span style="color: #000099; font-weight: bold;">\n</span>grep&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-v</span> <span style="color: #ff0000;">&quot;^[a-z]&quot;</span>
<span style="color: #000000;">1</span></pre></div></div>

<p>Para usar todos os recursos das Expressões Regulares, use <code>egrep</code> em vez de <code>grep</code>, o que permite usar grupos, quantificadores &#8220;+&#8221; e &#8220;{quantificador}&#8221;. </p>
<h3><a name="cmd_head">head</a></h3>
<p>Mostra o início de um arquivo. O limite pode ser estabelecido em número de linhas ou caracteres. É o inverso do comando <code>tail</code>.</p>
<p>Opções:<br />
-n N : exibe as N primeiras linhas<br />
-c N : exibe os N primeiros caracteres</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;olá, sou<span style="color: #000099; font-weight: bold;">\n</span>um teste<span style="color: #000099; font-weight: bold;">\n</span>para o<span style="color: #000099; font-weight: bold;">\n</span>comando head&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-n</span> <span style="color: #000000;">2</span>
olá, sou
um teste</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;ola, sou<span style="color: #000099; font-weight: bold;">\n</span>um teste<span style="color: #000099; font-weight: bold;">\n</span>para o<span style="color: #000099; font-weight: bold;">\n</span>comando head&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span> <span style="color: #660033;">-c</span> <span style="color: #000000;">7</span>
ola, so</pre></div></div>

<h3><a name="cmd_kill">kill</a></h3>
<p>O comando kill &#8220;mata&#8221; processos, ou seja, encerra, ou força o encerramento, de um programa.</p>
<p>Opções:<br />
-9 : força o encerramento da execução de um processo<br />
-1 : mata todos os processos que o usuário pode matar</p>
<p>Exemplos:</p>
<p>Força o encerramento do processo 1234:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #660033;">-9</span> <span style="color: #000000;">1234</span></pre></div></div>

<p>Encerra a sessão do usuário, ou seja, força o encerramento de todos os seus processos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #660033;">-1</span> <span style="color: #660033;">-9</span></pre></div></div>

<p>Os IDs dos processos (PID &#8211; Process ID) podem ser encontrados usando o comando ps, que é o gerenciador de processos. Com as opções &#8220;ux&#8221;, listam-se os processos do usuário. Com grep podemos filtrar a saída pelo processo desejado:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ps</span> ux <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> skype
beraldo   <span style="color: #000000;">2267</span>  <span style="color: #000000;">1.0</span>  <span style="color: #000000;">2.0</span> <span style="color: #000000;">281508</span> <span style="color: #000000;">82968</span> ?        Sl   09:<span style="color: #000000;">58</span>   <span style="color: #000000;">0</span>:<span style="color: #000000;">41</span> skype
beraldo   <span style="color: #000000;">5672</span>  <span style="color: #000000;">0.0</span>  <span style="color: #000000;">0.0</span>  <span style="color: #000000;">10128</span>   <span style="color: #000000;">848</span> pts<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">0</span>    S+   <span style="color: #000000;">11</span>:04   <span style="color: #000000;">0</span>:00 <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">--color</span>=auto skype</pre></div></div>

<p>O skype é o processo 2267. Para forçar seu encerramento, fazemos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">kill</span> <span style="color: #660033;">-9</span> <span style="color: #000000;">2267</span></pre></div></div>

<p>Como lição de casa, vale ler os manuais dos comandos killall e pkill. :)</p>
<h3><a name="cmd_ls">ls</a></h3>
<p>Lista o conteúdo de um diretório.</p>
<p>Opções:<br />
-a : lista arquivos e diretórios ocultos<br />
-l : mostra diversos atributos dos arquivos e diretórios, como data de criação, dono, permissões etc<br />
-R : lista o conteúdo recursivamente</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-a</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-la</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-laR</span></pre></div></div>

<h3><a name="cmd_printf">printf</a></h3>
<p>Exibe um texto na tela, com várias opções de formatação, semelhante à função <code>printf()</code>, da linguagem C.</p>
<p>As opções de formatação são praticamente as mesmas da linguagem C. A lista completa pode ser vista no manual (<code>man printf</code>).</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;%x<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000;">15</span>
f</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;%o<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000;">7</span>
<span style="color: #000000;">7</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;%o<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000;">8</span>
<span style="color: #000000;">10</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;%05d<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000;">70</span>
00070</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">printf</span> <span style="color: #ff0000;">&quot;%.2f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #000000;">70</span>
<span style="color: #000000;">70</span>,00</pre></div></div>

<h3><a name="cmd_rev">rev</a></h3>
<p>Esse comando inverte uma string.</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;texto&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">rev</span>
otxet</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;duh&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">rev</span>
hud</pre></div></div>

<h3><a name="cmd_scp">scp</a></h3>
<p>Copia arquivos e diretórios via <a href="#cmd_ssh">ssh</a>, ou seja, cópia segura entre máquinas remotas.</p>
<p>Opções:<br />
-r : cópia recursiva</p>
<p>Sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">scp</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>opções<span style="color: #7a0874; font-weight: bold;">&#93;</span> maquina:origem destino
$ <span style="color: #c20cb9; font-weight: bold;">scp</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>opções<span style="color: #7a0874; font-weight: bold;">&#93;</span> origem maquina:destino</pre></div></div>

<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">scp</span> 192.168.0.100:~<span style="color: #000000; font-weight: bold;">/</span>arquivo.txt .</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">scp</span> arquivo.txt 192.168.0.102:~</pre></div></div>

<h3><a name="cmd_sed">sed</a></h3>
<p>Linguagem para edição de arquivos e textos. Veja um post exclusivo a ela aqui:</p>
<p><a href="http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/">http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/</a></p>
<h3><a name="cmd_seq">seq</a></h3>
<p>Exibe uma sequência de números.</p>
<p>Opções:<br />
-s : separador (padrão &#8220;\n&#8221;)<br />
-f : formato (padrão &#8220;%g&#8221;)</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">3</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">3</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">3</span> <span style="color: #000000;">5</span>
<span style="color: #000000;">3</span>
<span style="color: #000000;">4</span>
<span style="color: #000000;">5</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">3</span> <span style="color: #000000;">2</span> <span style="color: #000000;">10</span>
<span style="color: #000000;">3</span>
<span style="color: #000000;">5</span>
<span style="color: #000000;">7</span>
<span style="color: #000000;">9</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">10</span> <span style="color: #660033;">-2</span> <span style="color: #000000;">0</span>
<span style="color: #000000;">10</span>
<span style="color: #000000;">8</span>
<span style="color: #000000;">6</span>
<span style="color: #000000;">4</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">0</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> -s, <span style="color: #000000;">10</span> <span style="color: #660033;">-2</span> <span style="color: #000000;">0</span>
<span style="color: #000000;">10</span>,<span style="color: #000000;">8</span>,<span style="color: #000000;">6</span>,<span style="color: #000000;">4</span>,<span style="color: #000000;">2</span>,<span style="color: #000000;">0</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">seq</span> -s, <span style="color: #660033;">-f</span><span style="color: #ff0000;">&quot;%04g&quot;</span> <span style="color: #000000;">10</span> <span style="color: #660033;">-2</span> <span style="color: #000000;">0</span>
0010,0008,0006,0004,0002,0000</pre></div></div>

<h3><a name="cmd_sort">sort</a></h3>
<p>Ordena linhas de um texto, alfabética ou numericamente.</p>
<p>Opções:<br />
-n : ordena numericamente<br />
-r : ordena inversamente (de Z para A e de 9 para 1)<br />
-f : case-insensitive<br />
-k N : ordena pela coluna N do texto<br />
-t : separador de coluna para a opção -k (padrão TAB)<br />
-o : define um arquivo para a saída do comando</p>
<p>Exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;um<span style="color: #000099; font-weight: bold;">\n</span>dois<span style="color: #000099; font-weight: bold;">\n</span>tres<span style="color: #000099; font-weight: bold;">\n</span>quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span>
dois
quatro
tres
um</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;um<span style="color: #000099; font-weight: bold;">\t</span>dois<span style="color: #000099; font-weight: bold;">\n</span>tres<span style="color: #000099; font-weight: bold;">\t</span>quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-k</span> <span style="color: #000000;">2</span>
um	dois
tres	quatro</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;um<span style="color: #000099; font-weight: bold;">\t</span>dois<span style="color: #000099; font-weight: bold;">\n</span>tres<span style="color: #000099; font-weight: bold;">\t</span>quatro&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-k</span> <span style="color: #000000;">2</span> <span style="color: #660033;">-r</span>
tres	quatro
um	dois</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;1<span style="color: #000099; font-weight: bold;">\n</span>10<span style="color: #000099; font-weight: bold;">\n</span>100<span style="color: #000099; font-weight: bold;">\n</span>2<span style="color: #000099; font-weight: bold;">\n</span>20<span style="color: #000099; font-weight: bold;">\n</span>200&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> 
<span style="color: #000000;">1</span>
<span style="color: #000000;">10</span>
<span style="color: #000000;">100</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">20</span>
<span style="color: #000000;">200</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;1<span style="color: #000099; font-weight: bold;">\n</span>10<span style="color: #000099; font-weight: bold;">\n</span>100<span style="color: #000099; font-weight: bold;">\n</span>2<span style="color: #000099; font-weight: bold;">\n</span>20<span style="color: #000099; font-weight: bold;">\n</span>200&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-n</span>
<span style="color: #000000;">1</span>
<span style="color: #000000;">2</span>
<span style="color: #000000;">10</span>
<span style="color: #000000;">20</span>
<span style="color: #000000;">100</span>
<span style="color: #000000;">200</span></pre></div></div>

<h3><a name="cmd_ssh">ssh</a></h3>
<p>O SSH (Secure Shell) realiza acesso remoto a outras máquinas Linux. Um post exclusivo a SSH pode ser lido aqui:</p>
<p><a href="http://www.rberaldo.com.br/blog/usando-o-ssh" target="_blank">http://www.rberaldo.com.br/blog/usando-o-ssh</a></p>
<h3><a name="cmd_tac">tac</a></h3>
<p>Inverso do comando <code>cat</code>. Exibe o conteúdo de um arquivo do fim para o início.</p>
<h3><a name="cmd_tail">tail</a></h3>
<p>Exibe o fim de um texto, exatamente o oposto do comando <code>head</code></p>
<p>Opções:<br />
-n N : número de linhas a exibir<br />
-c N : número de caracteres a exibir</p>
<p>Exemplos semelhantes ao do comando <code><a href="#cmd_head">head</a></code>.</p>
<h3><a name="cmd_top">top</a></h3>
<p>O comando top exibe os processos atualmente em execução. É semelhante ao ps, citado na seção do comando <a href="#cmd_kill">kill</a>, mas atualiza-se automaticamente, além de possuir várias opções de ordenação.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ top</pre></div></div>

<p>O comando &#8220;htop&#8221; é mais completo e <em>user-friendly</em>, mas normalmente não vem instalado nas distros Linux. É possível instalá-lo via gerenciador de pacotes. Por exemplo, em sistemas baseados em Debian:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># apt-get install htop</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/curso-shell-script-comandos-basicos-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conversão de vídeo AVI em MP4 via linha de comando</title>
		<link>http://www.rberaldo.com.br/blog/conversao-de-video-avi-em-mp4-via-linha-de-comando/</link>
		<comments>http://www.rberaldo.com.br/blog/conversao-de-video-avi-em-mp4-via-linha-de-comando/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 20:41:00 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[avi]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[conversão]]></category>
		<category><![CDATA[mp4]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=436</guid>
		<description><![CDATA[Converter vídeos de AVI para MP4 pode ser útil para muitas coisas, dentre elas, executar os vídeos em iPhones, iPods etc. Em Linux, há programas gráficos para isso, mas a linha de comando é interessante pois permite converter vários arquivos de uma só vez, automaticamente. Por isso mostrarei como executar essa ação via Terminal. Além [...]]]></description>
			<content:encoded><![CDATA[<p>Converter vídeos de AVI para MP4 pode ser útil para muitas coisas, dentre elas, executar os vídeos em iPhones, iPods etc. </p>
<p>Em Linux, há programas gráficos para isso, mas a linha de comando é interessante pois permite converter vários arquivos de uma só vez, automaticamente. Por isso mostrarei como executar essa ação via Terminal. Além disso postarei um Shell Script completo para isso.</p>
<p><span id="more-436"></span></p>
<p>É necessário ter instalados os pacotes <code>mplayer</code> e <code>mencoder</code> para executar os comandos.</p>
<p>Supondo que queremos converter o arquivo <code>video.avi</code> em <code>video.mp4</code>, executaremos:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">mencoder video.avi <span style="color: #660033;">-o</span> video.mp4 <span style="color: #660033;">-oac</span> copy <span style="color: #660033;">-ovc</span> lavc <span style="color: #660033;">-lavcopts</span> <span style="color: #007800;">vcodec</span>=mpeg1video <span style="color: #660033;">-of</span> mpeg</pre></div></div>

<p>E este é um Shell Script para facilitar a tarefa:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Converte arquivos AVI em MP4</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Sintaxe: avi2mp4.sh arquivo.avi</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># Ao fim da execução, será gerado o arquivo arquivo.mp4</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #007800;">$#</span> <span style="color: #660033;">-ne</span> <span style="color: #000000;">1</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
<span style="color: #000000; font-weight: bold;">then</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Erro de sintaxe.&quot;</span>
	<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Uso: avi2mp4.sh &lt;video.avi&gt;&quot;</span>
<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
<span style="color: #007800;">FILE</span>=<span style="color: #007800;">$1</span>
<span style="color: #007800;">BASENAME</span>=<span style="color: #800000;">${FILE%.*}</span>
&nbsp;
mencoder <span style="color: #ff0000;">&quot;<span style="color: #007800;">${FILE}</span>&quot;</span> <span style="color: #660033;">-o</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">${BASENAME}</span>&quot;</span>.mp4 <span style="color: #660033;">-oac</span> copy <span style="color: #660033;">-ovc</span> lavc <span style="color: #660033;">-lavcopts</span> <span style="color: #007800;">vcodec</span>=mpeg1video <span style="color: #660033;">-of</span> mpeg</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/conversao-de-video-avi-em-mp4-via-linha-de-comando/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CHMOD: Permissões em Sistemas Linux e Unix-Like</title>
		<link>http://www.rberaldo.com.br/blog/chmod-permissoes-em-sistemas-linux-e-unix-like/</link>
		<comments>http://www.rberaldo.com.br/blog/chmod-permissoes-em-sistemas-linux-e-unix-like/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 15:24:47 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[permissão]]></category>
		<category><![CDATA[permissões]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=376</guid>
		<description><![CDATA[Artigo sobre o sistema de permissão (chmod) do Linux e sistemas Unix-Like]]></description>
			<content:encoded><![CDATA[<p>Sistemas Operacionais <em>Unix-Like</em>, como o Linux, permitem restringir acesso a arquivos por meio do sistema de permissões. Como tudo em Linux é tratado como arquivo, as permissões são válidas para arquivos, diretórios, dispositivos de entrada/saída etc.</p>
<p>Não somente usuários Linux devem conhecer o sistema de permissões. Desenvolvedores que programam sistemas que rodarão em plataforma Linux devem conhecer o sistema de permissões também. É muito comum vermos programadores PHP falando &#8220;dê chmod  777, que resolve o problema de permissão&#8221;. Isso não é solução, é apenas o começo de um possível problema &#8211; e grave &#8211; futuro.</p>
<p><span id="more-376"></span></p>
<h3>Sumário</h3>
<p><a href="#ugo">Dono, Grupo e Outros</a><br />
<a href="#bits">Divisão dos bits da permissão</a><br />
<a href="#rwx">Leitura, Escrita e Execução</a><br />
<a href="#chmod777">Os riscos da permissão 777</a></p>
<p><a name="ugo"><br />
<h3>Dono, Grupo e Outros</h3>
<p></a></p>
<p>As permissões estão divididas em três níveis: permissões para o <strong>dono</strong> do arquivo, permissões para o <strong>grupo</strong> ao qual pertence o dono do arquivo e permissões para os <strong>outros</strong> usuários.</p>
<p>É por isso que sempre são mostrados três números, como <strong>755</strong>, <strong>644</strong> ou três grupos de letras, como <strong>rwxr-xr-x</strong> ou <strong>rw-r&#8211;r&#8211;</strong>. Cada grupo corresponde a um nível de permissão.</p>
<p>O primeiro conjunto corresponde às permissões do dono do arquivo. O segundo, do grupo ao qual pertence o dono do arquivo. E o terceiro, ao outros usuários.</p>
<p><a name="bits"><br />
<h3>Divisão dos bits da permissão</h3>
<p></a></p>
<p>Cada conjunto citado acima corresponde a três bits. Com três bits, é possível formar oito combinações:</p>
<p>000 = 0<br />
001 = 1<br />
010 = 2<br />
011 = 3<br />
100 = 4<br />
101 = 5<br />
110 = 6<br />
111 = 7</p>
<p>O primeiro bits corresponde a permissão de leitura (<em>read</em>). O segundo corresponde à permissão de escrita (<em>write</em>). O terceiro, à de execução (<em>execution</em>). Sendo assim, podemos reescrever as combinações acima da seguinte forma:</p>
<pre>
000 = --- = 0 = nenhuma permissão
001 = --x = 1 = somente permissão de execução
010 = -w- = 2 = somente permissão de escrita
011 = -wx = 3 = somente permissões de escrita e execução
100 = r-- = 4 = somente permissão de leitura
101 = r-x = 5 = somente permissões de leitura e execução
110 = rw- = 6 = somente permissões de leitura e escrita
111 = rwx = 7 = permissões de leitura, escrita e execução (acesso total)
</pre>
<p><a name="rwx"><br />
<h3>Leitura, Escrita e Execução</h3>
<p></a></p>
<p>Vamos esclarecer o que significa ter permissão de leitura, escrita e execução em arquivos e diretórios.</p>
<h4>Arquivos</h4>
<p>Permissão de escrita em arquivo significa poder modificar o conteúdo do arquivo.<br />
Permissão de leitura de arquivo significa poder acessar (ler) o conteúdo do arquivo.<br />
Permissão de execução de arquivo significa poder executar o arquivo no terminal de comandos (shell).</p>
<h4>Diretórios</h4>
<p>Permissão de escrita em diretórios significa poder criar arquivos no diretório. Além disso, permissão de escrita possibilita a remoção de arquivos existentes, assim como a modificação das permissões dos arquivos desse diretório.<br />
Permissão de leitura de diretórios significa poder acessar (ler) o conteúdo do diretório, ou seja, fazer a listagem do conteúdo do diretório.<br />
Permissão de execução em diretórios significa poder entrar no diretório, seja por meio do comando <code>cd</code> ou acessando via URL no navegador.</p>
<p><a name="chmod777"><br />
<h3>Os riscos da permissão 777</h3>
<p></a></p>
<p>Permissão 777 significa acesso total. Se um diretório tem permissão 777, qualquer uduário pode mexer naquele diretório, inserindo ou removendo arquivos, além de poder mudar as permissões deles. Qualquer usuário pode inserir um script ou programa executável malicioso, dar permissão de execução e executá-lo quando quiser. Imagine isso ocorrendo em um servidor de hospedagem! É um risco enorme! É por isso que sempre insisto: nunca use permissão 777.</p>
<p>É muito comum vermos &#8220;programadores&#8221; PHP postando dúvidas em fóruns falando que estão recebendo mensagem de erro de permissão. Aí alguém responde &#8220;dá chmod 777&#8243;. <strong>Nunca façam isso</strong>!</p>
<p>O correto é verificar o dono do arquivo e definir as permissões adequadas. Normalmente usa-se 755 para diretórios e 644 para arquivos não executáveis, como é o caso do PHP rodando em servidores WEB.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/chmod-permissoes-em-sistemas-linux-e-unix-like/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Debian Squeeze oficialmente lançado!</title>
		<link>http://www.rberaldo.com.br/blog/debian-squeeze-oficialmente-lancado/</link>
		<comments>http://www.rberaldo.com.br/blog/debian-squeeze-oficialmente-lancado/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 01:38:38 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[lançamento]]></category>
		<category><![CDATA[squeeze]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=373</guid>
		<description><![CDATA[Hoje o Debian 6.0, também conhecido como Squeeze foi oficialmente lançado]]></description>
			<content:encoded><![CDATA[<p>Hoje o Debian 6.0, também conhecido como Squeeze foi oficialmente lançado!</p>
<p>Mais detalhes no link abaixo:</p>
<p><a href="http://www.debian.org/News/2011/20110205a" target="_blank" onclick="urchinTracker('/outgoing/www.debian.org/News/2011/20110205a?referer=');">http://www.debian.org/News/2011/20110205a</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/debian-squeeze-oficialmente-lancado/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>O comando SED do Linux</title>
		<link>http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/</link>
		<comments>http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 23:09:22 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[AWK]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[filtragem]]></category>
		<category><![CDATA[filtro]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[stream]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=241</guid>
		<description><![CDATA[A ferramenta SED, junto ao AWK, são as duas principais linguagens para manipulação de arquivos e streams do Linux.]]></description>
			<content:encoded><![CDATA[<p>A ferramenta SED, junto ao AWK, são as duas principais linguagens para manipulação de arquivos e <em>streams</em> do Unix/Linux. Ambas possuem vasta abrangência e o que uma não pode fazer, a outra provavelmente o fará.</p>
<p>Com o SED é possível substituir e &#8220;casar&#8221; padrões, sempre por meio de Expressões Regulares, outra grande ferramenta do mundo da Computação.</p>
<p><span id="more-241"></span></p>
<p>O SED, assim como o AWK, lê um arquivo, linha por linha, e aplica a expressão do parâmetro a cada uma delas.</p>
<p>A sintaxe do SED é a seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'expressão'</span> arquivo</pre></div></div>

<p>É possível filtrar a saída de outro comando, em vez de filtrar um arquivo, usando pipe. Usarei saídas do comando echo para explicar o sed.</p>
<p>SED usa Expressões Regulares (ER&#8217;s). Se você não conhece ER&#8217;s, sugiro ler o <a href="http://guia-er.sourceforge.net" target="_blank" onclick="urchinTracker('/outgoing/guia-er.sourceforge.net?referer=');">Expressões Regulares &#8211; Guia de Consulta Rápida</a></p>
<p><a href="#comm_s">1. Substituindo textos: comando s</a><br />
<a href="#delim">1.1. Escapando o delimitador</a><br />
<a href="#retro">1.2. Usando a expressão casada em ER na substituição</a><br />
<a href="#retro2">1.3 Usando &#8220;retrovisores&#8221; (\1, \2&#8230;)</a><br />
<a href="#mods">2. Modificadores</a><br />
<a href="#mod_g">2.1. Modificador &#8220;g&#8221;: tratar linha inteira</a><br />
<a href="#mod_p">2.2. Modificador &#8220;p&#8221;: exibir na tela</a><br />
<a href="#limit_linha">3. Restringindo por linhas</a><br />
<a href="#limit_pattern">4. Restringindo por padrões</a><br />
<a href="#comm_d">5. Remover linha: comando d</a><br />
<a href="#comm_q">6. Sair: comando q</a><br />
<a href="#comm_a">7. Adicionando linha: comando &#8220;a&#8221;</a><br />
<a href="#comm_i">8. Adicionando linha: comando &#8220;i&#8221;</a><br />
<a href="#comm_c">9. Mudando uma linha: comando c</a><br />
<a href="#links">10. Links</a></p>
<h2><a name="comm_s">1. Substituindo textos: comando s</a></h2>
<p>Sintaxe: <strong>s/ER/sub/[modificadores]</strong>: Substitui os padrões &#8220;casados&#8221; em &#8220;ER&#8221; por &#8220;sub&#8221;.</p>
<p>A utilidade mais conhecida do SED é a substituição de textos. Para isso, usamos o comando &#8220;s&#8221; do sed:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tutorial sobre sed: aprenda a trabalhar com sed&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/sed/awk/'</span></pre></div></div>

<p>A saída será: <strong>Tutorial sobre awk: aprenda a trabalhar com sed</strong>. Note que a última ocorrência de &#8220;sed&#8221; não foi modificada. Isso porque o sed faz a modificação na primeira ocorrência e, em seguida, já procura pelo padrão na linha seguinte, se houver. Para que o sed execute a ação na linha toda, usamos o modificador &#8220;g&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tutorial sobre sed: aprenda a trabalhar com sed&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/sed/awk/g'</span></pre></div></div>

<p>Agora a saída é a esperada: <strong>Tutorial sobre awk: aprenda a trabalhar com awk</strong>.</p>
<p>Os modificadores serão abordados com mais detalhes logo mais abaixo. Não percam! =P</p>
<h3><a name="delim">1.1. Escapando o delimitador</a></h3>
<p>Como estamos usando a barra (/) como delimitador, se quisermos usar esse caractere na ER ou na substituição, temos de escapá-lo, com barra invertida:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;o arquivo /proc/cpuinfo possui informações importantes&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\/proc\/cpuinfo/\/etc\/passwd/'</span></pre></div></div>

<p>Saída: <strong>o arquivo /etc/passwd possui informações importantes</strong></p>
<h3><a name="retro">1.2. Usando a expressão casada em ER na substituição</a></h3>
<p>Às vezes queremos acrescentar algo ao texto original. Por isso, é preciso que tenhamos o texto casado na ER. Para isso, usamos o caractere &amp; para nos referirmos à expressão casada pela ER.</p>
<p>Suponhamos que queremos colocar todos os caminhos de arquivos entre aspas. Para isso:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;o arquivo /proc/cpuinfo possui informações importantes <span style="color: #000099; font-weight: bold;">\n</span>Este tutorial está em /home/beraldo/tutoriais. Há muitos outros nesse diretório&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/(\/[^ .,]*)+/&quot;&amp;amp;&quot;/'</span></pre></div></div>

<p>Saída:<br />
o arquivo &#8220;/proc/cpuinfo&#8221; possui informações importantes<br />
Este tutorial está em &#8220;/home/beraldo/tutoriais&#8221;. Há muitos outros nesse diretório</p>
<p>A opção &#8220;-r&#8221; usa o padrão estendido de expressões regulares &#8211; o mesmo usado por &#8220;egrep&#8221;. Isso possibilita o uso da lista negada.</p>
<h3><a name="retro2">1.3 Usando &#8220;retrovisores&#8221; (\1, \2&#8230;)</a></h3>
<p>Muitas vezes queremos substituir partes de um texto, mas manter outras. Para isso, podemos usar os &#8220;retrovisores&#8221;, que inserem na string final os padrões casados na ER inseridos em grupos (<strong>(</strong> e <strong>)</strong>). O primeiro grupo casado é referenciado por \1, o segundo, por \2 e assim sucessivamente, até \9.</p>
<p>Por exemplo, vamos manter apenas a primeira palavra de cada linha do texto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;primeira linha<span style="color: #000099; font-weight: bold;">\n</span>segunda linha<span style="color: #000099; font-weight: bold;">\n</span>terceira linha&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/^([a-z]+).*/\1/g'</span></pre></div></div>

<p><strong>Importante:</strong> Para usar os retrovisores, é necessário usar a opção -r do sed, que ativa o padrão estendido de ERs.</p>
<h2><a name="mods">2. Modificadores</a></h2>
<h3><a name="mod_g">2.1. Modificador &#8220;g&#8221;: tratar linha inteira</a></h3>
<p>Já vimos o modificador g anteriormente, que serve para forçar o SED a aplicar a expressão na linha inteira.</p>
<p>É possível associar um número ao modificador &#8220;g&#8221;, para fazer com que o SED atue apenas a partir de uma determinada ocorrência do padrão.<br />
Por exemplo, vamos substituir por NULL todas as palavraas do texto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;palavra1 palavra2 palavra3&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/([a-zA-Z0-9]+)/NULL/g'</span></pre></div></div>

<p>Vamos supor que gostaríamos de remover todas as ocorrências, exceto a primeira. Para isso executaríamos o sed assim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;palavra1 palavra2 palavra3&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/([a-zA-Z0-9]+)/NULL/2g'</span></pre></div></div>

<p>O &#8220;2&#8243; faz com que a substituição ocorra apenas a partir da segunda ocorrência do padrão.</p>
<h3><a name="mod_p">2.2. Modificador &#8220;p&#8221;: exibir na tela</a></h3>
<p>Por padrão, o SED imprime na saída padrão todas as linhas lidas &#8211; e modificadas. A opção -n impede que o sed faça a impressão das linhas. É nessa situação que o modificador &#8220;p&#8221; é útil. Quando quisermos imprimir somente as linhas alteradas pelo SED, usaremos o modificador &#8220;p&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;linha sem números <span style="color: #000099; font-weight: bold;">\n</span>Linha com números: 1 2 3 4 5 6 <span style="color: #000099; font-weight: bold;">\n</span>Linha com mais números 42 81&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'s/[0-9]+/X/gp'</span></pre></div></div>

<p>Serão mostradas apenas as linhas que casaram com o padrão.</p>
<p>Como foi possível ver no exemplo acima, é possível misturar os modificadores.</p>
<h2><a name="limit_linha">3. Restringindo por linhas</a></h2>
<p>E possível fazer o SED atuar somente num intervalo de linhas.</p>
<p>Vamos mostrar os dez primeiros usuários do sistema, listando as dez primeiras linhas do arquivo /etc/passwd.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'1,10 s/([^:]+).*/\1/p'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<p>Note a opção -n e o modificador &#8220;p&#8221;, para mostrar somente o padrão casado.</p>
<p>É possível usar o caractere $ (cifrão) para se referir à última linha do arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'1,$ s/([^:]+).*/\1/p'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<h2><a name="limit_pattern">4. Restringindo por padrões</a></h2>
<p>Além de restringir por número de linhas, podemos restringer por padrão:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;esta<span style="color: #000099; font-weight: bold;">\n</span>é<span style="color: #000099; font-weight: bold;">\n</span>uma<span style="color: #000099; font-weight: bold;">\n</span>linha<span style="color: #000099; font-weight: bold;">\n</span>usada<span style="color: #000099; font-weight: bold;">\n</span>para<span style="color: #000099; font-weight: bold;">\n</span>testar<span style="color: #000099; font-weight: bold;">\n</span>o<span style="color: #000099; font-weight: bold;">\n</span>comando<span style="color: #000099; font-weight: bold;">\n</span>sed&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span>  <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/uma/,/comando/s/[ae]/X/g'</span></pre></div></div>

<h2><a name="comm_d">5. Remover linha: comando d</a></h2>
<p>O comando &#8220;d&#8221; do sed remove linhas.<br />
Vamos remover as dez primeiraas linhas de /etc/passwd:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1,10 d'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<h2><a name="comm_q">6. Sair: comando q</a></h2>
<p>O comando &#8220;q&#8221; faz o sed parar após encontrar o padrão</p>
<p>Imprime as dez primeiras linhas de /etc/passwd</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'10 q'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<p>Para após encontrar um número:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ q'</span></pre></div></div>

<h2><a name="comm_a">7. Adicionando linha: comando &#8220;a&#8221;</a></h2>
<p>É possível inserir linha após achar um padrão:</p>
<p>Insere linha após uma linha que contenha número</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ a Oi. Sou novo aqui'</span></pre></div></div>

<h2><a name="comm_i">8. Adicionando linha: comando &#8220;i&#8221;</a></h2>
<p>Quase igual ao comando &#8220;a&#8221;, mas insere a nova linha antes da linha casada com o padrão</p>
<p>Insere linha antes de uma linha que contenha número</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ i Oi. Sou novo aqui'</span></pre></div></div>

<h2><a name="comm_c">9. Mudando uma linha: comando c</a></h2>
<p>Semelhante a &#8220;a&#8221; e &#8220;i&#8221;, mas muda a linha que casou com o padrão</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ c Fui modificado'</span></pre></div></div>

<h2><a name="links">10. Links</a></h2>
<p><a href="http://www.grymoire.com/Unix/Sed.html" onclick="urchinTracker('/outgoing/www.grymoire.com/Unix/Sed.html?referer=');">http://www.grymoire.com/Unix/Sed.html</a><br />
<a href="http://www.zago.eti.br/script/sed.html" onclick="urchinTracker('/outgoing/www.zago.eti.br/script/sed.html?referer=');">http://www.zago.eti.br/script/sed.html</a><br />
<a href="http://www.linuxmanpages.com/man1/sed.1.php" onclick="urchinTracker('/outgoing/www.linuxmanpages.com/man1/sed.1.php?referer=');">http://www.linuxmanpages.com/man1/sed.1.php</a><br />
<a href="http://guia-er.sourceforge.net/" onclick="urchinTracker('/outgoing/guia-er.sourceforge.net/?referer=');">http://guia-er.sourceforge.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Torne seu Windows mais rápido que Linux</title>
		<link>http://www.rberaldo.com.br/blog/torne-seu-windows-mais-rapido-que-linux/</link>
		<comments>http://www.rberaldo.com.br/blog/torne-seu-windows-mais-rapido-que-linux/#comments</comments>
		<pubDate>Sat, 17 Jul 2010 22:59:45 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[desempenho]]></category>
		<category><![CDATA[lentidao]]></category>
		<category><![CDATA[lento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[rapido]]></category>
		<category><![CDATA[velocidade]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=189</guid>
		<description><![CDATA[Torne seu Windows mais rápido que Linux]]></description>
			<content:encoded><![CDATA[<p>Para quem insiste em usar um sistema operacional lento e cheio de problemas, aqui vai um link que mostra como tornar seu Windows mais rápido que um Linux:</p>
<p><a title="http://www.junauza.com/2010/07/how-to-make-windows-faster-than-linux.html" href="http://www.junauza.com/2010/07/how-to-make-windows-faster-than-linux.html" target="_blank" onclick="urchinTracker('/outgoing/www.junauza.com/2010/07/how-to-make-windows-faster-than-linux.html?referer=');">http://www.junauza.com/2010/07/how-to-make-windows-faster-than-linux.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/torne-seu-windows-mais-rapido-que-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando o SSH</title>
		<link>http://www.rberaldo.com.br/blog/usando-o-ssh/</link>
		<comments>http://www.rberaldo.com.br/blog/usando-o-ssh/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 13:49:59 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[remoto]]></category>
		<category><![CDATA[scp]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=166</guid>
		<description><![CDATA[O SSH é uma ferramenta muito útil na administração remota de sistemas baseados em Unix/Linux. Por meio dela, é possível fazer login em sessões remotas de shell, possibilitando gerir servidores à distância.]]></description>
			<content:encoded><![CDATA[<p>O SSH (<em>Secure Shell</em>) é uma ferramenta muito útil na administração remota de sistemas baseados em Unix/Linux. Por meio dela, é possível fazer login em sessões remotas de shell, possibilitando gerir servidores à distância.</p>
<p>Demonstrarei aqui como usar o SSH por meio de linha de comando em Linux, porém há ferramentas para Windows com a mesma finalidade, como o <a title="PuTTY" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank" onclick="urchinTracker('/outgoing/www.chiark.greenend.org.uk/_sgtatham/putty/download.html?referer=');">PuTTY</a>. Porém, não os abordarei.</p>
<p><span id="more-166"></span></p>
<p>Uma das principais vantagens do SSH sobre outras formas de acesso remoto é a ênfase em segurança.</p>
<p>É possível abrir uma sessão remota via SSH usando apenas a senha do shell de destino. Porém, uma forma mais segura de se fazer esse acesso é usando um par de chaves público/privado, o que aprimora a segurança da conexão. O funcionamento do par de chaves é semelhante ao que ocorre na vida real, com as assinaturas manuscritas: para que sua assinatura seja legalmente reconhecida, um cartório deve autenticá-la. No caso de assinaturas digitais, essa autenticação é feita por meio de uma <em>passphrase</em>. Ao gerar um par de chaves com o comando <code>ssh-keygen</code>, geram-se dois arquivos no diretório <code>.ssh</code>, dentro de sua home: id_dsa (ou id_rsa) e id_dsa.pub (ou id_dsa.pub). O arquivo finalizado por <code>.pub</em> representa sua chave pública, enquanto o outro contém sua chave privada. Sua chave privada deve ser visível apenas por você, logo, mantenha-a com permissão 600 (permissão padrão desse arquivo). Esse arquivo deve ser sigiloso, pois somente você deve ter acesso à sua chave privada. Já a chave pública pode, e deve, ser visível a qualquer máquina à qual você deseja ter acesso. O conteúdo o arquivo .pub deve estar no arquivo <em>authorized_keys</em>, dentro de <em>$HOME/.ssh</em>, no servidor que deseja acessar. </p>
<p>Quanto a DSA ou RSA, são apenas tipos diferentes de algorítmos para criptografia de chaves. No quesito segurança, as diferenças são ínfimas. Há distinção em termos de performance. Para <em>passphrases</em> extensas, DSA é mais eficiente que RSA. Mais detalhes podem ser encontrados com <a href="http://www.google.com.br/search?source=ig&#038;hl=pt-BR&#038;rlz=1G1GGLQ_PT-BRBR289&#038;=&#038;q=dsa+rsa&#038;btnG=Pesquisa+Google&#038;aq=f&#038;oq=" onclick="urchinTracker('/outgoing/www.google.com.br/search?source=ig_038_hl=pt-BR_038_rlz=1G1GGLQ_PT-BRBR289_038_=_038_q=dsa+rsa_038_btnG=Pesquisa+Google_038_aq=f_038_oq=&amp;referer=');">uma simples pergunta ao Todo Poderoso Google</a>. Usarei DSA neste tutorial.</p>
<p>A passphrase não é utilizada para acessar o servidor remoto, como ocorre com a senha. A passphrase é uma senha utlizada para decodificar sua chave privada. Logo, pode haver uma passphrase diferente para cada chave que você possua, em máquinas diferentes que acessam o mesmo servidor remoto.</p>
<p>Para gerar um par de chaves, usamos o comando <code>ssh-keygen</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ssh-keygen</span> <span style="color: #660033;">-t</span> dsa</pre></div></div>

<p>Serão solicitados o local onde as chaves devem ser geradas e o passphrase correspondente. Se você mantiver o caminho em branco, a chave será gerada no local padrão.</p>
<p>Após gerar o par de chaves, é necessário informar sua chave pública para o servidor remoto ao qual deseja ter acesso. Isso pode ser feito de duas formas: </p>
<p>1. Utilizando o comando <code>ssh-copy-id</code>, que copia a chave pública para o servidor remoto automaticamente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ ssh-copy-id <span style="color: #660033;">-i</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>id_dsa.pub <span style="color: #c20cb9; font-weight: bold;">login</span><span style="color: #000000; font-weight: bold;">@</span>servidor</pre></div></div>

<p>2. Modificando o arquivo <code>~/.ssh/authorized_keys</code>, do servidor remoto, adicionando, em uma nova linha, o conteúdo de seu arquivo id_dsa.pub. Isso é o que o comando anterior faz automaticamente.</p>
<p>Após isso, em vez de o servidor solicitar sua senha para autenticação, será solicitada sua passphrase para a respectiva chave.</p>
<p>Para acessar um shell remoto, apenas execute o comando a seguir, trocando "login" e "servidor" pelo login e o domínio, ou IP, do servidor remoto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #c20cb9; font-weight: bold;">login</span><span style="color: #000000; font-weight: bold;">@</span>servidor</pre></div></div>

<p>O SSH usa a porta 22 para todo seu tráfego. Logo, o servidor remoto deve possuir essa porta aberta.</p>
<p>Após digitar sua passphrase, você estará em seu shell remoto.</p>
<p>Outra facilidade do SSH é a transferência segura de arquivos. Para isso, podemos usar o comando scp ou o próprio sftp, que é um FTP completo, porém, usando protocolo seguro.</p>
<p>Para tranferir arquivos com scp, procede-se da mesma forma como procedemos com o comando cp, localmente:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">scp</span> origem destino</pre></div></div>

<p>Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">scp</span> meu_arquivo_local beraldo<span style="color: #000000; font-weight: bold;">@</span>rberaldo.com.br:~</pre></div></div>

<p>Isso copia o arquivo meu_arquivo_local para a minha home no servidor rberaldo.com.br</p>
<p>Outro exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">scp</span> beraldo<span style="color: #000000; font-weight: bold;">@</span>rberaldo.com.br:~<span style="color: #000000; font-weight: bold;">/</span>arquivo_remoto .</pre></div></div>

<p>Isso copia o arquivo arquivo_remoto, do servidor, para o diretório local corrente.</p>
<p>Para iniciar o sftp:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ sftp <span style="color: #c20cb9; font-weight: bold;">login</span><span style="color: #000000; font-weight: bold;">@</span>servidor</pre></div></div>

<p>Isso inicia um FTP, com protocolo de segurança.</p>
<p>Mais informações podem ser vistas nos links abaixo:<br />
<a href="http://en.wikipedia.org/wiki/Secure_Shell" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Secure_Shell?referer=');">Artigo na Wikipédia sobre SSH (em inglês)</a><br />
<a href="http://www.guiadohardware.net/tutoriais/dominando-ssh" onclick="urchinTracker('/outgoing/www.guiadohardware.net/tutoriais/dominando-ssh?referer=');">Artigo no Guia do Hardware sobre SSH</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/usando-o-ssh/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TuxDroid chega ao Brasil, pela LinuxMall</title>
		<link>http://www.rberaldo.com.br/blog/tuxdroid-chega-ao-brasil-pela-linuxmall/</link>
		<comments>http://www.rberaldo.com.br/blog/tuxdroid-chega-ao-brasil-pela-linuxmall/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 12:58:23 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Entretenimento]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[nerd]]></category>
		<category><![CDATA[robô]]></category>
		<category><![CDATA[tux]]></category>
		<category><![CDATA[tuxdroid]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=147</guid>
		<description><![CDATA[A loja virtual LinuxMall importou para o Brasil o TuxDroid, robô para geeks.]]></description>
			<content:encoded><![CDATA[<p>A loja virtual <a href="http://www.linuxmall.com.br" target="_blank" onclick="urchinTracker('/outgoing/www.linuxmall.com.br?referer=');">LinuxMall</a> importou para o Brasil o TuxDroid. A empresa é a vendedora oficial do produto em nosso país.</p>
<p>O robô possui diversos idiomas, inclusive português. Ele lê notícias de RSS, avisa quando chega e-mail, mensagem via MSN, Skype etc. Possui ligação totalmente sem fio e pode ser controlado pelo computador. E o melhor: funciona perfeitamente em Linux!! (claro, dããã).</p>
<p><span id="more-147"></span></p>
<p>Veja alguns vídeos do TuxDroid.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/cbzyBEeShEk&#038;hl=pt_BR&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/cbzyBEeShEk&#038;hl=pt_BR&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/023K0SbHeGc&#038;hl=pt_BR&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/023K0SbHeGc&#038;hl=pt_BR&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>O TuxDroid também ensina você a fazer exercícios:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/2EKTFJFRsDA&#038;hl=pt_BR&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/2EKTFJFRsDA&#038;hl=pt_BR&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Site sobre o TuxDroid: <a href="http://tuxisalive.com" target="_blank" onclick="urchinTracker('/outgoing/tuxisalive.com?referer=');">http://tuxisalive.com</a></p>
<p><a href="http://www.linuxmall.com.br/produto/tux-droid.html?utm_source=oferta_XML_home&amp;utm_medium=produto&amp;utm_content=sku_tux_droid&amp;utm_campaign=site" target="_blank" onclick="urchinTracker('/outgoing/www.linuxmall.com.br/produto/tux-droid.html?utm_source=oferta_XML_home_amp_utm_medium=produto_amp_utm_content=sku_tux_droid_amp_utm_campaign=site&amp;referer=');">Link para o produto na LinuxMall</a> </p>
<p>Se alguém quiser me dar um TuxDroid de presente, aceito de bom coração. =)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/tuxdroid-chega-ao-brasil-pela-linuxmall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 9.10 oficialmente lançado!</title>
		<link>http://www.rberaldo.com.br/blog/ubuntu-9-10-oficialmente-lancado/</link>
		<comments>http://www.rberaldo.com.br/blog/ubuntu-9-10-oficialmente-lancado/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 23:25:02 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=116</guid>
		<description><![CDATA[Hoje foi lançado, oficialmente, o Ubuntu 9.10! Uma das principais novidades, em termos de aplicativos, é o Empathy, um mensageiro que intergra Yahoo, Gmail, MSN, Jabber, AOL, QQ e outros. O Ubuntu 9.10 também vem com o Firefox 3.5, que, até a versão 9.04, não se encontrava, oficialmente, nos repositórios da Canonical. ]]></description>
			<content:encoded><![CDATA[<p>Hoje foi lançado, oficialmente, o Ubuntu 9.10! </p>
<p>Uma das principais novidades, em termos de aplicativos, é o Empathy, um mensageiro que intergra Yahoo, Gmail, MSN, Jabber, AOL, QQ e outros. O Ubuntu 9.10 também vem com o Firefox 3.5, que, até a versão 9.04, não se encontrava, oficialmente, nos repositórios da Canonical. </p>
<p><span id="more-116"></span><br />
Mais informações sobre o Ubunto 9.10:<br />
<a href="http://www.ubuntu.com/products/whatisubuntu/910features" target="_blank" title="Tour pelo Ubuntu" onclick="urchinTracker('/outgoing/www.ubuntu.com/products/whatisubuntu/910features?referer=');">Tour pelo Ubuntu</a><br />
<a href="http://www.ubuntu.com/news/ubuntu-910" target="_blank" title="" onclick="urchinTracker('/outgoing/www.ubuntu.com/news/ubuntu-910?referer=');">Novidades do Ubuntu 9.10</a></p>
<p>Faça o Download do Ubuntu 9.10 aqui:<br />
<a href="http://www.ubuntu.com/getubuntu" target="_blank" title="Download do Ubuntu 9.10" onclick="urchinTracker('/outgoing/www.ubuntu.com/getubuntu?referer=');">http://www.ubuntu.com/getubuntu</a></p>
<p>Divirtam-se! :D</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/ubuntu-9-10-oficialmente-lancado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comandos do Editor Vim</title>
		<link>http://www.rberaldo.com.br/blog/comandos-do-editor-vi/</link>
		<comments>http://www.rberaldo.com.br/blog/comandos-do-editor-vi/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 15:25:56 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[editor vi]]></category>
		<category><![CDATA[editor vim]]></category>
		<category><![CDATA[Programação Shell]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[vi]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=84</guid>
		<description><![CDATA[O Vi é um editor de textos do Unix. Ele vem por padrão em todas as distribuições Linux, portanto é bom conhecer alguns de seus comandos básicos. A vantagem desse editor sobre outros, como GEdit ou KEdit, é que o Vi roda em terminal, sem interface gráfica, o que permite utilizá-lo num ambiente de linha de comando, como numa conexão por SSH.]]></description>
			<content:encoded><![CDATA[<p>O <a title="Vi" href="http://pt.wikipedia.org/wiki/Vi" target="_blank" title="Vi" onclick="urchinTracker('/outgoing/pt.wikipedia.org/wiki/Vi?referer=');">Vi</a> é um editor de textos do Unix. Ele vem por padrão em todas as distribuições Linux, portanto é bom conhecer alguns de seus comandos básicos. A vantagem desse editor sobre outros, como GEdit ou KEdit, é que o Vi roda em terminal, sem interface gráfica, o que permite utilizá-lo num ambiente de linha de comando, como numa conexão por <a href="http://pt.wikipedia.org/wiki/Ssh" target="_blank" title="ssh" onclick="urchinTracker('/outgoing/pt.wikipedia.org/wiki/Ssh?referer=');">SSH</a>.</p>
<p><span id="more-84"></span></p>
<p><a href="#modos">1. Modos de trabalho do Vi</a><br />
<a href="#salvando">2. Salvando arquivos e saindo do editor</a><br />
<a href="#move">3. Movimentando o cursor</a><br />
<a href="#nav">4. Navegação no texto</a><br />
<a href="#move2">5. Movimentando textos</a><br />
<a href="#apagar">6. Apagando texto</a><br />
<a href="#copy">7. Copiando e colando textos</a><br />
<a href="#undo">8. Desfazendo ações</a><br />
<a href="#find">9. Localizando textos</a><br />
<a href="#replace">10. Localizando e substituindo textos</a><br />
<a href="#exec">11. Executando comandos no Shell sem sair do Vi</a><br />
<a href="#insert">12. Inserindo no texto a saída de um comando Shell</a><br />
<a href="#program">13. Facilidades para programadores e desenvolvedores</a><br />
<a href="#conf">14. Configuração do ambiente (comando <code>set</code></a></p>
<h3><a name="modos">1. Modos de trabalho do Vi</a></h3>
<p>O Vi possui dois modos de trabalho: modo de inserção e modo de comando. Ao ser iniciado, o programa estará <strong>sempre</strong> em modo de comando. Para alternar do modo de comando para o modo de inserção, há duas maneiras:</p>
<p>a -&gt; Ao pressionar a tecla &#8220;a&#8221;, o modo de inserção é ativado e o cursor de texto é posicionado logo após o caractere corrente;<br />
i -&gt; Ao pressionar a tecla &#8220;i&#8221;, o modo de inserção é ativado e o cursor de texto é posicionado à esquerda do caractere corrente.</p>
<p>Para alternar do modo de inserção para o modo de comando, basta pressionar a tecla &#8220;ESC&#8221;.</p>
<h3><a name="salvando">2. Salvando arquivos e saindo do editor</a></h3>
<p>Entrar no Vi é fácil. Sair, à primeira vista, é um dilema, podendo causar claustrofobia digital. :P<br />
Os seguintes comandos devem ser executados em modo de comando, claro.</p>
<p>:w -&gt; salva o  arquivo corrente. É possível passar um argumento, para definir o nome do arquivo. Por exemplo: <code>:w arq1.txt</code><br />
ZZ -&gt; salva o documento e sai do Vi. É conhecido como o comando &#8220;Zalva e Zai&#8221;. :)<br />
:wq -&gt; Salva o arquivo e sai do Vi<br />
:w! -&gt; O arquivo será salvo mesmo se aberto no modo somente leitura (<em>readonly</em>)<br />
:q -&gt; Sai do Vi. Se o arquivo não foi salvo, o programa emitirá um alerta.<br />
:q! -&gt; Força a saída, mesmo que o arquivo tenha sido modificado e não tenha sido salvo anteriormente</p>
<p>Os comandos &#8220;:wq&#8221; e &#8220;ZZ&#8221; fazem praticamente a mesma coisa. Porém, &#8220;ZZ&#8221; é mais rápido de se digitar e mais fácil de lembrar (Zalva e Zai!). ;)</p>
<h3><a name="move">3. Movimentando o cursor</a></h3>
<p>Isso parece fácil. Basta usar as setas. Mas e se você estiver num teclado sem as teclas das setas? Pode parecer jurássico, mas pode acontecer. Nesse caso, use os seguintes comandos:</p>
<p>h -&gt; Desloca para a esquerda<br />
j -&gt; Desloca para baixo<br />
k -&gt; Desloca para cima<br />
l -&gt; Desloca para a direita</p>
<p>É possível digitar um número antes desses comandos, informando o número de deslocamentos desejado.</p>
<h3><a name="nav">4. Navegação no texto</a></h3>
<p>[n]$ -&gt; Move o cursor para o fim da linha. Se especificado um número antes do &#8220;$&#8221; (cifrão), move para o final da linha com o número especificado (a linha corrente é 1; a conseguinte é 2 e assim sucessivamente)<br />
^ -&gt; Move o cursor para o início da linha corrente. Se o teclado for ABNT ou similares, com teclas para acentuação, você terá de digitar a tecla duas vezes, para o Vi compreender o comando literalmente, não como um acento para outra letra.<br />
0 (número zero) -&gt; Equivale ao comando &#8220;^&#8221;.<br />
[n]A -&gt; Move o cursor para o fim da linha e entra em modo de inserção. É possível inserir um numero antes do &#8220;A&#8221;, como no comando &#8220;$&#8221;.<br />
[n]G -&gt; Se não for especificado o número &#8220;n&#8221;, o cursor será movido para o fim do arquivo. Caso contrário, desloca o cursor para a linha &#8220;n&#8221;.</p>
<h3><a name="move2">5. Movimentando textos</a></h3>
<p>OBS: <code>^LETRA</code> corresponde à combinação das teclas CTRL e a letra especificada.</p>
<p>^e -&gt; Move o texto para cima, independentemente da posição do cursor.<br />
^y -&gt; Move o texto para baixo, independentemente da posição do cursor.</p>
<h3><a name="apagar">6. Apagando texto</a></h3>
<p>[n]x -&gt; Apaga o caractere sob o cursor. É possível especificar o número de caracteres a serem removidos.<br />
[n]X -&gt; Apaga o caractere à esquerda do cursor. É possível especificar o número de caracteres a serem removidos.<br />
[n]dd -&gt; Apaga a linha corrente. É possível especificar o número de linhas a serem removidas após a linha corrente.<br />
D -&gt; Apaga todos os caracteres da posição corrente até o final da linha.<br />
d$ -&gt; Equivale ao comando &#8220;D&#8221;.<br />
d^-&gt; Apaga todos os caracteres da posição corrente até o início da linha.<br />
dw -&gt; apaga os caracteres da posição corrente até o final da palavra.</p>
<h3><a name="copy">7. Copiando e colando textos</a></h3>
<p>Para copiar uma linha de textos, usamos o comando &#8220;yy&#8221;. É possível usar &#8220;[n]yy&#8221; para definir o número de linhas a serem copiadas.</p>
<p>Para colar o texto copiado, usa-se &#8220;[n]p&#8221; para colar à direita do cursor ou &#8220;[n]P&#8221; para colar à esquerda do cursor. O número &#8220;n&#8221; (opcional) determina o número de vezes que o texto será colado.</p>
<h3><a name="undo">8. Desfazendo ações</a></h3>
<p>Não existe o famoso CTRL+Z no Vi. Mas há como desfazer comandos.</p>
<p>u -&gt; Desfaz o último comando<br />
U -&gt; Desfaz todos os comandos executados na linha corrente</p>
<h3><a name="find">9. Localizando textos</a></h3>
<p>/texto -&gt; Busca pela ocorrência da palavra &#8220;texto&#8221; a partir da posição corrente do cursor até o fim do arquivo.<br />
?texto -&gt; Busca pela ocorrência da palavra &#8220;texto&#8221; a partir da posição corrente do cursor até o início do arquivo.<br />
n -&gt; Repete o último comando de busca (<em>next</em>)</p>
<h3><a name="replace">10. Localizando e substituindo textos</a></h3>
<p>Os comandos abaixo assemelham-se à sintaxe dos comandos de substituição do <a href="http://pt.wikipedia.org/wiki/Sed" target="_blank" title="sed" onclick="urchinTracker('/outgoing/pt.wikipedia.org/wiki/Sed?referer=');"><code>sed</code></a>.</p>
<p>:s/busca/troca -&gt; Encontra a primeira ocorrência de &#8220;busca&#8221; e a modifica para &#8220;troca&#8221;, na linha corrente.<br />
:s/busca/troca/g -&gt; Faz a mesma coisa que o comando acima, porém o executa em toda a linha.</p>
<p>É possível definir o intervalo de linhas onde a busca será feita, da seguinte forma:</p>
<p>:<em>inicio,fim</em>s/busca/troca.</p>
<p>Por exemplo:</p>
<p>:1.42s/busca/troca -&gt; Executa a troca no intervalo das linhas 1 a 42<br />
:..42s/busca/troca -&gt; Executa a troca a partir da linha atual até a linha 42<br />
:..$s/busca/troca -&gt; Executa a troca a partir da linha atual até o fim do arquivo</p>
<p>A busca pode ser feita usando <a href="http://pt.wikipedia.org/wiki/Express%C3%B5es_regulares" target="_blank" title="Expressões Regulares" onclick="urchinTracker('/outgoing/pt.wikipedia.org/wiki/Express_C3_B5es_regulares?referer=');">Expressões Regulares</a>.</p>
<h3><a name="exec">11. Executando comandos no Shell sem sair do Vi</a></h2>
<p>Para executar um comando no shell sems air do Vi, basta proceder da seguinte forma:</p>
<p>:! comando_shell</p>
<p>Por exemplo:</p>
<p>:! ls -l</p>
<h3><a name="insert">12. Inserindo no texto a saída de um comando Shell</a></h3>
<p>O comando anterior executa uma ação no Shell, mas descarta a saída. Se você pretende inserir a saída do comando no texto que está editando no Vi, basta proceder assim:</p>
<p>!! comando_shell</p>
<p>Por exemplo</p>
<p>!! ls -l</p>
<h3><a name="program">13. Facilidades para programadores e desenvolvedores</a></h3>
<h4>Indentação</h4>
<p>Para inserir <a href="http://pt.wikipedia.org/wiki/Endenta%C3%A7%C3%A3o" target="_blank" title="indentação" onclick="urchinTracker('/outgoing/pt.wikipedia.org/wiki/Endenta_C3_A7_C3_A3o?referer=');">indentação</a>, primeiro devemos definir o tamanho da tabulação, usando o comando <code>:set</code> (mais a frente detalharei esse comando).</p>
<p>:set sw=n</p>
<p>Onde &#8220;n&#8221; é o tamanho da tabulação.</p>
<p>Feito isso, poderemos utilizar os seguintes comandos:</p>
<p>[n]&gt;&gt; -&gt; Indenta n linhas (ou apenas a linha corrente se &#8220;n&#8221; for omitido)<br />
[n]&lt;&lt; -&gt; Retira a indentação de n linhas (ou apenas da linha corrente se &#8220;n&#8221; for omitido)</p>
<h4>Correspondência entre parênteses, colchetes e chaves</h4>
<p>Com o cursor sobre um sinal de parênteses, colchete ou chave, execute o comando &#8220;%&#8221;. Se houver um caractere correspondente, o cursor será movido para ele.</p>
<h3><a name="conf">14. Configuração do ambiente (comando <code>set</code></a></h3>
<p>:set &lt;opcão&gt; -&gt; Ativa &lt;opção&gt;<br />
:set no&lt;opção&gt; -&gt; Desativa &lt;opção&gt;<br />
:set &lt;opção&gt;=&lt;valor&gt; -&gt; Define &lt;valor&gt; à &lt;opção&gt;<br />
:set &lt;opção&gt;? -&gt; Exibe o valor de &lt;opção&gt;<br />
:set all -&gt; Exibe todas as opções</p>
<p>Algumas opções do comando set:</p>
<p>ai -&gt; <em>Autoindent</em>. Indentação automática<br />
ic -&gt; <em>Ignore case</em>. Ignora maiúsculas e minúsculas numa busca.<br />
nu -&gt; Numeração de linhas<br />
sw -&gt; <em>shift width</em>. Tamanho da tabulação<br />
sm -&gt; <em>show match</em>. Ao fechar um parêntese, colchete ou chave, o Vi mostra onde ele foi aberto. Caso não haja correspondência, um bip será emitido.</p>
<p>Para não precisar definir todas essas configurações sempre que iniciar o Vi, você pode criar um arquivo de configuração. O Vi busca no arquivo ~/.exrc (arquivo oculto exrc na home do usuário) as configurações iniciais. Logo, você pode criar um arquivo assim:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #804040;">set</span> <span style="color: #668080;">sw</span>=<span style="color: #000000; font-weight:bold;">4</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">ai</span>
<span style="color: #804040;">set</span> <span style="color: #668080;">nu</span></pre></div></div>

<p></p>
<p>Links interessantes:<br />
<a href="http://jamielesouef.com/linux/vim-editor-100-commands-every-admin-should-know/" target="_blank" onclick="urchinTracker('/outgoing/jamielesouef.com/linux/vim-editor-100-commands-every-admin-should-know/?referer=');">Vim Editor : 100 commands every admin should know </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/comandos-do-editor-vi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutorial AWK</title>
		<link>http://www.rberaldo.com.br/blog/tutorial-awk/</link>
		<comments>http://www.rberaldo.com.br/blog/tutorial-awk/#comments</comments>
		<pubDate>Thu, 07 May 2009 12:27:00 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[AWK]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programação Shell]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/2009/05/07/tutorial-awk/</guid>
		<description><![CDATA[Não sou nenhum expert ou grande conhecedor da linguagem AWK, mas ela é muito útil e me ajudou muito nas provas sobre Shell Script na faculdade. Por isso resolvi escrever este pequeno e introdutório tutorial acerca dessa linguagem. É bom todo usuário Linux saber usá-la. =) AWK é uma linguagem utilizada para processamento de informações [...]]]></description>
			<content:encoded><![CDATA[<p>Não sou nenhum <em>expert</em> ou grande conhecedor da linguagem AWK, mas ela é muito útil e me ajudou muito nas provas sobre Shell Script na faculdade. Por isso resolvi escrever este pequeno e introdutório tutorial acerca dessa linguagem. É bom todo usuário Linux saber usá-la. =)</p>
<p>AWK é uma linguagem utilizada para processamento de informações em texto, como o conteúdo de um arquivo &#8211; principalmente informações em colunas &#8211; ou a saída de outros comandos, como <strong>cat</strong>, <strong>grep</strong> etc.</p>
<p><span id="more-15"></span><br />
A estrutura de um script AWK (pode estar em um arquivo ou ser escrito diretamente na linha de comando &#8211; Shell) é a seguinte:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">BEGIN<span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comandos executados ao iniciar o processamento, antes de ler <span style="color: #c20cb9; font-weight: bold;">as</span> linhas <span style="color: #000000; font-weight: bold;">do</span> texto
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>condicao<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comandos a serem executados em todas <span style="color: #c20cb9; font-weight: bold;">as</span> linhas <span style="color: #000000; font-weight: bold;">do</span> texto
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
END<span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comando final. Executado após o processamento de todas <span style="color: #c20cb9; font-weight: bold;">as</span> linhas
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>A condição do segudo bloco é opcional. Se não especificada, os respectivos comandos do bloco serão executados em todas as linhas. Caso contrário, serão executados apenas nas linhas que satisfizerem a condição.<br />
A condição pode ser uma expressão regular. Basta colocá-la entre barras:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>^A<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comando...
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Se um bloco de comandos estiver vazio, é executado <strong>print $0</strong>, ou seja, imprime a linha corrente.</p>
<p>Algumas variáveis definidas no AWK:</p>
<p>FS -> separador de campos<br />
NR -> número da linhas<br />
NF -> número de campos na linha</p>
<p>Para mais informações:</p>
<p>Manpage do AWK: <a href="http://www.linuxmanpages.com/man1/awk.1.php" target="_blank" onclick="urchinTracker('/outgoing/www.linuxmanpages.com/man1/awk.1.php?referer=');"><strong>$ man awk</strong></a><br />
<a href="http://www.gnu.org/software/gawk/manual/gawk.html" target="_blank" onclick="urchinTracker('/outgoing/www.gnu.org/software/gawk/manual/gawk.html?referer=');">http://www.gnu.org/software/gawk/manual/gawk.html</a><br />
<a href="http://en.wikipedia.org/wiki/Awk" target="_blank" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Awk?referer=');">http://en.wikipedia.org/wiki/Awk</a></p>
<p>Exemplos:</p>
<p>Filtra  as linhas com o padrão especificado. Linhas que terminam com conf</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #000000; font-weight: bold;">/</span>conf$<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>Usando outro separador de campos e imprimindo colunas</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> -F: <span style="color: #ff0000;">'{print $1}'</span></pre></td></tr></table></div>

<p>Usando separador de campos</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $1 FS $8}'</span></pre></td></tr></table></div>

<p>Numerando linhas</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print NR FS$1 FS $8}'</span></pre></td></tr></table></div>

<p>Filtra linhas com padrão especificado e mostra apenas as colunas 1 e 8.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/conf$/{print $1&quot; &quot;$8}'</span></pre></td></tr></table></div>

<p>Imprime as linhas com mais de 3 campos. Elimina a primeira linha do ls -l (Total)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'NF &gt; 3'</span></pre></td></tr></table></div>

<p>Filtra linhas com arquivos cujos nomes possuem menos de 5 caracteres</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'length($8) &lt; 5'</span></pre></td></tr></table></div>

<p>Imprime linhas pares</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'NR % 2 == 0 {print NR&quot; &quot;$0}'</span></pre></td></tr></table></div>

<p>Substitui strings</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{sub(/conf$/,&quot;test&quot;); print $0}'</span></pre></td></tr></table></div>

<p>Procura expressão em determinado campo</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'$8 ~ /^[ae]/'</span></pre></td></tr></table></div>

<p>Inserindo strings entre campos</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> -F: <span style="color: #ff0000;">'{print &quot;Login: &quot; $1}'</span></pre></td></tr></table></div>

<p>Filtra  a saída de <strong>ls -l</strong>, a fim de mostrar o nome do arquivo, suas permissões e seu tamanho (a condição <strong>NR != 1</strong> evita que a linha <strong>Total</strong> seja exibida):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'NR != 1{print &quot;Nome: &quot;$8&quot; Perm: &quot;$1&quot; Tamanho: &quot;$5}'</span></pre></td></tr></table></div>

<p>Imprime o comprimento da maior linha</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{ if (length($0) &gt; max) max = length($0)}; END { print max}'</span>; arquivo</pre></td></tr></table></div>

<p>Imprime as linhas com mais de 42 caracteres</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'length($0) &gt; 42'</span> arquivo</pre></td></tr></table></div>

<p>Exibe o número de linhas do arquivo</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'END { print NR }'</span> arquivo</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/tutorial-awk/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

