<?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; Programação Shell</title>
	<atom:link href="http://www.rberaldo.com.br/blog/tag/programacao-shell/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>Mon, 06 Feb 2012 14:30:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Executando scripts na inicialização do Debian/Ubuntu</title>
		<link>http://www.rberaldo.com.br/blog/executando-scripts-na-inicializacao-do-debianubuntu/</link>
		<comments>http://www.rberaldo.com.br/blog/executando-scripts-na-inicializacao-do-debianubuntu/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:09:32 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[inicialização]]></category>
		<category><![CDATA[init]]></category>
		<category><![CDATA[init.d]]></category>
		<category><![CDATA[initd]]></category>
		<category><![CDATA[Programação Shell]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=196</guid>
		<description><![CDATA[Como executar scripts na inicialização do Debian ou Ubuntu]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes desejamos executar algum comando ou iniciar serviços na inicialização do Sistema Operacional. É muito simples executar essa operação usando o Debian ou o Ubuntu.</p>
<p>Veja abaixo um passo-a-passo e um exemplo usando uma instalação manual do Servidor WEB Apache.</p>
<p><span id="more-196"></span></p>
<p><strong>Todos os comandos precisam ser executados como root.</strong></p>
<p>Primeiramente, vamos criar um script chamado <strong>meuScript</strong> em /etc/init.d com uma estrutura semelhante à abaixo:</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>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># /etc/init.d/meuScript</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">in</span>
    start<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Iniciando serviço...&quot;</span>
        <span style="color: #666666; font-style: italic;"># comando para iniciar o serviço</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
    stop<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Parando serviço...&quot;</span>
        <span style="color: #666666; font-style: italic;"># comando para parar o serviço</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
    restart<span style="color: #7a0874; font-weight: bold;">&#41;</span>
        <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Reiniciando serviço...&quot;</span>
        <span style="color: #666666; font-style: italic;"># comando para reiniciar o serviço</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
    <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;Operação inválida&quot;</span>
        <span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">esac</span></pre></div></div>

<p>Dê permissão de execução para o script:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># chmod +x meuScript</span></pre></div></div>

<p>A partir desse momento você já pode executar os comandos abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /etc/init.d/meuScript start</span>
<span style="color: #666666; font-style: italic;"># /etc/init.d/meuScript stop</span>
<span style="color: #666666; font-style: italic;"># /etc/init.d/meuScript restart</span></pre></div></div>

<p>Para inserir o script na inicialização do sistema, usamos o comando update-rc.d da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-rc.d meuScript defaults</span></pre></div></div>

<p>O &#8220;meuScript&#8221; é o nome do script em /etc/init.d, não o caminho completo a ele, ou seja, não importa em qual diretório você está, apenas coloque o nome do script.</p>
<p>O &#8220;defaults&#8221; indica que desejamos inserir o script nos <em>runlevels</em> padrões do sistema.</p>
<p>Ao executar esse comando, um warning será mostrado, apesar de o comando ter funcionado. Aparecerá uma mensagem como esta:</p>
<p>&#8220;<strong>update-rc.d: warning: /etc/init.d/meuScript missing LSB information<br />
update-rc.d: see &lt;http://wiki.debian.org/LSBInitScripts&gt;</strong>&#8221;</p>
<p>Você pode ignorá-lo ou inserir as informações de LSB, o que é mostrado no link exibido no warning. É algo bem simples. =)</p>
<p>Para remover um script da inicialização:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># update-rc.d -f meuScript remove</span></pre></div></div>

<p>Como prometi, vou mostrar um exemplo que uso para uma instalação manual do Apache:</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>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># /etc/init.d/apache2 </span>
&nbsp;
<span style="color: #666666; font-style: italic;">### BEGIN INIT INFO</span>
<span style="color: #666666; font-style: italic;"># Provides:          apache2</span>
<span style="color: #666666; font-style: italic;"># Required-Start:    $local_fs $syslog</span>
<span style="color: #666666; font-style: italic;"># Required-Stop:     $local_fs $syslog</span>
<span style="color: #666666; font-style: italic;"># Default-Start:     2 3 4 5</span>
<span style="color: #666666; font-style: italic;"># Default-Stop:      0 1 6</span>
<span style="color: #666666; font-style: italic;"># Short-Description: Start Apache at boot</span>
<span style="color: #666666; font-style: italic;"># Description:       Start Apache HTTP Server</span>
<span style="color: #666666; font-style: italic;">### END INIT INFO</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Path to Apache controller</span>
<span style="color: #007800;">BIN</span>=<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>apache2<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>apachectl
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> startApache<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;Starting Apache...&quot;</span>
	<span style="color: #007800;">$BIN</span> start
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> stopApache<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;Stopping Apache...&quot;</span>
	<span style="color: #007800;">$BIN</span> stop
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;$1&quot;</span> <span style="color: #000000; font-weight: bold;">in</span>
	start <span style="color: #7a0874; font-weight: bold;">&#41;</span>
		startApache
		<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;">-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;">echo</span> <span style="color: #ff0000;">&quot;OK.&quot;</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
&nbsp;
	stop <span style="color: #7a0874; font-weight: bold;">&#41;</span>
		stopApache
		<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;">-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;">echo</span> <span style="color: #ff0000;">&quot;OK.&quot;</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
	restart <span style="color: #7a0874; font-weight: bold;">&#41;</span>
		stopApache
		<span style="color: #c20cb9; font-weight: bold;">sleep</span> <span style="color: #000000;">1</span>
		startApache
		<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;">-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;">echo</span> <span style="color: #ff0000;">&quot;OK.&quot;</span>
		<span style="color: #000000; font-weight: bold;">fi</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">;;</span>
&nbsp;
&nbsp;
	<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;Invalid option&quot;</span>
		<span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">esac</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/executando-scripts-na-inicializacao-do-debianubuntu/feed/</wfw:commentRss>
		<slash:comments>29</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>

