Your SlideShare is downloading. ×
  • Like
Curso de Shell Script 01/11
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Curso de Shell Script 01/11

  • 100 views
Published

Você não aguenta mais aquele seu amigo usuário de Linux enchendo o seu saco com aquela história de que o sistema é fantástico e o Shell é uma ferramenta maravilhosa? A partir desta edição vai ficar …

Você não aguenta mais aquele seu amigo usuário de Linux enchendo o seu saco com aquela história de que o sistema é fantástico e o Shell é uma ferramenta maravilhosa? A partir desta edição vai ficar mais fácil entender o porquê deste entusiasmo...

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
100
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
6
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. LINUX USER Papo de BotequimCurso de Shell ScriptPapo de BotequimVocê não agüenta mais aquele seu porque, em inglês, Shell significa con- cha, carapaça, isto é, fica entre o u-amigo usuário de Linux enchendo o suário e o sistema operacional, de forma que tudo que interage comseu saco com aquela história de que o o sistema operacional, tem que passar pelo seu crivo.sistema é fantástico e o Shell é umaferramenta maravilhosa? A partir O ambiente Shell Bom já que para chegar aodesta edição vai ficar mais fácil en- núcleo do Linux, no seu ker- nel que é o que interessa atender o porquê deste entusiasmo... todo aplicativo, é necessária a filtragem do Shell, vamos enten-POR JULIO CEZAR NEVES der como ele funciona de forma a tirar o máximo proveito das inú- meras facilidades que ele nos oferece.D iálogo entreouvido em uma mesa O Linux, por definição, é um sistema de um botequim, entre um multiusuário – não podemos nunca nos usuário de Linux e um empur- esquecer disto – e para permitir o acessorador de mouse: O ambiente Linux de determinados usuários e barrar a en-• Quem é o Bash? Para você entender o que é e como fun- trada de outros, existe um arquivo cha-• É o filho caçula da família Shell. ciona o Shell, primeiro vou te mostrar mado /etc/passwd, que além de fornecer• Pô cara! Estás a fim de me deixar como funciona o ambiente em camadas dados para esta função de “leão-de-chá- maluco? Eu tinha uma dúvida e você do Linux. Dê uma olhada no gráfico cara” do Linux, também provê informa- me deixa com duas! mostrado na Figura 1. ções para o início de uma sessão (ou• Não, maluco você já é há muito tem- Neste gráfico podemos ver que a ca- “login”, para os íntimos) daqueles que po: desde que decidiu usar aquele sis- mada de hardware é a mais profunda e é passaram por esta primeira barreira. O tema operacional que você precisa formada pelos componentes físicos do último campo de seus registros informa reiniciar dez vezes por dia e ainda por seu computador. Em torno dela, vem a ao sistema qual é o Shell que a pessoa cima não tem domínio nenhum sobre camada do kernel que é o cerne do vai receber ao iniciar sua sessão. o que esta acontecendo no seu com- Linux, seu núcleo, e é quem põe o hard- Lembra que eu te falei de Shell, fa- putador. Mas deixa isso prá lá, pois ware para funcionar, fazendo seu geren- mília, irmão? Pois é, vamos começar a vou te explicar o que é Shell e os com- ciamento e controle. Os programas e entender isto: o Shell é a conceituação ponentes de sua família e ao final da comandos que envolvem o kernel, dele de concha envolvendo o sistema opera- nossa conversa você dirá: “Meu Deus se utilizam para realizar as tarefas para cional propriamente dito, é o nome do Shell! Porque eu não optei pelo que foram desenvolvidos. Fechando tudo genérico para tratar os filhos desta idéia Linux antes?”. isso vem o Shell, que leva este nome que, ao longo dos muitos anos de exis- Quadro 1: Uma rapidinha nos principais sabores de Shell Bourne Shell (sh): Desenvolvido por Stephen do sh e a elas agregou muitas outras. A com- C Shell (csh): Desenvolvido por Bill Joy, da Bourne do Bell Labs (da AT&T, onde também patibilidade total com o sh vem trazendo Universidade de Berkley, é o Shell mais uti- foi desenvolvido o Unix), foi durante muitos muitos usuários e programadores de Shell lizado em ambientes BSD. Foi ele quem intro- anos o Shell padrão do sistema operacional para este ambiente. duziu o histórico de comandos. A Unix. É também chamado de Standard Shell Boune Again Shell (bash): Desenvolvido ini- estruturação de seus comandos é bem simi- por ter sido durante vários anos o único, e é cialmente por Brian Fox e Chet Ramey, este é lar à da linguagem C. Seu grande pecado foi até hoje o mais utilizado. Foi portado para o Shell do projeto GNU. O número de seus ignorar a compatibilidade com o sh, partindo praticamente todos os ambientes Unix e dis- adeptos é o que mais cresce em todo o por um caminho próprio. tribuições Linux. mundo, seja por que ele é o Shell padrão do Além destes Shells existem outros, mas irei Korn Shell (ksh): Desenvolvido por David Linux, seja por sua grande diversidade de falar somente sobre os três primeiros, tratan- Korn, também do Bell Labs, é um supercon- comandos, que incorpora inclusive diversos do-os genericamente por Shell e assinalando junto do sh, isto é, possui todas as facilidades comandos característicos do C Shell. as especificidades de cada um.82 Agosto 2004 www.linuxmagazine.com.br
  • 2. Papo de Botequim LINUX USERtência do sistema operacional Unix, redirecionamento, que pode ser deforam aparecendo. Atualmente existem Com que Shell eu vou? entrada (stdin), de saída (stdout) ou dos Quando digo que o último campo do arqui-diversos sabores de Shell (veja Quadro 1 erros (stderr), conforme vou explicar a vo /etc/passwd informa ao sistema qual é ona página anterior). seguir. Mas antes precisamos falar de... Shell que o usuário vai usar ao se “logar”, isto deve ser interpretado ao pé-da-letra. Se esteComo funciona o Shell campo do seu registro contém o termo prog, Substituição de VariáveisO Shell é o primeiro programa que você ao acessar o sistema o usuário executará o Neste ponto, o Shell verifica se as even-ganha ao iniciar sua sessão (se quiser- programa prog. Ao término da execução, a tuais variáveis (parâmetros começadosmos assassinar a língua portuguesa sessão do usuário se encerra automatica- por $), encontradas no escopo do mente. Imagine quanto se pode incremen-podemos também dizer “ao se logar”) no comando, estão definidas e as substitui tar a segurança com este simples artifício.Linux. É ele quem vai resolver um monte por seus valores atuais.de coisas de forma a não onerar o kernelcom tarefas repetitivas, poupando-o para volvidos (inclusive o próprio programa), Substituição de Meta-tratar assuntos mais nobres. Como cada e retorna um erro caso o usuário que Caracteresusuário possui o seu próprio Shell inter- chamou o programa não esteja autor- Se algum meta-caracter (ou “coringa”,pondo-se entre ele e o Linux, é o Shell izado a executar esta tarefa. como *, ? ou []) for encontrado na linhaquem interpreta os comandos digitados e de comando, ele será substituído porexamina as suas sintaxes, passando-os $ ls linux seus possíveis valores.esmiuçados para execução. linux Supondo que o único item no seu• Êpa! Esse negócio de interpretar co- diretório corrente cujo nome começa mando não tem nada a ver com inter- Neste exemplo o Shell identificou o ls co- com a letra n seja um diretório chamado pretador não, né? mo um programa e o linux como um pa- nomegrandeprachuchu, se você fizer:• Tem sim: na verdade o Shell é um in- râmetro passado para o programa ls. terpretador que traz consigo uma po- $ cd n* derosa linguagem com comandos de Atribuição alto nível, que permite construção de Se o Shell encontra dois campos separa- como até aqui quem está manipulando a loops, de tomadas de decisão e de ar- dos por um sinal de igual (=) sem espa- linha de comando ainda é o Shell e o mazenamento de valores em variáveis, ços em branco entre eles, ele identifica programa cd ainda não foi executado, o como vou te mostrar. esta seqüência como uma atribuição. Shell expande o n* para nomegrandepra-• Vou explicar as principais tarefas que o chuchu (a única possibilidade válida) e Shell cumpre, na sua ordem de exe- $ valor=1000 executa o comando cd com sucesso. cução. Preste atenção, porque esta ordem é fundamental para o entendi- Neste caso, por não haver espaços em Entrega da linha de comando mento do resto do nosso bate papo. branco (que é um dos caracteres reserva- para o kernel dos), o Shell identificou uma atribuição e Completadas todas as tarefas anteriores,Análise da linha de comando colocou 1000 na variável valor. o Shell monta a linha de comando, jáNeste exame o Shell identifica os carac- com todas as substituições feitas eteres especiais (reservados) que têm sig- Resolução de chama o kernel para executá-la em umnificado para a interpretação da linha e Redirecionamentos novo Shell (Shell filho), que ganha umlogo em seguida verifica se a linha pas- Após identificar os componentes da li- número de processo (PID ou Processsada é um comando ou uma atribuição nha que você digitou, o Shell parte para IDentification) e fica inativo, tirandode valores, que são os ítens que vou a resolução de redirecionamentos. uma soneca durante a execução do pro-descrever a seguir. O Shell tem incorporado ao seu elenco grama. Uma vez encerrado este processo de habilidades o que chamamos de (e o Shell filho), o “Shell pai” recebeComando novamente o controle e exibe umQuando um comando é digi- “prompt”, mostrando que está prontotado no “prompt” (ou linha de Shell para executar outros comandos.comando) do Linux, ele é divi-dido em partes, separadas por Programas e Comandos Cuidado na Atribuiçãoespaços em branco: a primeira Núcleo ou Kernel Jamais faça:parte é o nome do programa,cuja existência será verificada; Hardware $ valor = 1000 bash: valor: not foundem seguida, nesta ordem, vêm Neste caso, o Bash achou a palavra valor iso-as opções/parâmetros, redire- lada por espaços e julgou que você estivessecionamentos e variáveis. mandando executar um programa chama- Quando o programa identifi- do valor, para o qual estaria passando doiscado existe, o Shell verifica as parâmetros: = e 1000.permissões dos arquivos en- Figura 1: Ambiente em camadas de um sistema Linux www.linuxmagazine.com.br Agosto 2004 83
  • 3. LINUX USER Papo de BotequimDecifrando a Pedra de Roseta $ echo * esperando pelo teclado (Entrada Padrão)Para tirar aquela sensação que você tem $ echo * e como também não citei a saída, o quequando vê um script Shell, que mais eu teclar irá para a tela (Saída Padrão),parece uma sopa de letrinhas ou um con- Viu a diferença? criando desta forma – como eu haviajunto de hieróglifos, vou lhe mostrar os • Aspas (“): exatamente iguais ao após- proposto – um programa gago. Experi-principais caracteres especiais para que trofo, exceto que, se a cadeia entre mente!você saia por aí como Champollion deci- aspas contiver um cifrão ($), umafrando a Pedra de Roseta. crase (`), ou uma barra invertida (), Redirecionamentop da Saída estes caracteres serão interpretados PadrãoCaracteres para remoção do pelo Shell. Para especificarmos a saída de um pro-significado. Não precisa se estressar, eu não te dei grama usamos o símbolo “>” ou oÉ isso mesmo, quando não desejamos exemplos do uso das aspas por que “>>”, seguido do nome do arquivo pa-que o Shell interprete um caractere você ainda não conhece o cifrão ($) ra o qual se deseja mandar a saída.específico, devemos “escondê-lo” dele. nem a crase (`). Daqui para frente - Vamos transformar o programa ante-Isso pode ser feito de três maneiras difer- veremos com muita constância o uso rior em um “editor de textos”:entes, cada uma com sua peculiaridade: destes caracteres especiais; o mais• Apóstrofo (´): quando o Shell vê uma importante é entender seu significado. $ cat > Arq cadeia de caracteres entre apóstrofos, ele retira os apóstrofos da cadeia e não Caracteres de O cat continua sem ter a entrada especi- interpreta seu conteúdo. redirecionamento ficada, portanto está aguardando que os A maioria dos comandos tem uma entra- dados sejam teclados, porém a sua saída $ ls linuxm* da, uma saída e pode gerar erros. Esta está sendo desviada para o arquivo Arq. linuxmagazine entrada é chamada Entrada Padrão ou Assim sendo, tudo que esta sendo tecla- $ ls linuxm* stdin e seu dispositivo padrão é o teclado do esta indo para dentro de Arq, de for- bash: linuxm* no such file U do terminal. Analogamente, a saída do ma que fizemos o editor de textos mais or directory comando é chamada Saída Padrão ou curto e ruim do planeta. stdout e seu dispositivo padrão é a tela Se eu fizer novamente: No primeiro caso o Shell “expandiu” o do terminal. Para a tela também são asterisco e descobriu o arquivo linux- enviadas normalmente as mensagens de $ cat > Arq magazine para listar. No segundo, os erro oriundas dos comandos, chamada apóstrofos inibiram a interpretação do neste caso de Saída de Erro Padrão ou Os dados contidos em Arq serão perdi- Shell e veio a resposta que não existe o stderr. Veremos agora como alterar este dos, já que antes do redirecionamento o arquivo linuxm*. estado de coisas. Shell criará um Arq vazio. Para colocar• Contrabarra ou Barra Invertida (): i- Vamos fazer um programa gago. Para mais informações no final do arquivo eu dêntico aos apóstrofos exceto que a isto digite (tecle “Enter” ao final de cada deveria ter feito: barra invertida inibe a interpretação linha – comandos do usuário são ilus- somente do caractere que a segue. trados em negrito): $ cat >> Arq Suponha que você, acidentalmente, tenha criado um arquivo chamado * $ cat Redirecionamento da Saída (asterisco) – o que alguns sabores de E-e-eu sou gago. Vai encarar? de Erro Padrão Unix permitem – e deseja removê-lo. E-e-eu sou gago. Vai encarar? Assim como por padrão o Shell recebe os Se você fizesse: dados do teclado e envia a saída para a O cat é um comando que lista o con- tela, os erros também vão para a tela se $ rm * teúdo do arquivo especificado para a você não especificar para onde eles de- Saída Padrão (stdout). Caso a entrada vem ser enviados. Para redirecionar os Você estaria na maior encrenca, pois o não seja definida, ele espera os dados da erros, use 2> SaidaDeErro. Note que en- rm removeria todos os arquivos do stdin (a entrada padrão). Ora como eu tre o número 2 e o sinal de maior (>) diretório corrente. A melhor forma de não especifiquei a entrada, ele a está não existe espaço em branco. fazer o serviço é: Vamos supor que durante a execução Redirecionamento Perigoso de um script você pode, ou não (depen- $ rm * Como já havia dito, o Shell resolve a linha e dendo do rumo tomado pela execução depois manda o comando para a execução. do programa), ter criado um arquivo Desta forma, o Shell não interpreta o Assim, se você redirecionar a saída de um chamado /tmp/seraqueexiste$$. Como asterisco, evitando a sua expansão. arquivo para ele próprio, primeiramente o não quer ficar com sujeira no disco Faça a seguinte experiência científica: Shell “esvazia”este arquivo e depois manda rígido, ao final do script você coloca a o comando para execução! Desta forma, linha a seguir: para sua alegria, você acabou de perder o $ cd /etc conteúdo de seu querido arquivo. $ echo * rm /tmp/seraqueexiste$$84 Agosto 2004 www.linuxmagazine.com.br
  • 4. Papo de Botequim LINUX USER caprichamos, né? Então ao invés de sair Dados ou Erros? redigindo o mail direto no “prompt”, de Etiquetas Erradas Preste atenção! Não confunda >> com 2>. O forma a tornar impossível a correção de Um erro comum no uso de labels (como o primeiro anexa dados ao final de um arqui- fimftp do exemplo anterior) é causado pela uma frase anterior onde, sem querer, vo, e o segundo redireciona a Saída de Erro presença de espaços em branco antes ou você escreveu um “nós vai”, você edita Padrão (stderr) para um arquivo que está após o mesmo. Fique muito atento quanto a um arquivo com o conteúdo da mensa- sendo designado. Isto é importante! isso, por que este tipo de erro costuma dar gem e após umas quinze verificações uma boa surra no programador, até que seja sem constatar nenhum erro, decide detectado. Lembre-se: um label que se prezeCaso o arquivo não existisse seria envi- enviá-lo e para tal faz: tem que ter uma linha inteira só para ele.ado para a tela uma mensagem de erro.Para que isso não aconteça faça: $ mail chefe@chefia.com.br < U arquivocommailparaochefe nada a partir deste ponto até encontrar rm /tmp/seraqueexiste$$ 2> U o ‘label’ fimftp. Você não entenderia /dev/null e o chefe receberá uma mensagem com o droga nenhuma, já que são instruções conteúdo do arquivocommailparaochefe. específicas do ftp”.Para que você teste a Saída de Erro Pa- Outro tipo de redirecionamento “muito Se fosse só isso seria simples, masdrão direto no prompt do seu Shell, vou louco” que o Shell permite é o chamado pelo próprio exemplo dá para ver quedar mais um exemplo. Faça: “here document”. Ele é representado por existem duas variáveis ($Usuario e << e serve para indicar ao Shell que o $Senha), que o Shell vai resolver antes $ ls naoexiste escopo de um comando começa na linha do redirecionamento. Mas a grande bash: naoexiste no such file U seguinte e termina quando encontra uma vantagem deste tipo de construção é or directory linha cujo conteúdo seja unicamente o que ela permite que comandos tam- $ ls naoexiste 2> arquivodeerros “label” que segue o sinal <<. bém sejam interpretados dentro do $ Veja o fragmento de script a seguir, escopo do “here document”, o que, $ cat arquivodeerros com uma rotina de ftp: aliás, contraria o que acabei de dizer. bash: naoexiste no such file U Logo a seguir te explico como esse or directory ftp -ivn hostremoto << fimftp negócio funciona. Agora ainda não dá, user $Usuario $Senha estão faltando ferramentas.Neste exemplo, vimos que quando fize- binary • O comando user é do repertório demos um ls em naoexiste, ganhamos uma get arquivoremoto instruções do ftp e serve para passar omensagem de erro. Após redirecionar a fimftp usuário e a senha que haviam sidoSaída de Erro Padrão para arquivodeerros lidos em uma rotina anterior a estee executar o mesmo comando, recebe- neste pedacinho de programa temos um fragmento de código e colocados res-mos somente o “prompt” na tela. Quan- monte de detalhes interessantes: pectivamente nas duas variáveis:do listamos o conteúdo do arquivo para • As opções usadas para o ftp (-ivn) $Usuario e $Senha.o qual foi redirecionada a Saída de Erro servem para ele listar tudo que está • O binary é outra instrução do ftp, quePadrão, vimos que a mensagem de erro acontecendo (opção -v de “verbose”), serve para indicar que a transferênciatinha sido armazenada nele. para não ficar perguntando se você de arquivoremoto será feita em modo É interessante notar que estes carac- tem certeza que deseja transmitir cada binário, isto é o conteúdo do arquivoteres de redirecionamento são cumula- arquivo (opção -i de “interactive”) e não será inteerpretado para saber setivos, isto é, se no exemplo anterior finalmente a opção -n serve para dizer está em ASCII, EBCDIC, …fizéssemos o seguinte: ao ftp para ele não solicitar o usuário e • O comando get arquivoremoto diz ao sua senha, pois estes serão informados cliente ftp para pegar este arquivo no $ ls naoexiste 2>> U pela instrução específica (user); servidor hostremoto e trazê-lo para a arquivodeerros • Quando eu usei o << fimftp, estava nossa máquina local. Se quiséssemos dizendo o seguinte para o interpreta- enviar um arquivo, bastaria usar, pora mensagem de erro oriunda do ls seria dor: “Olha aqui Shell, não se meta em exemplo, o comando put arquivolocal.anexada ao final de arquivodeerros. Direito de Posse Redirecionamento deRedirecionamento da O $$ contém o PID,isto é,o número do seu comandosEntrada Padrão processo. Como o Linux é multiusuário,é Os redirecionamentos de que falamos atéPara fazermos o redirecionamento da En- bom anexar sempre o $$ ao nome dos seus agora sempre se referiam a arquivos, istotrada Padrão usamos o < (menor que). arquivos para não haver problema de propri- é, mandavam para arquivo, recebiam de“E pra que serve isso?”, você vai me per- edade,isto é,caso você batizasse o seu ar- arquivo, simulavam arquivo local, … Oguntar. Deixa eu dar um exemplo, que quivo simplesmente como seraqueexiste,a que veremos a partir de agora, redirecio-você vai entender rapidinho. primeira pessoa que o usasse (criando-o na a saída de um comando para a entra- então) seria o seu dono e a segunda ganharia Suponha que você queira mandar um da de outro. É utilíssimo e, apesar de não um erro quando tentasse gravar algo nele.mail para o seu chefe. Para o chefe nós ser macaco gordo, sempre quebra os www.linuxmagazine.com.br Agosto 2004 85
  • 5. LINUX USER Papo de Botequimmaiores galhos. Seu nome é “pipe” (que $ echo "Existem who | wc -l U $ (pwd ; cd /etc ; pwd)em inglês significa tubo, já que ele cana- usuarios conectados" /home/meudirliza a saída de um comando para a Existem who | wc -l usuarios U /etcentrada de outro) e sua representação é a conectados $ pwd| (barra vertical). /home/meudir Hi! Olha só, não funcionou! É mesmo, $ ls | wc -l não funcionou e não foi por causa das “Quequeiiisso” minha gente? Eu estava 21 aspas que eu coloquei, mas sim por que no /home/meudir, mudei para o /etc, eu teria que ter executado o who | wc -l constatei que estava neste diretório comO comando ls passou a lista de arquivos antes do echo. Para resolver este proble- o pwd seguinte e quando o agrupamentopara o comando wc, que quando está ma, tenho que priorizar a segunda parte de comandos terminou, eu vi que conti-com a opção -l conta a quantidade de li- do comando com o uso de crases: nuava no /etc/meudir!nhas que recebeu. Desta forma, pode- Hi! Será que tem coisa do mágicomos afirmar categoricamente que no $ echo "Existem `who | wc -l` U Mandrake por aí? Nada disso. O interes-meu diretório existiam 21 arquivos. usuarios conectados" sante do uso de parênteses é que eles Existem 8 usuarios U invocam um novo Shell para executar os $ cat /etc/passwd | sort | lp conectados comandos que estão em seu interior. Desta forma, fomos realmente para oA linha de comandos acima manda a Para eliminar esse monte de brancos diretório /etc, porém após a execução delistagem do arquivo /etc/passwd para a antes do 8 que o wc -l produziu, basta todos os comandos, o novo Shell queentrada do comando sort. Este a classi- retirar as aspas. Assim: estava no diretório /etc morreu e retor-fica e envia para o lp que é o gerenciador namos ao Shell anterior que estava emda fila de impressão. $ echo Existem `who | wc -l` U /home/meudir. usuarios conectados Que tal usar nossos novos conceitos?Caracteres de ambiente Existem 8 usuarios conectadosQuando queremos priorizar uma expres- $ mail suporte@linux.br << FIMsão, nós a colocamos entre parênteses, As aspas protegem da interpretação do Ola suporte, hoje as `date Unão é? Pois é, por causa da aritmética é Shell tudo que está dentro dos seus lim- “+%hh:mm”` ocorreu novamente Unormal pensarmos deste jeito. Mas em ites. Como para o Shell basta um espaço aquele problema que eu havia UShell o que prioriza mesmo são as crases em branco como separador, o monte de reportado por telefone. De U(`) e não os parênteses. Vou dar exemp- espaços será trocado por um único após acordo com seu pedido segue a Ulos para você entender melhor. a retirada das aspas. listagem do diretorio: Eu quero saber quantos usuários estão Outra coisa interessante é o uso do `ls -l`“logados” no computador que eu admi- ponto-e-vírgula. Quando estiver no Shell, Abracos a todos.nistro. Eu posso fazer: você deve sempre dar um comando em FIM cada linha. Para agrupar comandos em $ who | wc -l uma mesma linha, temos que separá-los Finalmente agora podemos demonstrar o 8 por ponto-e-vírgula. Então: que conversamos anteriormente sobre “here document”. Os comandos entreO comando who passa a lista de usuários $ pwd ; cd /etc; pwd ;cd -;pwd crases tem prioridade, portanto o Shellconectados ao sistema para o comando /home/meudir os executará antes do redirecionamentowc -l, que conta quantas linhas recebeu e /etc do “here document”. Quando o suportemostra a resposta na tela. Muito bem, /home/meudir receber a mensagem, verá que osmas ao invés de ter um número oito comandos date e ls foram executadossolto na tela, o que eu quero mesmo é Neste exemplo, listei o nome do diretório antes do comando mail, recebendo entãoque ele esteja no meio de uma frase. Ora, corrente com o comando pwd, mudei um instantâneo do ambiente nopara mandar frases para a tela eu só pre- para o diretório /etc, novamente listei o momento de envio do email.ciso usar o comando echo; então vamos nome do diretório e finalmente voltei pa- - Garçom, passa a régua! sver como é que fica: ra o diretório onde estava anteriormente (cd -), listando seu nome. Repare que Julio Cezar Neves é Analista de Su- SOBRE O AUTOR Buraco Negro coloquei o ponto-e-vírgula de todas as porte de Sistemas desde 1969 e tra- Em Unix existe um arquivo fantasma. formas possíveis, para mostrar que não balha com Unix desde 1980, quando Chama-se /dev/null.Tudo que é enviado importa se existem espaços em branco fez parte da equipe que desenvolveu para este arquivo some. Assemelha-se a um antes ou após este caracter. o SOX, sistema operacional, similar Buraco Negro. No caso do exemplo, como ao Unix, da Cobra Computadores. É Finalmente, vamos ver o caso dos não me interessava guardar a possível men- professor do curso de Mestrado em parênteses. No exemplo a seguir, colo- sagem de erro oriunda do comando rm, redi- Software Livre das Faculdades Estácio camos diversos comandos separados por recionei-a para este arquivo. de Sá, no Rio de Janeiro. ponto-e-vírgula entre parênteses:86 Agosto 2004 www.linuxmagazine.com.br