<?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>Arquivo para Shell Scripting - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/shell-script/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/shell-script/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Wed, 13 Nov 2024 14:27:57 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Como usar laços de repetição em Shell Scripting</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/como-usar-lacos-de-repeticao-em-shell-scripting/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/como-usar-lacos-de-repeticao-em-shell-scripting/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 11 Nov 2024 13:25:05 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Certificação]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">https://www.bosontreinamentos.com.br/?p=20455</guid>

					<description><![CDATA[<p>Laços de repetição em Shell Scripting Em Shell Scripting, os laços de repetição são estruturas que permitem executar uma série de comandos várias vezes. Os loops ajudam a automatizar tarefas repetitivas, iterando sobre listas, variáveis, comandos e arquivos. O Bash oferece algumas estruturas de repetição essenciais: for, while, e until. Vamos explorar cada uma, com exemplos práticos e exercícios ao final. O laço for em shell scripting O laço for é usado para percorrer uma lista de itens, como um conjunto de números, strings ou até mesmo arquivos. Ele executa o conjunto de comandos uma vez para cada item na lista. Sintaxe básica do laço for for item in lista; do Comandos a serem executados done Exemplo 1: Laço for simples Esse exemplo exibe uma mensagem para cada nome da lista. #!/bin/bash for nome in Fábio Marcos Bruno Robson; do echo "Olá, $nome!" done Saída: Olá, Fábio! Olá, Marcos! Olá, Bruno! Olá Robson! Exemplo 2: Laço for com intervalo de números Podemos definir um intervalo de números e iterar sobre ele: #!/bin/bash for i in {1..5}; do echo "$i" done Saída: 1 2 3 4 5 Exemplo 3: Loop for sobre arquivos em um diretório Este exemplo percorre todos os arquivos [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/como-usar-lacos-de-repeticao-em-shell-scripting/">Como usar laços de repetição em Shell Scripting</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Laços de repetição em Shell Scripting</h1>
<p>Em Shell Scripting, os laços de repetição são estruturas que permitem executar uma série de comandos várias vezes. Os loops ajudam a automatizar tarefas repetitivas, iterando sobre listas, variáveis, comandos e arquivos. O Bash oferece algumas estruturas de repetição essenciais: for, while, e until.</p>
<p>Vamos explorar cada uma, com exemplos práticos e exercícios ao final.</p>
<h2>O laço for em shell scripting</h2>
<p>O laço for é usado para percorrer uma lista de itens, como um conjunto de números, strings ou até mesmo arquivos. Ele executa o conjunto de comandos uma vez para cada item na lista.</p>
<h3>Sintaxe básica do laço for</h3>
<pre><span style="color: #800080;"><strong>for item in lista; do</strong></span>
<span style="color: #800080;"><strong>   Comandos a serem executados</strong></span>
<span style="color: #800080;"><strong>done</strong></span></pre>
<p><strong>Exemplo 1: Laço for simples</strong></p>
<p>Esse exemplo exibe uma mensagem para cada nome da lista.</p>
<pre><strong>#!/bin/bash</strong>
<strong>for nome in Fábio Marcos Bruno Robson; do</strong>
<strong>  echo "Olá, $nome!"</strong>
<strong>done</strong></pre>
<p>Saída:</p>
<pre><strong>Olá, Fábio!</strong>
<strong>Olá, Marcos!</strong>
<strong>Olá, Bruno!</strong>
<strong>Olá Robson!</strong></pre>
<p><strong>Exemplo 2: Laço for com intervalo de números</strong></p>
<p>Podemos definir um intervalo de números e iterar sobre ele:</p>
<pre><strong>#!/bin/bash</strong>
<strong>for i in {1..5}; do</strong>
<strong>echo "$i"</strong>
<strong>done</strong></pre>
<p>Saída:</p>
<pre><strong>1</strong>
<strong>2</strong>
<strong>3</strong>
<strong>4</strong>
<strong>5</strong></pre>
<p><strong>Exemplo 3: Loop for sobre arquivos em um diretório</strong></p>
<p>Este exemplo percorre todos os arquivos .txt em um diretório e exibe o nome de cada arquivo.</p>
<pre><strong>#!/bin/bash</strong>
<strong>for arquivo in *.txt; do</strong>
<strong>echo "Encontrado arquivo: $arquivo"</strong>
<strong>done</strong></pre>
<h2>O laço while em shell scripting</h2>
<p>O laço while repete os comandos definidos em seu corpo enquanto uma condição testada for verdadeira. Ele é útil quando a quantidade de iterações não é definida e depende de uma condição.</p>
<h3>Sintaxe básica do while</h3>
<pre><span style="color: #800080;"><strong>while [ condição ]; do</strong></span>
<span style="color: #800080;"><strong>    Comandos a serem executados</strong></span>
<span style="color: #800080;"><strong>done</strong></span></pre>
<p>Vejamos alguns exemplos do loop while em scripts do shell.</p>
<p><strong>Exemplo 1: Loop while simples</strong></p>
<p>Exibir no terminal a sequência de números de 1 a 5:</p>
<pre><strong>#!/bin/bash</strong>
<strong>contador=1</strong>
<strong>while [ $contador -le 5 ]; do</strong>
<strong>  echo "$contador"</strong>
<strong>  contador=$((contador + 1))</strong>
<strong>done</strong></pre>
<p>Saída:</p>
<pre><span style="color: #000000;"><strong>1</strong></span>
<span style="color: #000000;"><strong>2</strong></span>
<span style="color: #000000;"><strong>3</strong></span>
<span style="color: #000000;"><strong>4</strong></span>
<span style="color: #000000;"><strong>5</strong></span></pre>
<p><strong>Exemplo 2: Ler valores do terminal de forma sequencial.</strong></p>
<p>O script a seguir solicita que o usuário digite um número no terminal. Ele repete a solicitação até que o usuário entre com o valor 0, momento em que o loop termina.</p>
<pre><strong>#!/bin/bash</strong>
<strong># Inicializar com um valor diferente de 0 para entrar no loop</strong>
<strong>numero=-1</strong>
<strong>while [ $numero -ne 0 ]; do</strong>
<strong>  read -p "Digite um número (0 para sair): " numero</strong>
<strong>  echo "Você digitou: $numero"</strong>
<strong>done</strong>
<strong>echo "Fim do laço. Você digitou 0."</strong></pre>
<h2>O laço until em shell scripting</h2>
<p>O laço until é semelhante ao laço while, mas ele repete os comandos enquanto uma condição for falsa, e para a execução quando a condição se torna verdadeira.</p>
<h3>Sintaxe básica do until</h3>
<pre><span style="color: #800080;"><strong>until [ condição ]; do</strong></span>
<span style="color: #800080;"><strong>    Comandos a serem executados</strong></span>
<span style="color: #800080;"><strong>done</strong></span></pre>
<p>Vejamos alguns exemplos.</p>
<p><strong>Exemplo 1: Loop until simples</strong></p>
<p>Este exemplo incrementa um contador até que ele atinja 5:</p>
<pre><strong>#!/bin/bash</strong>
<strong>contador=1</strong>
<strong>until [ $contador -gt 5 ]; do</strong>
<strong>  echo "$contador"</strong>
<strong>  contador=$((contador + 1))</strong>
<strong>done
echo "Sequência terminada."</strong></pre>
<p>Saída:</p>
<pre><span style="color: #000000;"><strong>1</strong></span>
<span style="color: #000000;"><strong>2</strong></span>
<span style="color: #000000;"><strong>3</strong></span>
<span style="color: #000000;"><strong>4</strong></span>
<span style="color: #000000;"><strong>5
Sequência terminada.</strong></span></pre>
<h2>Comandos de controle de loop</h2>
<p>Existem comandos de controle que podem ser usados para manipular o comportamento de um loop:</p>
<ul>
<li><strong>break</strong>: Sai do loop imediatamente.</li>
<li><strong>continue</strong>: Pula a iteração atual e vai para a próxima.</li>
</ul>
<p>Vejamos como usá-los em scripts.</p>
<p><strong>Exemplo: Uso de break</strong></p>
<p>Este exemplo usa break para sair do loop se o contador atingir 3.</p>
<pre><strong>#!/bin/bash</strong>
<strong>for i in {1..5}; do</strong>
<strong>  if [ $i -eq 3 ]; then</strong>
<strong>    echo "Saindo do loop no número $i"</strong>
<strong>    break</strong>
<strong>  fi</strong>
<strong>  echo "Número: $i"</strong>
<strong>done</strong></pre>
<p>Saída:</p>
<pre><span style="color: #000000;"><strong>Número: 1</strong></span>
<span style="color: #000000;"><strong>Número: 2</strong></span>
<span style="color: #000000;"><strong>Saindo do loop no número 3</strong></span></pre>
<p><strong>Exemplo: Uso de continue</strong></p>
<p>Este exemplo usa continue para pular a exibição do número 3.</p>
<pre><strong>#!/bin/bash</strong>
<strong>for i in {1..5}; do</strong>
<strong>  if [ $i -eq 3 ]; then</strong>
<strong>    continue</strong>
<strong>  fi</strong>
<strong>  echo "Número: $i"</strong>
<strong>done</strong></pre>
<p>Saída:</p>
<pre><span style="color: #000000;"><strong>Número: 1</strong></span>
<span style="color: #000000;"><strong>Número: 2</strong></span>
<span style="color: #000000;"><strong>Número: 4</strong></span>
<span style="color: #000000;"><strong>Número: 5</strong></span></pre>
<p>Excelente. Vamos propor agora alguns exercícios para você treinar o uso de laços de repetição em Shell Scripting. Resoluções sugeridas se encontram logo após a lista de exercícios.</p>
<h2>Exercícios práticos com laços de repetição</h2>
<ol>
<li>Crie um script que exiba uma contagem regressiva de 10 a 1 usando um loop for.</li>
<li>Use um loop while para somar os números de 1 a 100 e exibir o resultado total.</li>
<li>Escreva um script que use o loop for para percorrer arquivos .txt em um diretório e exiba o nome de cada arquivo encontrado.</li>
<li>Use um loop until para solicitar uma senha até que o usuário digite a senha correta (&#8220;1234&#8221;).</li>
<li>Crie um loop for que percorra os números de 1 a 10, pulando o número 5 e saindo do loop quando chegar ao número 8.</li>
</ol>
<h3>Resolução dos exercícios</h3>
<p><strong>Exercício 1</strong></p>
<pre><strong>#!/bin/bash</strong>
<strong>for i in {10..1}; do</strong>
<strong>  echo "Contagem regressiva: $i"</strong>
<strong>done</strong></pre>
<p><strong>Exercício 2</strong></p>
<pre><strong>#!/bin/bash</strong>
<strong>soma=0</strong>
<strong>contador=1</strong>
<strong>while [ $contador -le 100 ]; do</strong>
<strong>  soma=$((soma + contador))</strong>
<strong>  contador=$((contador + 1))</strong>
<strong>done</strong>
<strong>echo "A soma de 1 a 100 é: $soma"</strong></pre>
<p><strong>Exercício 3</strong></p>
<pre><strong>#!/bin/bash</strong>
<strong>for arquivo in *.txt; do</strong>
<strong>  echo "Arquivo encontrado: $arquivo"</strong>
<strong>done</strong></pre>
<p><strong>Exercício 4</strong></p>
<pre><strong>#!/bin/bash</strong>
<strong>senha=""</strong>
<strong>until [ "$senha" == "1234" ]; do</strong>
<strong>  read -sp "Digite a senha: " senha</strong>
<strong>  echo</strong>
<strong>done</strong>
<strong>echo "Senha correta!"</strong></pre>
<p>#Exercício 5: Usar break e continue em um loop</p>
<pre><strong>#!/bin/bash</strong>
<strong>for i in {1..10}; do</strong>
<strong>  if [ $i -eq 5 ]; then</strong>
<strong>    continue</strong>
<strong>  fi</strong>
<strong>  if [ $i -eq 8 ]; then</strong>
<strong>    break</strong>
<strong>  fi</strong>
<strong>  echo "Número: $i"</strong>
<strong>done</strong></pre>
<h2>Conclusão</h2>
<p>Os laços de repetição em Shell Scripting permitem criar fluxos de trabalho eficientes para manipular dados, arquivos e outros elementos de forma automatizada.</p>
<p>Aprender a usar for, while e until com comandos de controle como break e continue aumenta a flexibilidade e o controle que temos sobre o código, permitindo resolver problemas de forma mais simples e eficiente.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/como-usar-lacos-de-repeticao-em-shell-scripting/">Como usar laços de repetição em Shell Scripting</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/como-usar-lacos-de-repeticao-em-shell-scripting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como criar menus com o comando SELECT em Shell Script</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/como-criar-menus-com-o-comando-select-em-shell-script/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/como-criar-menus-com-o-comando-select-em-shell-script/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 26 May 2023 11:10:33 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19431</guid>

					<description><![CDATA[<p>Criar menus com Select em Shell Script Neste tutorial mostro como podemos usar o comando SELECT no Linux para criar menus interativos em Shell Script para que o usuário possa ver e escolher uma opção específica em uma lista, que executará uma função programada qualquer. Este comando se trata de uma construção de loop que exibe um menu numerado e aguarda a seleção do usuário para executar um código especificado. Sintaxe A sintaxe básica do comando SELECT é a seguinte: select ITEM in [LISTA] do [COMANDOS] done Onde LISTA pode ser uma sequência de strings separadas por espaços, a saída de um comando, um intervalo numérico, um array, etc. Podemos criar um prompt personalizado para o menu select usando a variável de ambiente PS3. Quando o bloco select é executado, cada item da lista é mostrado na tela, precedido por um número sequencial de identificação (&#8220;número do item&#8221;). Quando o usuário digita um desses números (&#8220;escolhe um item&#8221;), esse valor é armazenado na variável REPLY, e o valor da variável ITEM recebe o item. Um bloco de código pode ser associado a cada item que for escolhido, e será executado nesse momento. O select então realiza um loop e exibe [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/como-criar-menus-com-o-comando-select-em-shell-script/">Como criar menus com o comando SELECT em Shell Script</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Criar menus com Select em Shell Script</h2>
<p>Neste tutorial mostro como podemos usar o comando SELECT no Linux para criar menus interativos em Shell Script para que o usuário possa ver e escolher uma opção específica em uma lista, que executará uma função programada qualquer.</p>
<p>Este comando se trata de uma construção de loop que exibe um menu numerado e aguarda a seleção do usuário para executar um código especificado.</p>
<h3>Sintaxe</h3>
<p>A sintaxe básica do comando SELECT é a seguinte:</p>
<pre><strong>select ITEM in [LISTA]</strong>
<strong>do</strong>
<strong>  [COMANDOS]</strong>
<strong>done</strong></pre>
<p>Onde LISTA pode ser uma sequência de strings separadas por espaços, a saída de um comando, um intervalo numérico, um array, etc.</p>
<p>Podemos criar um prompt personalizado para o menu select usando a variável de ambiente <strong>PS3</strong>.</p>
<p>Quando o bloco select é executado, cada item da lista é mostrado na tela, precedido por um número sequencial de identificação (&#8220;número do item&#8221;).</p>
<p>Quando o usuário digita um desses números (&#8220;escolhe um item&#8221;), esse valor é armazenado na variável REPLY, e o valor da variável ITEM recebe o item.</p>
<p>Um bloco de código pode ser associado a cada item que for escolhido, e será executado nesse momento. O select então realiza um loop e exibe novamente o menu, até que um comando break seja executado, encerrando o processo.</p>
<h3>Exemplos</h3>
<p>Vejamos um exemplo simples.</p>
<p><strong>Exemplo 01</strong></p>
<pre><strong>#!/bin/bash

</strong><strong>PS3="Escolha um número: "

</strong><strong>select autor in Asimov Clarke Herbert 'H. G. Wells' Tolkien Verne</strong>
<strong>do</strong>
<strong>  echo "Autor escolhido: $autor"</strong>
<strong>  echo "Número digitado: $REPLY"</strong>
<strong>done</strong></pre>
<p>Saída:</p>
<p><img decoding="async" class="aligncenter wp-image-19432" title="Menu com Comando SELECT em shell scripting - exemplo 01" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/select-exemplo-1-shell-script.jpg" alt="Menu com Comando SELECT em shell scripting - exemplo 01" width="449" height="244" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/select-exemplo-1-shell-script.jpg 477w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/05/select-exemplo-1-shell-script-420x228.jpg 420w" sizes="(max-width: 449px) 100vw, 449px" /></p>
<p>Este script irá exibir um menu que consiste nos nomes de autores com um número associado e o prompt definido na variável PS3. Quando o usuário digita um dos números, será impresso na tela o autor correspondente e seu número respectivo.</p>
<p>Note que o autor H. G. Wells foi colocado entre aspas, pois como o espaço é usado como separador de itens pelo select, seu nome (que contém espaços) seria interpretado de forma incorreta ao exibir o menu.</p>
<p>Para encerrar esse programa é necessário pressionar Ctrl+C, pois ainda não programamos uma rotina de saída com a instrução break, o que faremos no próximo exemplo.</p>
<p><strong>Exemplo 02</strong></p>
<p>No exemplo a seguir vamos criar um menu com opções de gerenciamento de pacotes que o usuário pode escolher, incluindo atualização das listas de repositórios, instalação de pacotes no sistema e manutenção do cache:</p>
<pre><strong>PS3="O que deseja fazer? "</strong>
<strong>select opcao in Atualizar Instalar 'Ver Cache' 'Limpar Cache' Sair</strong>
<strong>do</strong>
<strong>  case $opcao in</strong>
<strong>    Atualizar)</strong>
<strong>      sudo apt update</strong>
<strong>      ;;</strong>
<strong>    Instalar)</strong>
<strong>      read -p "Qual pacote deseja instalar? " pacote</strong>
<strong>      sudo apt install $pacote</strong>
<strong>    ;;</strong>
<strong>    'Ver Cache')</strong>
<strong>      ls /var/cache/apt/archives/</strong>
<strong>      ;;</strong>
<strong>    'Limpar Cache')</strong>
<strong>      sudo apt clean</strong>
<strong>      ;;</strong>
<strong>    Sair)</strong>
<strong>      break</strong>
<strong>      ;;</strong>
<strong>    *) </strong>
<strong>      echo "A opção $REPLY é inválida"</strong>
<strong>    ;;</strong>
<strong>  esac</strong>
<strong>done</strong></pre>
<p>Neste exemplo usamos uma estrutura CASE para programar cada caso que o usuário pode vir a escolher, e incluímos uma opção para sair do menu e uma opção para tratar a escolha de um valor inválido, usando a variável de ambiente $REPLY.</p>
<h3>Conclusão</h3>
<p>Neste tutorial mostrei como usar, de forma simples, o comando &#8220;select&#8221; para criar menus interativos em Shell Script. Outras opções existem para esta tarefa, como as caixas de diálogo &#8220;<a href="http://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-dialog/">dialog</a>&#8221; e &#8220;<a href="http://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-whiptail-no-linux-27/">whiptail</a>&#8220;, e o emprego de bibliotecas externas como &#8220;ncurses&#8221;, &#8220;newt&#8221; e &#8220;<a href="http://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/">zenity</a>&#8220;, entre outras, que são abordadas em outros tutoriais aqui no site.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/como-criar-menus-com-o-comando-select-em-shell-script/">Como criar menus com o comando SELECT em Shell Script</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/como-criar-menus-com-o-comando-select-em-shell-script/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Formatar e exibir texto com o comando printf no terminal e em scripts</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/formatar-e-exibir-texto-com-o-comando-printf-no-terminal-e-em-scripts/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/formatar-e-exibir-texto-com-o-comando-printf-no-terminal-e-em-scripts/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 17 May 2023 17:50:25 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19387</guid>

					<description><![CDATA[<p>Formatar e exibir texto com o comando printf em Shell Scripting e no Terminal do Linux O comando printf  no Linux é uma ferramenta interna (built-in) do shell Bash e de outros como Ksh e Zsh que permite formatar e exibir uma saída de texto. Este comando é útil para exibir informações em um formato específico no terminal, como por exemplo tabelas e relatórios. Sintaxe A sintaxe básica do comando &#8220;printf&#8221; é a seguinte: $ printf FORMATO [ARGUMENTOS] onde FORMATO é a string de formato que especifica como a saída será exibida, podendo conter caracteres normais a serem impressos na saída, caracteres de escape, flags e especificações de conversão, para descrição do formato da saída. Os ARGUMENTOS (opcionais) são passados para os especificadores de formato e correspondem aos valores que serão exibidos de acordo com o formato especificado. Exemplo: $ printf "Dia da semana: %s\nHorário: %s\n" Sábado 11:00 Saída: Dia da semana: Sábado Horário: 11:00 Neste exemplo, o formato é a string Dia da semana: %s\nHorário: %s\n ao passo que &#8220;Sábado&#8221; e &#8220;11:00&#8221; são os argumentos. A string de formato possui caracteres de quebra de linha \n e dois especificadores de formato %s, que são substituídos pelos argumentos. Caracteres de [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/formatar-e-exibir-texto-com-o-comando-printf-no-terminal-e-em-scripts/">Formatar e exibir texto com o comando printf no terminal e em scripts</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Formatar e exibir texto com o comando printf em Shell Scripting e no Terminal do Linux</h2>
<p>O comando <em><strong>printf</strong></em>  no Linux é uma ferramenta interna (<em>built-in</em>) do <a href="http://www.bosontreinamentos.com.br/curso-de-shell-scripting/">shell Bash</a> e de outros como Ksh e Zsh que permite formatar e exibir uma saída de texto.</p>
<p>Este comando é útil para exibir informações em um formato específico no terminal, como por exemplo tabelas e relatórios.</p>
<h3>Sintaxe</h3>
<p>A sintaxe básica do comando &#8220;printf&#8221; é a seguinte:</p>
<pre><span style="color: #800080;"><strong>$ printf FORMATO [ARGUMENTOS]</strong></span></pre>
<p>onde <strong>FORMATO</strong> é a string de formato que especifica como a saída será exibida, podendo conter caracteres normais a serem impressos na saída, caracteres de escape, flags e especificações de conversão, para descrição do formato da saída.</p>
<p>Os <strong>ARGUMENTOS</strong> (opcionais) são passados para os especificadores de formato e correspondem aos valores que serão exibidos de acordo com o formato especificado.</p>
<p>Exemplo:</p>
<pre><strong>$ printf "Dia da semana: %s\nHorário: %s\n" Sábado 11:00</strong></pre>
<p>Saída:</p>
<pre><strong><span style="color: #ff6600;">Dia da semana: Sábado</span></strong>
<strong><span style="color: #ff6600;">Horário: 11:00</span></strong></pre>
<p>Neste exemplo, o formato é a string <strong>Dia da semana: %s\nHorário: %s\n</strong> ao passo que <strong>&#8220;Sábado&#8221;</strong> e <strong>&#8220;11:00&#8221;</strong> são os argumentos. A string de formato possui caracteres de quebra de linha \n e dois especificadores de formato %s, que são substituídos pelos argumentos.</p>
<h3>Caracteres de Escape</h3>
<p>Os caracteres de escape mais comuns usados com printf são:</p>
<ul>
<li>\\ &#8211; Mostra um caractere de barra invertida</li>
<li>\b &#8211; Backspace</li>
<li>\n &#8211; Nova linha (quebra de linha)</li>
<li>\r &#8211; Retorno de carro</li>
<li>\t &#8211; Tabulação horizontal</li>
<li>\v &#8211; Tabulação vertical</li>
</ul>
<h3>Especificações de formato</h3>
<p>Uma especificação de formato tem a seguinte sintaxe:</p>
<pre><span style="color: #800080;"><strong>%[flags][largura][.precisão]especificador</strong></span></pre>
<p>O especificador é um caractere que especifica como deve ser feita a interpretação do argumento correspondente. Este é um caractere obrigatório, sempre posicionado após os outros campos (diretivas, que são opcionais).</p>
<p>A seguir temos uma lista com alguns tipos de especificadores de conversão:</p>
<ul>
<li>%d &#8211; Imprime o argumento no formato de um inteiro decimal com sinal</li>
<li>%i &#8211; Idem ao %d</li>
<li>%u &#8211; Formato de um inteiro decimal sem sinal</li>
<li>%o &#8211; Formato de um inteiro octal sem sinal</li>
<li>%x &#8211; Formato de um inteiro hexadecimal sem sinal, com letras minúsculas</li>
<li>%X &#8211; Idem %x, porém com letras maiúsculas</li>
<li>%e &#8211; Formato de ponto flutuante em notação exponencial, com letras minúsculas</li>
<li>%E &#8211; Idem %e, porém com letras maiúsculas</li>
<li>%g, %G &#8211; Imprime o argumento com um número de ponto flutuante ou em notação exponencial, o que for mais adequado dependendo do valor e precisão fornecidos. $g imprime letras minúsculas e %G, maiúsculas.</li>
<li>%c &#8211; Imprime o argumento com um caractere único</li>
<li>%f &#8211; Formato de número de ponto flutuante.</li>
<li>%s &#8211; Imprime o argumento como string</li>
<li>%% &#8211; Imprime o símbolo literal %</li>
</ul>
<p>Por exemplo, podemos imprimir um valor numérico em <a href="http://www.bosontreinamentos.com.br/eletronica/eletronica-digital/curso-de-eletronica-digital-sistemas-de-numeracao/">sistemas de numeração</a> diferentes da seguinte forma:</p>
<pre><strong>$ printf "Decimal: %d\nHex: %x\nOctal: %o\n" 32 32 32</strong></pre>
<p>Saída:</p>
<pre><span style="color: #ff6600;"><strong>Decimal: 32</strong></span>
<span style="color: #ff6600;"><strong>Hex: 20</strong></span>
<span style="color: #ff6600;"><strong>Octal: 40</strong></span></pre>
<p>No exemplo o número inteiro 32 é impresso nos sistemas decimal, hexadecimal e octal, respectivamente, pelo uso dos especificadores %d, %x e %o.</p>
<h3>Diretiva de <em>flags</em></h3>
<p>A diretiva de flags (opcional) é empregada para realizar o ajuste de alinhamento, prefixos, preenchimento de zeros, etc.</p>
<p>Algumas das flags mais comuns incluem:</p>
<ul>
<li>&#8211; Alinha o texto impresso à esquerda dentro do campo &#8211; por padrão, o texto é alinhado à direita.</li>
<li>+ Precede os números exibidos com um sinal de + (números negativos são precedidos automaticamente por um sinal de -)</li>
<li>0 Preenche com zeros em vez de espaços em branco</li>
</ul>
<h3>Diretiva <em>largura</em></h3>
<p>A diretiva de largura é posicionada após qualquer caractere de flag, e especifica o número mínimo de caracteres que devem resultar na conversão.</p>
<p>Se a string de saída for menor que a largura especificada, será automaticamente preenchida com espaços em branco à esquerda. Vejamos um exemplo:</p>
<pre><strong>$ printf "%15s %d\n" Fábio 45</strong></pre>
<p>Saída:</p>
<pre><span style="color: #ff6600;"><strong>            Fábio 45</strong></span></pre>
<p>Neste exemplo %15s significa que a largura deve ser de 15 caracteres. Como os valores &#8220;Fábio&#8221; e 305 possuem menos de 15 caracteres quando combinados, espaços à esquerda serão adicionados até completar essa largura ao exibir o resultado.</p>
<p>A saída é alinhada à direita por padrão; podemos alinhá-la á esquerda com o flag &#8211; (<strong>%-15s</strong>).</p>
<h3>Diretiva de <em>precisão</em></h3>
<p>Esse modificador consiste em um ponto (.) seguido por um número inteiro positivo ou um asterisco, usados para ajustar a quantidade de caracteres numéricos, de string, ou a quantidade de casas decimais a serem mostradas.</p>
<p>A precisão funciona da seguinte forma:</p>
<ul>
<li>Se o tipo de conversão for um número inteiro, a precisão irá especificar a quantidade mínima de dígitos a serem impressos, acrescentando zeros à direita se necessário.</li>
<li>Caso o tipo de conversão seja um número de ponto flutuante, a precisão irá especificar a quantidade de dígitos após o caractere de separação decimal (ou seja, as casas decimais). A precisão padrão é 6.</li>
<li>E se o tipo da conversão for uma string, a precisão irá especificar o número máximo de caracteres a serem impressos. caso o número de caracteres no argumento seja maior que a precisão, a string será truncada (cortada).</li>
</ul>
<p>Vejamos um exemplo:</p>
<pre><strong>$ printf "O valor de pi é %.4f \n" 3,14159265359</strong></pre>
<p>Saída:</p>
<pre><span style="color: #ff6600;"><strong>O valor de pi é 3,1416</strong></span></pre>
<p>Note que o valor foi arredondado para 3,1416.</p>
<p>Se usarmos um asterisco, o valor da precisão será fornecido por um argumento de precisão que precede o argumento a ser formatado. Modificando o exemplo anterior teríamos:</p>
<pre><strong>$ printf "O valor de pi é %.*f" 4 3,14159265359</strong></pre>
<p>Saída:</p>
<pre><span style="color: #ff6600;"><strong>O valor de pi é 3.1416</strong></span></pre>
<h3>Exemplos de uso do comando printf em scripts</h3>
<p>Vejamos agora exemplos de como usar o comando printf em scripts do shell Bash, para formatar a saída de dados exibida no terminal.</p>
<h4>Exemplo 01</h4>
<pre><span style="color: #339966;"><strong>#!/bin/bash</strong></span>
<strong>printf "%s" "Qual seu nome completo?"</strong>
<strong>IFS= read -r nome_completo</strong>
<strong>printf "%s" "Qual sua idade?"</strong>
<strong>read idade</strong>
<strong>printf "Nome: %s\nIdade: %d\n" $nome_completo $idade</strong></pre>
<p>Neste exemplo, o comando &#8220;printf&#8221; é usado para formatar a saída do script com o nome e a idade fornecidos por uma pessoa. A string de formato especifica que o primeiro argumento deve ser exibido como uma string (&#8220;%s&#8221;) e o segundo como um número inteiro (&#8220;%d&#8221;).</p>
<p>No exemplo acima, o IFS= redefine a variável IFS para que nenhum caractere seja interpretado como separador de campo. Em seguida, o comando read é usado para ler a entrada do usuário e armazená-la na variável &#8220;nome_completo&#8221;.</p>
<h4>Exemplo 02</h4>
<p>Vejamos outro exemplo de uso do comando &#8220;printf&#8221;:</p>
<pre><span style="color: #339966;"><strong>#!/bin/bash</strong></span>
<strong>printf "%-15s %5s\n" "Nome" "Idade"</strong>
<strong>printf "%-15s %5d\n" "João" 30</strong>
<strong>printf "%-15s %5d\n" "Maria" 25</strong></pre>
<p>Neste exemplo, o comando &#8220;printf&#8221; é usado para exibir uma tabela com o nome e a idade de duas pessoas. A string de formato especifica que o primeiro argumento deve ser exibido como uma string com largura de 15 caracteres e alinhado à esquerda (&#8220;<strong>%15s</strong>&#8220;) e o segundo como um número inteiro com largura de 5 caracteres e alinhado à direita (&#8220;<strong>%5d</strong>&#8220;).</p>
<h3>Conclusão</h3>
<p>O comando <strong>printf</strong> pode ser combinado com outras ferramentas do Bash Shell (e outros shells) para criar scripts mais avançados, como loops e condicionais. O importante é entender como o comando funciona e como ele pode ser usado para formatar e exibir uma saída de texto.</p>
<p><a href="http://www.bosontreinamentos.com.br/todos-os-posts-da-boson-treinamentos-em-ordem-cronologica/">Lista com todos os artigos da Bóson Treinamentos</a></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/formatar-e-exibir-texto-com-o-comando-printf-no-terminal-e-em-scripts/">Formatar e exibir texto com o comando printf no terminal e em scripts</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/formatar-e-exibir-texto-com-o-comando-printf-no-terminal-e-em-scripts/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ler entrada de dados com comando read em Shell Scripting</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/ler-entrada-de-dados-com-comando-read-em-shell-scripting/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/ler-entrada-de-dados-com-comando-read-em-shell-scripting/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 05 May 2023 13:18:56 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=19379</guid>

					<description><![CDATA[<p>Ler entrada de dados com comando read em Shell Scripting O comando read é uma ferramenta do Bash Shell Scripting que permite ao script ler uma entrada de dados do teclado digitada pelo usuário e armazená-la em uma variável para processamento. Esse comando é útil para solicitar ao usuário informações que precisam ser fornecidas durante a execução de um script, como um nome de arquivo, senha ou número de identificação, entre outros. Sintaxe A sintaxe básica do comando read é a seguinte: read [opções] nome_variavel Onde &#8220;opções&#8221; são as opções do comando e &#8220;nome_variavel&#8221; é o nome da variável na qual o valor digitado pelo usuário será armazenado. A seguir, são listadas algumas opções comuns do comando read: -p: permite especificar uma mensagem para ser exibida antes da entrada de dados (string de prompt). -n: permite limitar o número de caracteres que podem ser digitados, ou seja, define o número máximo de caracteres que o comando read lerá. -s: permite ocultar a entrada de dados, como ao digitar uma senha ou outras informações confidenciais. -r: Impede que o comando read interprete caracteres de escape (como &#8221;, &#8216;\n&#8217; e &#8216;\t&#8217;) como comandos especiais. Útil quando você deseja ler arquivos de texto [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/ler-entrada-de-dados-com-comando-read-em-shell-scripting/">Ler entrada de dados com comando read em Shell Scripting</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Ler entrada de dados com comando read em Shell Scripting</h2>
<p>O comando <strong>read</strong> é uma ferramenta do <a href="http://www.bosontreinamentos.com.br/curso-de-shell-scripting/">Bash Shell Scripting</a> que permite ao script ler uma entrada de dados do teclado digitada pelo usuário e armazená-la em uma variável para processamento.</p>
<p>Esse comando é útil para solicitar ao usuário informações que precisam ser fornecidas durante a execução de um script, como um nome de arquivo, senha ou número de identificação, entre outros.</p>
<h3>Sintaxe</h3>
<p>A sintaxe básica do comando read é a seguinte:</p>
<pre><span style="color: #800080;"><strong>read [opções] nome_variavel</strong></span></pre>
<p>Onde &#8220;opções&#8221; são as opções do comando e &#8220;nome_variavel&#8221; é o nome da variável na qual o valor digitado pelo usuário será armazenado.</p>
<p>A seguir, são listadas algumas opções comuns do comando read:</p>
<ul>
<li><strong>-p</strong>: permite especificar uma mensagem para ser exibida antes da entrada de dados (string de prompt).</li>
<li><strong>-n</strong>: permite limitar o número de caracteres que podem ser digitados, ou seja, define o número máximo de caracteres que o comando read lerá.</li>
<li><strong>-s</strong>: permite ocultar a entrada de dados, como ao digitar uma senha ou outras informações confidenciais.</li>
<li><strong>-r</strong>: Impede que o comando read interprete caracteres de escape (como &#8221;, &#8216;\n&#8217; e &#8216;\t&#8217;) como comandos especiais. Útil quando você deseja ler arquivos de texto brutos.</li>
<li><strong>-a</strong>: Lê a entrada do usuário em um array.</li>
</ul>
<h3>Exemplos de uso do comando read</h3>
<p>Vejamos alguns exemplos de uso do comando read em scripts simples do shell.</p>
<p><strong>Exemplo 1.</strong> Vamos criar um arquivo de texto de nome &#8220;teste.sh&#8221; e digitar o código a seguir neste arquivo:</p>
<pre><strong>#!/bin/bash</strong>
<strong>echo "Qual é o seu nome?"</strong>
<strong>read nome</strong>
<strong>echo "Olá, $nome!"</strong></pre>
<p>Neste exemplo, o usuário é solicitado a digitar seu nome e a entrada é armazenada na variável &#8220;nome&#8221;. Em seguida, o script exibe uma mensagem de boas-vindas com o nome fornecido.</p>
<p>Para testar, salve e feche o arquivo, e dê permissão de execução ao arquivo no terminal:</p>
<pre><strong>$ chmod u+x teste.sh</strong></pre>
<p>E então rode o script:</p>
<pre><strong>$ ./teste.sh</strong></pre>
<p><strong>Exemplo 2.</strong> Também é possível usar o comando read para solicitar várias informações de uma vez só, separando as variáveis com espaços ou vírgulas. Vamos alterar o script teste.sh para pedir o primeiro nome e a idade do usuário:</p>
<pre><strong>#!/bin/bash</strong>
<strong>read -p "Digite seu primeiro nome e idade: " nome idade</strong>
<strong>echo "Seu nome é $nome e você tem $idade anos."</strong></pre>
<p>Neste exemplo, o usuário é solicitado a digitar seu nome e sua idade, em sequência (pressionando enter somente no final) que são armazenados nas variáveis correspondentes.<br />
Em seguida, o script exibe uma mensagem com as informações fornecidas pelo usuário.</p>
<p><strong>Exemplo 3.</strong> Podemos ler dados sensíveis no terminal, como senhas, sem que sejam exibidas durante a digitação. Para isso usamos a opção -s do comando read, como mostra o exemplo a seguir:</p>
<pre><strong>#!/bin/bash</strong>
<strong>read -p "Digite seu nome de usuário: " nome</strong>
<strong>read -s -p "Entre com sua senha: " senha</strong>
<strong>echo -e "\nBem-vindo ao sistema, $nome!."</strong>
<strong>echo -e "\nA senha escolhida foi $senha."</strong></pre>
<p><strong>Exemplo 4.</strong> Por padrão, o comando read em shell scripting interpreta um espaço como um separador de campo e, portanto, interrompe a leitura da string assim que encontrar um espaço.</p>
<p>Para ler uma string que contém espaços, é necessário ajustar o separador de campo para que o comando read reconheça a entrada do usuário como uma única string. Podemos fazer isso usando a variável de ambiente <strong>IFS</strong> (<em>Internal Field Separator</em>) do shell:</p>
<pre><strong>echo "Digite seu nome completo:"</strong>
<strong>IFS= read -r nome_completo</strong>
<strong>echo "Seu nome completo é $nome_completo"</strong></pre>
<p>No exemplo acima, o IFS= redefine a variável IFS para que nenhum caractere seja interpretado como separador de campo. Em seguida, o comando read é usado para ler a entrada do usuário e armazená-la na variável &#8220;nome_completo&#8221;.</p>
<p>Finalmente, a string digitada pelo usuário é exibida na tela usando o comando echo.</p>
<p>Com isso, o comando read irá ler a entrada do usuário até que a tecla &#8220;Enter&#8221; seja pressionada, permitindo que o usuário digite seu nome completo, mesmo com espaços em branco.</p>
<h3>Conclusão</h3>
<p>O comando read pode ser combinado com outras ferramentas do shell Bash para criar scripts mais avançados, como loops e condicionais. O importante é entender como o comando funciona e como ele pode ser usado para interagir com o usuário.</p>
<p>Para saber mais sobre o comando read e conhecer todas as suas opções, consulte as páginas de manual do comando com <em><strong>man read</strong></em>.</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/ler-entrada-de-dados-com-comando-read-em-shell-scripting/">Ler entrada de dados com comando read em Shell Scripting</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/ler-entrada-de-dados-com-comando-read-em-shell-scripting/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>O que significa 3&gt;&#038;1 1&gt;&#038;2 2&gt;&#038;3 em um script do Shell no Linux?</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/o-que-significa-31-12-23-em-um-script-do-shell-no-linux/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/o-que-significa-31-12-23-em-um-script-do-shell-no-linux/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 20 Aug 2018 12:25:27 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=13112</guid>

					<description><![CDATA[<p>O que significa 3&#62;&#38;1 1&#62;&#38;2 2&#62;&#38;3?  Em muitos de nossos scripts temos utilizado a sequência de caracteres 3&#62;&#38;1 1&#62;&#38;2 2&#62;&#38;3. Mas o que significam esses caracteres exatamente, e quando devemos empregá-los? Bem, os números representam os descritores de arquivos (file descriptors), dos quais existem três padronizados no Linux: 0 &#8211; STDIN (a entrada padrão) 1 &#8211; STDOUT (a saída padrão) 2 &#8211; STDERR (o erro padrão) Os descritores de arquivos podem ser redirecionados para um arquivo, com o uso do símbolo &#62;, ou ainda para outro descritor de arquivo, com o uso de &#62;&#38;. Desta forma, temos três redirecionamentos ocorrendo no exemplo: 3&#62;&#38;1 &#8211; Cria um novo descritor de arquivos e o redireciona para a saída padrão (1) 1&#62;&#38;2 &#8211; Redireciona a saída padrão para o erro padrão (2) 2&#62;&#38;3 &#8211; Redireciona o erro padrão para o descritor criado, que agora irá redirecionar para a saída padrão. Portanto, se nosso script escrever algo no descritor 2, os dados serão redirecionados para o descritor 1, e vice-versa. Alguns comandos escrevem informações no descritor STDERR, e com o uso desses redirecionamentos podemos encaminhar os dados para a saída padrão, de modo que o usuário possa visualizá-los. Aqui temos um exemplo de uso em [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/o-que-significa-31-12-23-em-um-script-do-shell-no-linux/">O que significa 3&gt;&#038;1 1&gt;&#038;2 2&gt;&#038;3 em um script do Shell no Linux?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>O que significa 3&gt;&amp;1 1&gt;&amp;2 2&gt;&amp;3? </h2>
<p>Em muitos de nossos scripts temos utilizado a sequência de caracteres <strong>3&gt;&amp;1 1&gt;&amp;2 2&gt;&amp;3</strong>. Mas o que significam esses caracteres exatamente, e quando devemos empregá-los?</p>
<p>Bem, os números representam os <em><strong>descritores de arquivos</strong></em> (file descriptors), dos quais existem três padronizados no Linux:</p>
<ul>
<li>0 &#8211; STDIN (a entrada padrão)</li>
<li>1 &#8211; STDOUT (a saída padrão)</li>
<li>2 &#8211; STDERR (o erro padrão)</li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-13113 size-full" title="Descritores de arquivos no Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2018/08/descritores-arquivos-linux-shell.png" alt="Descritores de arquivos no Linux" width="299" height="121" /></p>
<p>Os descritores de arquivos podem ser redirecionados para um arquivo, com o uso do símbolo <strong>&gt;</strong>, ou ainda para outro descritor de arquivo, com o uso de <strong>&gt;&amp;</strong>.</p>
<p>Desta forma, temos três redirecionamentos ocorrendo no exemplo:</p>
<p><strong>3&gt;&amp;1</strong> &#8211; Cria um novo descritor de arquivos e o redireciona para a saída padrão (1)</p>
<p><strong>1&gt;&amp;2</strong> &#8211; Redireciona a saída padrão para o erro padrão (2)</p>
<p><strong>2&gt;&amp;3</strong> &#8211; Redireciona o erro padrão para o descritor criado, que agora irá redirecionar para a saída padrão.</p>
<p>Portanto, se nosso script escrever algo no descritor 2, os dados serão redirecionados para o descritor 1, e vice-versa. Alguns comandos escrevem informações no descritor <strong>STDERR</strong>, e com o uso desses redirecionamentos podemos encaminhar os dados para a saída padrão, de modo que o usuário possa visualizá-los.</p>
<p>Aqui temos um exemplo de uso em um script do shell: <a href="http://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-whiptail-no-linux-27/" target="_blank" rel="noopener"><strong>comando whiptail </strong></a>(veja o exemplo de número 6).</p>
<p>Você pode aprender mais sobre os redirecionamentos e os descritores de arquivos assistindo ao vídeo da Bóson Treinamentos a seguir:</p>
<p><iframe loading="lazy" src="https://www.youtube.com/embed/H9J_JG9oxl4" width="640" height="480" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/o-que-significa-31-12-23-em-um-script-do-shell-no-linux/">O que significa 3&gt;&#038;1 1&gt;&#038;2 2&gt;&#038;3 em um script do Shell no Linux?</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/o-que-significa-31-12-23-em-um-script-do-shell-no-linux/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Zenity &#8211; Exibindo caixas de diálogo com scripts do Shell no Linux</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 17 Oct 2016 13:26:35 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=8273</guid>

					<description><![CDATA[<p>Zenity &#8211; Exibindo caixas de diálogo com scripts do Shell O Zenity é um software que permite criar diversos tipos de caixas de diálogo simples para interação com os usuários em um ambiente Linux, que podem ser utilizadas em scripts do shell. Por exemplo, podemos criar um diálogo para obter informações do usuário, como uma data em um calendário ou um valor numérico em uma caixa de texto, ou ainda criar diálogos para exibir informações, como uma barra de progresso para mostrar o status de uma operação, ou caixas de aviso e de erro. O Zenity utiliza o GTK, conjunto de bibliotecas utilizado para a construção de interfaces gráficas. Por padrão, ele vem instalado na grande maioria das distribuições Linux, de modo que seja provável que o programa já esteja presente em sua distro. Verifique a presença do programa emitindo o comando  seguir no terminal: zenity --version Se o programa estiver instalado, será exibida a versão do programa. A versão mais recente é a 3.22.0 (na data de elaboração deste tutorial). Caso contrário, instale-o usando os seguintes comandos: Sistemas Debian / Ubuntu: sudo apt-get install zenity Sistemas Red Hat / CentOS: yum install zenity Sintaxe A sintaxe básica para uso do programa é a [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/">Zenity &#8211; Exibindo caixas de diálogo com scripts do Shell no Linux</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Zenity &#8211; Exibindo caixas de diálogo com scripts do Shell</h2>
<p>O <strong>Zenity</strong> é um software que permite criar diversos tipos de caixas de diálogo simples para interação com os usuários em um ambiente Linux, que podem ser utilizadas em scripts do shell.</p>
<p>Por exemplo, podemos criar um diálogo para obter informações do usuário, como uma data em um calendário ou um valor numérico em uma caixa de texto, ou ainda criar diálogos para exibir informações, como uma barra de progresso para mostrar o status de uma operação, ou caixas de aviso e de erro.</p>
<p>O Zenity utiliza o <a href="https://developer.gnome.org/gtk3/" target="_blank" rel="noopener"><strong>GTK</strong></a>, conjunto de bibliotecas utilizado para a construção de interfaces gráficas.</p>
<p>Por padrão, ele vem instalado na grande maioria das distribuições Linux, de modo que seja provável que o programa já esteja presente em sua distro. Verifique a presença do programa emitindo o comando  seguir no terminal:</p>
<pre><span style="color: #ff0000;"><strong>zenity --version</strong></span></pre>
<p>Se o programa estiver instalado, será exibida a versão do programa. A versão mais recente é a 3.22.0 (na data de elaboração deste tutorial).</p>
<p>Caso contrário, instale-o usando os seguintes comandos:</p>
<p>Sistemas Debian / Ubuntu:</p>
<pre><span style="color: #ff0000;"><strong>sudo apt-get install zenity</strong></span></pre>
<p>Sistemas Red Hat / CentOS:</p>
<pre><span style="color: #ff0000;"><strong>yum install zenity</strong></span></pre>
<h3>Sintaxe</h3>
<p>A sintaxe básica para uso do programa é a seguinte:</p>
<p><span style="color: #800080;"><strong>zenity [opções-comuns] [tipo-de-diálogo] [opções-específicas-do-diálogo]</strong></span></p>
<h3>Tipos de Caixas de Diálogo</h3>
<p>O Zenity permite criar os seguintes tipos de caixas de diálogo:</p>
<ul>
<li>Calendar</li>
<li>File selection</li>
<li>Forms</li>
<li>List</li>
<li>Notification icon</li>
<li>Message
<ul>
<li>Error</li>
<li>Information</li>
<li>Question</li>
<li>Warning</li>
</ul>
</li>
<li>Password entry</li>
<li>Progress</li>
<li>Text entry</li>
<li>Text information</li>
<li>Scale</li>
<li>Color selection</li>
</ul>
<h3>Códigos de saída</h3>
<p>Os seguintes códigos de saída são retornados ao executar o programa:</p>
<table style="height: 221px;" width="594">
<tbody>
<tr>
<td>Código de Saída</td>
<td>Descrição</td>
</tr>
<tr>
<td>0</td>
<td>O usuário pressionou os botões OK ou Fechar</td>
</tr>
<tr>
<td>1</td>
<td>O usuário pressionou Cancelar ou usou as funções da janela para fechar o diálogo</td>
</tr>
<tr>
<td>-1</td>
<td>Ocorreu um erro inesperado</td>
</tr>
<tr>
<td>5</td>
<td>A caixa de diálogo foi fechada porque ocorreu timeout (tempo esgotado)</td>
</tr>
</tbody>
</table>
<h3>Opções Comuns</h3>
<p>No Zenity, todas as caixas de diálogo suportam as seguintes opções gerais:</p>
<p>&#8211;title=title<br />
 Especifica o título da caixa de diálogo.<br />
 &#8211;window-icon=icon_path<br />
 Especifica o ícone que é exibido na janela da caixa de diálogo. Existem 4 tipos de ícones disponíveis      que podem ser selecionados usando-se as seguintes palavras-chave: &#8220;info&#8221;, &#8220;warning&#8221;, &#8220;question&#8221; e &#8220;error&#8221;.<br />
 &#8211;width=width<br />
 Especifica a largura caixa de diálogo.<br />
 &#8211;height=height<br />
 Especifica a altura caixa de diálogo.<br />
 &#8211;timeout=timeout<br />
 Especifica o timeout em segundos após o qual a caixa de diálogo é fechada.</p>
<h3>Outras opções</h3>
<p>&#8211;about<br />
 Mostra o diálogo Sobre o Zenity, o qual contém informações sobre a versão do Zenity, copyright e informações sobre os desenvolvedores do software.<br />
 &#8211;version<br />
 Mostra o número de versão do programa.</p>
<h3>Caixa de Diálogo File Selection (Seleção de Arquivos)</h3>
<p>Com esta caixa o usuário pode selecionar um arquivo a partir de um diretório, e o arquivo é retornado na saída padrão.<br />
 O modo padrão de operação do diálogo de seleção de arquivos é o modo open (abrir).</p>
<h4>Opções principais:</h4>
<p><strong>&#8211;filename=NOME_ARQUIVO</strong><br />
 Especifica o arquivo ou diretório a ser selecionado na caixa de seleção quando a caixa é exibida pela primeira vez</p>
<p><strong>&#8211;multiple</strong><br />
 Permite a seleção de múltiplos nomes de arquivo na caixa de diálogo de seleção</p>
<p><strong>&#8211;directory</strong><br />
 Permite apenas a seleção de diretórios na caixa de seleçãoo</p>
<p><strong>&#8211;save</strong><br />
 Permite configurar o diálogo de seleção de arquivos no modo Save (salvar)</p>
<p><strong>&#8211;separator=SEPARADOR</strong><br />
 Especificar a string que será utilizada para dividir a lista de nomes de arquivos retornada.</p>
<p><strong>&#8211;file-filter=FILTRO</strong><br />
 Permite usar um filtro para especificar o tipo de arquivos que deverá se exibido no diálogo</p>
<h3>Exemplos</h3>
<p>Vejamos alguns exemplos de uso do utilitário em scripts do shell:</p>
<p><strong>Exemplo 01</strong> &#8211; Caixa de diálogo de erro, contendo um botão OK (digitar o comando diretamente no terminal):</p>
<pre><span style="color: #ff0000;"><strong>zenity --title <span class="s2">"Problema detectado"</span>  --error --text<span class="o">=</span><span class="s2">"Arquivo requisitado inválido."</span></strong></span></pre>
<p><strong>Exemplo 02</strong> &#8211; Caixa de diálogo de texto. Crie um arquivo de texto e entre com os comandos a seguir. Logo após, salve o arquivo com o nome de teste-zenity.sh e dê permissão de execução ao script com o comando <strong>chmod 755 teste-zenity.sh:</strong></p>
<pre><span style="color: #339966;"><strong>#!/bin/bash</strong></span>
<span style="color: #ff0000;"><strong>nome=$(zenity --title="Nome?" --text "Qual é o seu nome?" --entry)</strong></span>
<span style="color: #ff0000;"><strong>zenity --info --title="Boas-vindas" --text=" $nome" --width="100" height="50"</strong></span>
<span style="color: #ff0000;"><strong>sobrenome=$(zenity --title="Sobrenome" --text "$primeiro Qual é o seu sobrenome?" --entry)</strong></span>
<span style="color: #ff0000;"><strong>zenity --info --title="Bóson Treinamentos" --text="Bons estudos, $nome $sobrenome"</strong></span></pre>
<p>Para rodar o script, execute o comando a seguir:</p>
<pre><span style="color: #ff0000;"><strong>./teste-zenity.sh</strong></span></pre>
<p>Veja duas telas deste script em execução:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8356 size-full" title="Caixa de diálogo com Zenity no Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/10/zenity-info-01.jpg" alt="Caixa de diálogo com Zenity no Linux" width="210" height="156" /></p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8357 size-full" title="Caixa de diálogo de texto com Zenity no Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/10/zenity-info-02.jpg" alt="Caixa de diálogo de texto com Zenity no Linux" width="291" height="165" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2016/10/zenity-info-02.jpg 291w, https://www.bosontreinamentos.com.br/wp-content/uploads/2016/10/zenity-info-02-174x98.jpg 174w" sizes="auto, (max-width: 291px) 100vw, 291px" /></p>
<p><strong>Exemplo 03</strong>: Exibindo um diálogo de calendário, capturando a data escolhida pelo usuário em uma variável, e exibindo a data no terminal:</p>
<pre><span style="color: #339966;"><strong>#!/bin/bash</strong>
<strong># Capturando a data escolhida pelo usuário a partir de um calendário</strong></span>
<span style="color: #ff0000;"><strong>data=$(zenity --title="Escolha a data" --calendar)</strong></span>
<span style="color: #ff0000;"><strong>if (( data ))</strong></span>
<span style="color: #ff0000;"><strong>then</strong></span>
<span style="color: #ff0000;"><strong>  echo "A data escolhida foi o dia $data"</strong></span>
<span style="color: #ff0000;"><strong>else</strong></span>
<span style="color: #ff0000;"><strong>  echo "Usuário não escolheu nenhuma data"</strong></span>
<span style="color: #ff0000;"><strong>fi</strong></span></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8310 size-full" title="Caixa de diálogo de calendário com Zenity no Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/10/calendário-zenity.png" alt="Caixa de diálogo de calendário com Zenity no Linux" width="297" height="394" /></p>
<p><strong>Exemplo 04</strong>: Usando uma caixa de diálogo de seleção de arquivos para selecionar um arquivo de texto:</p>
<pre><span style="color: #ff0000;"><strong><span style="color: #339966;">#!/bin/bash</span>
<span style="color: #339966;"># Selecionando um arquivo de texto a partir de uma caixa de diálogo</span>

ARQUIVO=$(zenity --file-selection --title="Selecione um arquivo")

case $? in
    0)
        echo "$ARQUIVO selecionado.";;
    1)
        echo "Nenhum arquivo selecionado.";;
    -1)
        echo "Ocorreu um erro desconhecido.";;
esac
</strong></span></pre>
<p><strong>Exemplo 05</strong>: Abrindo um arquivo de texto com extensão <strong>.sh</strong> e exibindo seu conteúdo em uma caixa de diálogo:</p>
<pre><span style="color: #339966;"><strong>#!/bin/bash</strong></span>
<span style="color: #339966;"><strong># Selecionando um arquivo de texto a partir de uma caixa de diálogo</strong></span>
<span style="color: #ff0000;"><strong>ARQUIVO=$(zenity --file-selection --title="Selecione um arquivo" --file-filter="*.sh")</strong></span>
<span style="color: #ff0000;"><strong># <span style="color: #339966;">Usando o diálogo Text Information para exibir o conteúdo do arquivo selecionado:</span></strong></span>
<span style="color: #ff0000;"><strong>if [ $ARQUIVO ]</strong></span>
<span style="color: #ff0000;"><strong>then</strong></span>
<span style="color: #ff0000;"><strong>    zenity --text-info --title="Arquivo" --filename=$ARQUIVO --width=450 --height=500</strong></span>
<span style="color: #ff0000;"><strong>fi</strong></span></pre>
<p><strong>Exemplo 06</strong>: Criando um formulário para captura de dados para um cadastro de usuário:</p>
<pre><span style="color: #339966;"><strong>#/bin/bash</strong>
</span><span style="color: #ff0000;"><strong><span style="color: #339966;"># Criando um formulário com o Zenity</span></strong></span>
<span style="color: #ff0000;"><strong>DADOS=$(zenity     --forms --title="Cadastro" --text="Preencha o formulário a seguir com seus dados:" \</strong></span>
<span style="color: #ff0000;"><strong>    --separator="," \</strong></span>
<span style="color: #ff0000;"><strong>    --add-entry="Nome" \</strong></span>
<span style="color: #ff0000;"><strong>    --add-entry="Sobrenome" \</strong></span>
<span style="color: #ff0000;"><strong>    --add-calendar="Data de Nascimento" \</strong></span>
<span style="color: #ff0000;"><strong>    --add-entry="E-mail")</strong></span>
<span style="color: #ff0000;"><strong>echo $DADOS | cut -d, -f1</strong></span>
<span style="color: #ff0000;"><strong>echo $DADOS | cut -d, -f2</strong></span>
<span style="color: #ff0000;"><strong>echo $DADOS | cut -d, -f3</strong></span>
<span style="color: #ff0000;"><strong>echo $DADOS | cut -d, -f4</strong></span></pre>
<p><strong>Exemplo 07</strong>: Selecionando itens em uma lista de itens:</p>
<pre><span style="color: #339966;"><strong>#/bin/bash</strong>
</span><span style="color: #ff0000;"><strong><span style="color: #339966;"># Usando uma lista com botões de rádio com o Zenity</span></strong></span>
<span style="color: #ff0000;"><strong>ITEM_SELECIONADO=$(zenity  --list  --text "Selecione seu sistema favorito" <span style="color: #339966;">\</span></strong></span>
<span style="color: #ff0000;"><strong>    --radiolist <span style="color: #339966;">\</span></strong></span>
<span style="color: #ff0000;"><strong>    --column "Marcar" <span style="color: #339966;">\</span></strong></span>
<span style="color: #ff0000;"><strong>    --column "Sistemas" <span style="color: #339966;">\</span></strong></span>
<span style="color: #ff0000;"><strong>    FALSE BSD TRUE Linux FALSE "OS X" FALSE Windows);</strong></span>
<span style="color: #ff0000;"><strong>echo "Seu sistema operacional favorito é o $ITEM_SELECIONADO";</strong></span></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-8358 size-full" title="Lista de rádio com Zenity em Shell Scripting" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/10/zenity-lista-rádio.jpg" alt="Lista de rádio com Zenity em Shell Scripting" width="306" height="244" /></p>
<p>É isso aí! Vimos alguns exemplos do uso do Zenity para criar caixas de diálogo no Linux. Se você quiser se aprofundar no assunto, recomendo uma consulta à página oficial do manual do Zenity: <strong>https://help.gnome.org/users/zenity/3.22/</strong></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/">Zenity &#8211; Exibindo caixas de diálogo com scripts do Shell no Linux</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/zenity-exibindo-caixas-de-dialogo-com-scripts-do-shell-no-linux/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Shell Scripting &#8211; Declaração break em loops aninhados</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-em-loops-aninhados/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-em-loops-aninhados/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 05 Oct 2016 22:47:44 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[LPIC]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=8301</guid>

					<description><![CDATA[<p>Declaração break em loops aninhados &#8211; Shell Scripting Na lição passada vimos o funcionamento e aplicação da declaração break em scripts do shell. Neste tutorial vamos trabalhar com a declaração break em loops aninhados, mostrando como utilizá-la para escolher qual loop interromper. Às vezes, em um algoritmo que possui loops aninhados,  precisamos interromper a execução do loop mais externo de acordo com uma condição que ocorre no loop interno (aninhado). Para isso, podemos usar o comando break de acordo com a seguinte sintaxe: break n onde o valor n indica o nível do loop que será interrompido. Por padrão, esse valor é 1, o que significa que o loop interrompido é o loop onde a instrução break se encontra. Se ajustarmos o valor de n para, por exemplo, 2, o comando break irá interromper a execução do próximo nível, que corresponde ao loop externo em relação ao atual, e assim sucessivamente para estruturas de repetição aninhadas mais complexas. Vejamos dois exemplos. Exemplo 01: Encerrando o loop interno (usando laços for). Neste exemplo o comando break termina o loop interno quando o valor da variável y é igual a 12, mas o loop externo continua a ser executado (5 vezes): #!/bin/bash [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-em-loops-aninhados/">Shell Scripting &#8211; Declaração break em loops aninhados</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Declaração break em loops aninhados &#8211; Shell Scripting</h2>
<p>Na lição passada vimos o funcionamento e <a href="http://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-saindo-de-loops/" target="_blank" rel="noopener">aplicação da declaração break em scripts do shell</a>. Neste tutorial vamos trabalhar com a declaração break em loops aninhados, mostrando como utilizá-la para escolher qual loop interromper.</p>
<p>Às vezes, em um algoritmo que possui loops aninhados,  precisamos interromper a execução do loop mais externo de acordo com uma condição que ocorre no loop interno (aninhado). Para isso, podemos usar o comando break de acordo com a seguinte sintaxe:</p>
<pre><span style="color: #ff0000;"><strong>break <em>n</em></strong></span></pre>
<p>onde o valor <em><strong><span style="color: #ff0000;">n</span></strong></em> indica o nível do loop que será interrompido. Por padrão, esse valor é 1, o que significa que o loop interrompido é o loop onde a instrução break se encontra. Se ajustarmos o valor de <em><span style="color: #ff0000;"><strong>n</strong></span></em> para, por exemplo, 2, o comando break irá interromper a execução do próximo nível, que corresponde ao loop externo em relação ao atual, e assim sucessivamente para estruturas de repetição aninhadas mais complexas.</p>
<p>Vejamos dois exemplos.</p>
<p><strong>Exemplo 01: Encerrando o loop interno (usando laços for).</strong></p>
<p>Neste exemplo o comando break termina o loop interno quando o valor da variável <strong>y</strong> é igual a <strong>12</strong>, mas o loop externo continua a ser executado (5 vezes):</p>
<pre><span style="color: #ff0000;"><strong>#!/bin/bash</strong></span>
<span style="color: #ff0000;"><strong># <span style="color: #339966;">Saindo de um loop interno</span></strong></span>
<span style="color: #ff0000;"><strong>
for (( x = 1; x &lt;= 5; x++ ))</strong></span>
<span style="color: #ff0000;"><strong>do</strong></span>
<span style="color: #ff0000;"><strong>   echo "Valor do loop externo: $x"</strong></span>
<span style="color: #ff0000;"><strong>   for (( y = 1; y &lt; 20; y++ ))</strong></span>
<span style="color: #ff0000;"><strong>   do</strong></span>
<span style="color: #ff0000;"><strong>      if [ $y -eq 12 ]</strong></span>
<span style="color: #ff0000;"><strong>      then</strong></span>
<span style="color: #ff0000;"><strong>         break</strong></span>
<span style="color: #ff0000;"><strong>      fi</strong></span>
<span style="color: #ff0000;"><strong>      echo "Valor no loop interno: $y"</strong></span>
<span style="color: #ff0000;"><strong>   done</strong></span>
<span style="color: #ff0000;"><strong>done</strong></span></pre>
<p><strong>Exemplo 02: Encerrando o loop externo. </strong></p>
<p>Neste exemplo, o loop mais externo (nível 2) é interrompido quando, no loop mais interno (nível 1) o valor da variável <strong>y</strong> se torna maior do que <strong>9</strong>:</p>
<pre><span style="color: #ff0000;"><strong>#!/bin/bash</strong></span>
<span style="color: #ff0000;"><strong># <span style="color: #339966;">Saindo de um loop externo

</span></strong></span><span style="color: #ff0000;"><strong>for (( x = 1; x &lt; 5; x++ ))</strong></span>
<span style="color: #ff0000;"><strong>do</strong></span>
<span style="color: #ff0000;"><strong>   echo "Valor do loop externo: $x"</strong></span>
<span style="color: #ff0000;"><strong>   for (( y = 1; y &lt; 20; y++ ))</strong></span>
<span style="color: #ff0000;"><strong>   do</strong></span>
<span style="color: #ff0000;"><strong>      if [ $y -gt 9 ]</strong></span>
<span style="color: #ff0000;"><strong>      then</strong></span>
<span style="color: #ff0000;"><strong>         break 2</strong></span>
<span style="color: #ff0000;"><strong>      fi</strong></span>
<span style="color: #ff0000;"><strong>      echo "Valor no loop interno: $y"</strong></span>
<span style="color: #ff0000;"><strong>   done</strong></span>
<span style="color: #ff0000;"><strong>done</strong></span></pre>
<p>É isso aí! Na próxima lição vamos tratar do comando continue, que permite interromper a execução de comandos dentro de um loop prematuramente sem no entanto finalizar o loop em si completamente,</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-em-loops-aninhados/">Shell Scripting &#8211; Declaração break em loops aninhados</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-em-loops-aninhados/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Shell Scripting &#8211; Declaração break &#8211; Saindo de loops</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-saindo-de-loops/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-saindo-de-loops/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Mon, 03 Oct 2016 19:36:25 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=8255</guid>

					<description><![CDATA[<p>Shell Scripting &#8211; Declaração break &#8211; Saindo de loops Comando break O comando ou declaração break é uma forma simples de sair de um loop em execução, interrompendo-a em um momento definido. Pode ser utilizado em laços for, while e do while. Exemplos: 1. Saindo de um laço simples. Neste caso, pedimos para que sejam mostrados no terminal os número de 1 até 10, por meio de um laço for, mas usamos o comando break para interromper a execução desse loop quando o número a ser exibido tem o valor 6: #!/bin/bash for num in 1 2 3 4 5 6 7 8 9 10 do if [ $num -eq 6] then break fi echo "Número: $num" done echo "Laço for finalizado" 2. Usando laço while. Neste segundo exemplo, pedimos para o usuário entrar com um número entre 1 e 10 no terminal, e o exibimos logo na sequência. O loop continuará a ser executado enquanto o usuário digitar um número diferente de zero, e será encerrado caso o número 0 seja digitado. Porém, se o usuário entrar com um número maior do que dez, o comando break será utilizado para encerrar o loop prematuramente e, então, uma mensagem será [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-saindo-de-loops/">Shell Scripting &#8211; Declaração break &#8211; Saindo de loops</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Shell Scripting &#8211; Declaração break &#8211; Saindo de loops</h2>
<h3>Comando break</h3>
<p>O comando ou declaração break é uma forma simples de sair de um loop em execução, interrompendo-a em um momento definido.<br />
 Pode ser utilizado em laços for, while e do while.</p>
<h3>Exemplos:</h3>
<p>1. Saindo de um laço simples. Neste caso, pedimos para que sejam mostrados no terminal os número de 1 até 10, por meio de um laço for, mas usamos o comando break para interromper a execução desse loop quando o número a ser exibido tem o valor 6:</p>
<pre><span style="color: #ff0000;"><strong>#!/bin/bash</strong></span>
<span style="color: #ff0000;"><strong>for num in 1 2 3 4 5 6 7 8 9 10</strong></span>
<span style="color: #ff0000;"><strong>do</strong></span>
<span style="color: #ff0000;"><strong>  if [ $num -eq 6]</strong></span>
<span style="color: #ff0000;"><strong>  then</strong></span>
<span style="color: #ff0000;"><strong>    break</strong></span>
<span style="color: #ff0000;"><strong>  fi</strong></span>
<span style="color: #ff0000;"><strong>  echo "Número: $num"</strong></span>
<span style="color: #ff0000;"><strong>done</strong></span>
<span style="color: #ff0000;"><strong>echo "Laço for finalizado"</strong></span></pre>
<p>2. Usando laço <strong>while</strong>. Neste segundo exemplo, pedimos para o usuário entrar com um número entre 1 e 10 no terminal, e o exibimos logo na sequência.</p>
<p>O loop continuará a ser executado enquanto o usuário digitar um número diferente de zero, e será encerrado caso o número 0 seja digitado.</p>
<p>Porém, se o usuário entrar com um número maior do que dez, o comando break será utilizado para encerrar o loop prematuramente e, então, uma mensagem será exibida após o encerramento do laço de acordo com o valor que o usuário digitou:</p>
<pre><span style="color: #339966;"><strong>#!/bin/bash</strong></span>
<span style="color: #339966;"><strong># Testando comando break em um laço while</strong></span>
<span style="color: #ff0000;"><strong>read -p <span style="color: #ff00ff;">"Digite um número entre 1 e 10 "</span> num</strong></span>
<span style="color: #ff0000;"><strong>while [ <span style="color: #0000ff;">$num</span> -ne 0 ]</strong></span>
<span style="color: #ff0000;"><strong>do</strong></span>
<span style="color: #ff0000;"><strong>  if [ $num -gt 10 ]</strong></span>
<span style="color: #ff0000;"><strong>  then</strong></span>
<span style="color: #ff0000;"><strong>    break</strong></span>
<span style="color: #ff0000;"><strong>  fi</strong></span>
<span style="color: #ff0000;"><strong>  echo <span style="color: #ff00ff;">"Número digitado: <span style="color: #0000ff;">$num</span>"</span></strong></span>
<span style="color: #ff0000;"><strong>  read -p <span style="color: #ff00ff;">"Digite um número entre 1 e 10: "</span> num</strong></span>
<span style="color: #ff0000;"><strong>done</strong></span>
<span style="color: #ff0000;"><strong>if [ <span style="color: #0000ff;">$num</span> -eq 0 ]</strong></span>
<span style="color: #ff0000;"><strong>then</strong></span>
<span style="color: #ff0000;"><strong>  echo <span style="color: #ff00ff;">"Você encerrou o programa digitando zero"</span></strong></span>
<span style="color: #ff0000;"><strong>else</strong></span>
<span style="color: #ff0000;"><strong>  echo <span style="color: #ff00ff;">"Você digitou um valor maior do que 10. Programa finalizado"</span></strong></span>
<span style="color: #ff0000;"><strong>fi</strong></span></pre>
<p>No próximo tutorial vamos utilizar o comando break em laços aninhados, de modo a escolhermos qual laço será finalizado.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-saindo-de-loops/">Shell Scripting &#8211; Declaração break &#8211; Saindo de loops</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-declaracao-break-saindo-de-loops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Curso de Shell Scripting &#8211; Retornando valores em funções e status de saída</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/curso-de-shell-scripting-retornando-valores-em-funcoes-e-status-de-saida/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/curso-de-shell-scripting-retornando-valores-em-funcoes-e-status-de-saida/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 19 Jan 2016 22:28:10 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=6152</guid>

					<description><![CDATA[<p>Retornando valores em funções e status de saída O Shell Bash trata as funções como se fossem mini-scripts, completas com um status de saída próprio. É possível gerar u status de saída para a funções de três maneiras diferentes: 1. Status de Saída Padrão Por padrão, o status de saída de uma função é o status de saída retornado pelo último comando executado na função. Após a execução da função, usamos a variável padrão $? para determinar o status de saída da função. Exemplo: #!/bin/bash # Status de saída padrão da função testaarquivo() { echo "Verificando arquivo" ls -l xyz.abc } testaarquivo echo "O status de saída é $?" Veja a saída gerada ao executarmos esse script: O status de saída foi 2, porque o último comando na função falhou (não há o arquivo xyz.abc; se ele existisse, o status seria 0). Porém, não é possível saber se outros comandos &#8211; caso existissem &#8211; anteriores a esse, foram executados com sucesso ou não, baseando-se no status de saída da função. Desta forma, confira no status de saída padrão de uma função não é recomendável para monitorar o que ocorre com as funções dentro de um script. 2 &#8211; Usando o [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/curso-de-shell-scripting-retornando-valores-em-funcoes-e-status-de-saida/">Curso de Shell Scripting &#8211; Retornando valores em funções e status de saída</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Retornando valores em funções e status de saída</h2>
<p>O Shell Bash trata as funções como se fossem mini-scripts, completas com um status de saída próprio. É possível gerar u status de saída para a funções de três maneiras diferentes:</p>
<h3><strong>1. Status de Saída Padrão</strong></h3>
<p>Por padrão, o status de saída de uma função é o status de saída retornado pelo último comando executado na função.</p>
<p>Após a execução da função, usamos a variável padrão <strong>$?</strong> para determinar o status de saída da função.</p>
<p><strong>Exemplo:</strong></p>
<pre><span style="color: #800000;"><strong>#!/bin/bash</strong></span>
<span style="color: #800000;"><strong># Status de saída padrão da função</strong></span>
<span style="color: #800000;"><strong>testaarquivo() {</strong></span>
<span style="color: #800000;"><strong>  echo "Verificando arquivo"</strong></span>
<span style="color: #800000;"><strong>  ls -l xyz.abc</strong></span>
<span style="color: #800000;"><strong>}</strong></span>
<span style="color: #800000;"><strong>testaarquivo</strong></span>
<span style="color: #800000;"><strong>echo "O status de saída é $?"</strong></span></pre>
<p>Veja a saída gerada ao executarmos esse script:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-6153 size-full" title="Status de saída padrão em funções do Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/status-saida-linux-padrão.jpg" alt="Status de saída padrão em funções do Linux" width="672" height="88" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/status-saida-linux-padrão.jpg 672w, https://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/status-saida-linux-padrão-420x55.jpg 420w" sizes="auto, (max-width: 672px) 100vw, 672px" /></p>
<p>O status de saída foi 2, porque o último comando na função falhou (não há o arquivo xyz.abc; se ele existisse, o status seria 0). Porém, não é possível saber se outros comandos &#8211; caso existissem &#8211; anteriores a esse, foram executados com sucesso ou não, baseando-se no status de saída da função. Desta forma, confira no status de saída padrão de uma função não é recomendável para monitorar o que ocorre com as funções dentro de um script.</p>
<h3>2 &#8211; Usando o comando return</h3>
<p>O shell bash usa o comando <strong>return</strong> para sair de uma função com um status de saída específico. Com esse comando podemos especificar um valor inteiro para definir o status de saída da função, de forma programável.</p>
<p>O valor de retorno deve ser obtido com a variável $? assim que a função termina sua execução, e um status e saída só pode ser um valor inteiro no intervalo entre 0 e 255.</p>
<p>Não é possível usar essa técnica se for necessário retornar um valor inteiro muito grande (fora da faixa) ou ainda um valor que seja uma string.</p>
<p><strong>Exemplo:</strong></p>
<table style="height: 248px;" width="506">
<tbody>
<tr>
<td>
<pre><span style="color: #800000;"><strong>#!/bin/bash</strong></span>
<span style="color: #800000;"><strong># Usando o comando return na função</strong></span>
<span style="color: #800000;"><strong>function valor {</strong></span>
<span style="color: #800000;"><strong> read -p "Digite um número entre 0 e 255: " num</strong></span>
<span style="color: #800000;"><strong> return $[ $num ]</strong></span>
<span style="color: #800000;"><strong>}</strong></span>
<span style="color: #800000;"><strong>
valor</strong></span>
<span style="color: #800000;"><strong>echo "O valor do status retornado é $?"</strong></span></pre>
</td>
</tr>
</tbody>
</table>
<p>Veja o resultado obtido após executar o script acima, fornecendo o valor 45 quando solicitado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-6154 size-full" title="Usando comando return em Shell Scripting - Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/status-saída-função-return-linux.jpg" alt="Status de saída com função return no Linux" width="510" height="74" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/status-saída-função-return-linux.jpg 510w, https://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/status-saída-função-return-linux-420x61.jpg 420w" sizes="auto, (max-width: 510px) 100vw, 510px" /></p>
<p>O status de saída é exatamente o número que fornecemos, ou seja, o valor que nós determinamos para a função. Porém, se fornecermos um valor fora da faixa entre 0 e 255 teremos um status de saída com valor diferente do esperado &#8211; e errado.</p>
<h3>3 &#8211; Usando a saída da função</h3>
<p>Sabemos que é possível capturar a saída de um comando em uma variável do shell usando os caracteres <strong>backtick</strong> (<strong>` `</strong>); também é possível capturar a saída de uma função em uma variável do shell com essa técnica. Assim podemos obter qualquer tipo de saída de uma função e atribui-la a uma variável.</p>
<p>Usamos para isso a seguinte sintaxe:</p>
<pre><span style="color: #800000;"><strong>saida=`função`</strong></span></pre>
<p>A saída da função será atribuída à variável do shell criada (no caso, à variável de nome $saida).</p>
<p>Exemplo:</p>
<table style="height: 209px;" width="435">
<tbody>
<tr>
<td>
<pre><span style="color: #800000;"><strong>#!/bin/bash</strong></span>
<span style="color: #800000;"><strong>function valor {</strong></span>
<span style="color: #800000;"><strong>  read -p "Digite um número qualquer: " num</strong></span>
<span style="color: #800000;"><strong>  echo $[num]</strong></span>
<span style="color: #800000;"><strong>}</strong></span>
<span style="color: #800000;"><strong>saida=`valor`</strong></span>
<span style="color: #800000;"><strong>echo "O valor do status retornado é $saida"</strong></span></pre>
</td>
</tr>
</tbody>
</table>
<p>Veja o resultado obtido com a execução desse script. Vamos fornecer o valor 1024 quando solicitado pela função:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-6155 size-full" title="Usando saída de função em Shell Scripting - Linux" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/saida-função-linux-shell-scripting.jpg" alt="Usando saída de função em Shell Scripting - Linux" width="495" height="73" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/saida-função-linux-shell-scripting.jpg 495w, https://www.bosontreinamentos.com.br/wp-content/uploads/2016/01/saida-função-linux-shell-scripting-420x62.jpg 420w" sizes="auto, (max-width: 495px) 100vw, 495px" /></p>
<p>Com essa técnica, podemos capturar valores inteiros, de ponto flutuante e até mesmo valores de strings como status de saída de funções.</p>
<p>É isso aí! Na próxima lição, vamos estudar o uso de variáveis em funções em Shell Scripting no Linux.</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/curso-de-shell-scripting-retornando-valores-em-funcoes-e-status-de-saida/">Curso de Shell Scripting &#8211; Retornando valores em funções e status de saída</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/curso-de-shell-scripting-retornando-valores-em-funcoes-e-status-de-saida/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Shell Scripting &#8211; Criando caixas de diálogo TUI com dialog</title>
		<link>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-dialog/</link>
					<comments>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-dialog/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 26 Jul 2015 12:31:13 +0000</pubDate>
				<category><![CDATA[Shell Scripting]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=4039</guid>

					<description><![CDATA[<p>Programação em Shell Scripting no Linux &#8211; Criando caixas de diálogo TUI com dialog O pacote dialog é uma ferramenta criada originalmente por Savio Lam. Este pacote permite criar caixas de diálogo padrão em janelas em um ambiente de texto, usando códigos de controle de escape ANSI. Podemos incorporar estas caixas de diálogo em nossos script do shell para que haja interação com os usuários. O pacote dialog não é instalado por padrão em muitas distribuições Linux. Se ele não estiver presente em seu sistema, instale-o com os comandos a seguir: Em sistemas Debian / Ubuntu: # apt-get install dialog Em sistemas Red Hat / Fedora / CentOS: # yum install dialog O comando dialog utiliza parâmetros de linha de comando para determinar que tipo de widget de janela deve ser criada. Um widget é um tipo de elemento de janela. Podemos ver na tabela a seguir alguns dos tipos de widgets suportados pelo pacote dialog: Widget Descrição calendar Fornece um calendário que permite selecionar datas checklist Mostra entradas múltiplas onde cada entrada pode ser ligada ou desligada form Permite construir um formulário com labels e campos de texto para serem preenchidos fselect Fornece uma janela de seleção de arquivos [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-dialog/">Shell Scripting &#8211; Criando caixas de diálogo TUI com dialog</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="yt watch-title-container"><span id="eow-title" class="watch-title " dir="ltr" title="Shell Scripting - Criando caixas de diálogo TUI com dialog - 29 - Linux">Programação em Shell Scripting no Linux &#8211; Criando caixas de diálogo TUI com dialog</span></h2>
<p>O pacote dialog é uma ferramenta criada originalmente por Savio Lam. Este pacote permite criar caixas de diálogo padrão em janelas em um ambiente de texto, usando códigos de controle de escape ANSI.</p>
<p>Podemos incorporar estas caixas de diálogo em nossos script do shell para que haja interação com os usuários.</p>
<p>O pacote dialog não é instalado por padrão em muitas distribuições Linux. Se ele não estiver presente em seu sistema, instale-o com os comandos a seguir:</p>
<p>Em sistemas Debian / Ubuntu:</p>
<pre># apt-get install dialog</pre>
<p>Em sistemas Red Hat / Fedora / CentOS:</p>
<pre># yum install dialog</pre>
<p>O comando dialog utiliza parâmetros de linha de comando para determinar que tipo de widget de janela deve ser criada. Um widget é um tipo de elemento de janela. Podemos ver na tabela a seguir alguns dos tipos de widgets suportados pelo pacote dialog:</p>
<table data-blogger-escaped-style="border-collapse: collapse; border: none;">
<thead>
<tr data-blogger-escaped-style="height: 0px;">
<td style="text-align: center;" data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><strong><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Widget</span></strong></p>
</div>
</td>
<td style="text-align: center;" data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><strong><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Descrição</span></strong></p>
</div>
</td>
</tr>
</thead>
<tbody>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">calendar</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fornece um calendário que permite selecionar datas</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">checklist</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra entradas múltiplas onde cada entrada pode ser ligada ou desligada</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">form</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Permite construir um formulário com labels e campos de texto para serem preenchidos</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">fselect</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fornece uma janela de seleção de arquivos</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">gauge</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra uma barra de progresso</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">infobox</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra uma mensagem sem esperar por uma resposta</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">inputmenu</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fornece um menu editável</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">menu</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra uma lista de seleções para escolha</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">msgbox</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra uma mensagem e pede que o usuário pressione um botão OK</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">passwordbox</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra uma caixa de texto simples que esconde o texto digitado</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">radiolist</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fornece um grupo de itens de menu onde apenas um item pode ser selecionado</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">tailbox</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra o texto de um arquivo em uma janela com rolagem usando o comando tail</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">textbox</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Mostra o conteúdo de um arquivo em uma janela com rolagem</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">timebox</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fornece uma janela para selecionarmos uma hora, minuto e segundo</span></p>
</div>
</td>
</tr>
<tr data-blogger-escaped-style="height: 0px;">
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">yesno</span></p>
</div>
</td>
<td data-blogger-escaped-style="border-bottom: solid #000000 1px; border-left: solid #000000 1px; border-right: solid #000000 1px; border-top: solid #000000 1px; padding: 7px 7px 7px 7px; vertical-align: top;">
<div dir="ltr" data-blogger-escaped-style="line-height: 1; margin-bottom: 0pt; margin-top: 0pt;">
<p><span style="color: #000000; font-family: 'arial';" data-blogger-escaped-style="background-color: transparent; color: black; font-family: &quot;arial&quot;; font-size: 15px; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">Fornece uma mensagem simples com botões Yes e No.</span></p>
</div>
</td>
</tr>
</tbody>
</table>
<p>Para especificarmos um widget na linha de comandos, usamos a seguinte sintaxe:</p>
<pre>dialog --widget parâmetros</pre>
<p>Cada widget fornece saída em duas formas:</p>
<ul>
<li>usando o erro padrão STDERR</li>
<li>usando o código de status de saída</li>
</ul>
<p>O código de status do comando dialog determina o botão selecionado pelo usuário. Caso o botão selecionado seja Yes ou OK, o status de saída retornado será 0; se um botão Cancel ou No for selecionado, o comando dialog retornará um status de saída igual a 1. E caso o usuário pressione a tecla ESC, o status de saída será igual a 255. Desta forma, podemos usar a variável padrão $? para determinar qual ação foi selecionada na caixa de diálogo.</p>
<p>Agora, caso o widget retorne dados, como uma palavra ou a seleção de um menu, o comando dialog enviará esses dados para STDERR. Assim podemos usar as técnicas de redirecionamento de saída para redirecionar os dados para STDOUT ou qualquer outro arquivo, como no exemplo abaixo:</p>
<pre>$ dialog --inputbox “Digite seu nome:” 10 20 2&gt;nome.txt</pre>
<p>Este comando redireciona o texto digitado na caixa de texto para o arquivo nome.txt. Os números 10 20 indicam o tamanho da janela, sendo no caso 10 linhas por 20 colunas.</p>
<p>Vamos estudar agora exemplos de uso dos diversos widgets:</p>
<p><strong>1. Caixa de mensagens &#8211; msgbox</strong></p>
<p>Mostra uma mensagem simples em uma janela e espera o usuário pressiona um botão OK para desaparecer.</p>
<p>Sintaxe:</p>
<pre><span style="color: #800080;">dialog --title título_caixa --msgbox texto_a_mostrar altura largura</span></pre>
<p>Exemplo:</p>
<pre>$ dialog --title “Caixa de Exemplo” --msgbox “Testando uma msgbox” 10 35</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14452" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-01.png" alt="Caixas de diálogo com dialog em shell scripting no linux" width="491" height="290" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-01.png 491w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-01-420x248.png 420w" sizes="auto, (max-width: 491px) 100vw, 491px" /></p>
<p><strong>2. Widget yesno</strong></p>
<p>O widget yesno permite que o usuário esponda a uma questão do tipo Sim / Não mostrada na tela. O status de saída do comando dialog depende de qual botão é escolhido. Se for o botão No, o status de saída será 1; se for o botão Yes, o status de saída será 0.</p>
<p>Exemplo:</p>
<pre>$ dialog --title “Caixa yesno” --yesno “Escolha Sim ou Não” 10 25</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14453" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-02.png" alt="Caixa de diálogo yes no no linux" width="512" height="285" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-02.png 512w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-02-420x234.png 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-02-174x98.png 174w" sizes="auto, (max-width: 512px) 100vw, 512px" /></p>
<p><strong>3. A caixa inputbox</strong></p>
<p>A caixa inputbox fornece uma caixa de texto simples para que o usuário entre com uma string qualquer. O comando dialog envia o valor do texto digitado para o STDERR. Podemos então redirecionar esse valor para obtermos a informação digitada, o que faremos com o parâmetro &#8211;stdout.</p>
<p>Exemplo:</p>
<pre>$ nome=$(dialog --inputbox “Digite seu nome” 10 25 --stdout)
$ echo $?
$ echo $nome</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14454" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-03.png" alt="Caixa input box em shell script" width="515" height="283" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-03.png 515w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-03-420x231.png 420w" sizes="auto, (max-width: 515px) 100vw, 515px" /></p>
<p><strong>4. O widget textbox</strong></p>
<p>Com o widget textbox podemos mostrar uma grande quantidade de informações em uma janela. Ele produz uma janela com rolagem que contém o texto proveniente de um arquivo especificado.</p>
<p>Exemplo:</p>
<pre>$ dialog --textbox /etc/group 20 20</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14455" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-04.png" alt="widget textbox em shell scripting" width="392" height="366"></p>
<p><strong>5. O widget menu</strong></p>
<p>O widget menu permite criar um menu de itens selecionáveis a partir de uma tag de seleção e um texto descritivo de cada item</p>
<p>Exemplo:</p>
<pre>$ sistema=$(dialog --menu “Escolha o sistema” 20 35 15 \
1 “Linux” \
2 “BSD” \
3 “Solaris” \
4 “ Android” --stdout)
$ echo $sistema</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14456" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-05.png" alt="Widget menu em shell scripting" width="540" height="380" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-05.png 540w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-05-420x296.png 420w" sizes="auto, (max-width: 540px) 100vw, 540px" /></p>
<p>No exemplo o caractere \ é utilizado para que possamos continuar a digitação do comando na linha abaixo. Capturamos o valor escolhido na variável sistema, e em seguida exibimos seu valor no console com o comando echo.</p>
<p><strong>6. Widget calendar</strong></p>
<p>Usamos o widget calendar para que o usuário possa selecionar uma data em uma janela gráfica.</p>
<p>Exemplo:</p>
<pre>$ data=$(dialog --calendar “Escolha a data” 0 0 --stdout)
$ echo $data</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14457" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-06.png" alt="widget calendar em shell scripting no linux" width="518" height="381" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-06.png 518w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-06-420x309.png 420w" sizes="auto, (max-width: 518px) 100vw, 518px" /></p>
<p>Usamos a opção &#8211;stdout para redirecionar a informação selecionada para a saída padrão, onde será atribuída à variável data.</p>
<p><strong>7. Trabalhando com caixa de informações &#8211; infobox:</strong></p>
<p>O infobox é um widget bem simples, que vostra uma mensagem sem esperar por uma resposta do usuário.</p>
<p>Exemplo:</p>
<pre>$ dialog --title “Sucesso” --infobox “Operação Concluída” 5 35; sleep 4; clear</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14458" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-07.png" alt="caixa de diálogo infobox em shell scripting" width="498" height="221" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-07.png 498w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-07-420x186.png 420w" sizes="auto, (max-width: 498px) 100vw, 498px" /></p>
<p>Usamos o comando <strong>sleep 4</strong> para que a janela permaneça por 4 segundos antes de encerrar o widget.</p>
<p><strong>8. Usando um checklist</strong></p>
<p>Um checklist permite apresentar um conjunto de itens dos quais o usuário pode selecionar quantos desejar usando a barra de espaços do teclado.</p>
<p>Exemplo:</p>
<pre>$ itens=$(dialog --checklist “Escolha a cor:” 15 30 4 \
“Verde” “” OFF \
“Azul” “” OFF \
“Amarelo” “” ON \
“Preto” “” OFF --stdout)
$ echo $itens</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14459" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-08.png" alt="widget checklist em shell scripting no linux" width="481" height="326" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-08.png 481w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-08-420x285.png 420w" sizes="auto, (max-width: 481px) 100vw, 481px" /></p>
<p>Os itens pré-selecionados devem usar a palavra ON, e os não selecionados automaticamente usam a palavra OFF. Também devemos indicar o número de itens logo após as dimensões da janela (em nosso caso, 4 itens).</p>
<p><strong>9. Usando um radiolist</strong></p>
<p>O radiolist é similar ao checklist, com a diferença de que só é possível escolher um dos itens apresentados.</p>
<p>Exemplo:</p>
<pre>$ itens=$(dialog --radiolist “Escolha a cor:” 15 30 4 \
“Verde” “” OFF \
“Azul” “” OFF \
“Amarelo” “” ON \
“Preto” “” OFF --stdout)
$ echo $itens</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14460" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-09.png" alt="widget radiolist em shell script" width="454" height="326" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-09.png 454w, https://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-09-420x302.png 420w" sizes="auto, (max-width: 454px) 100vw, 454px" /></p>
<p><strong>10. Usando um timebox</strong></p>
<p>Vamos ver agora o uso básico de um widget timebox</p>
<p>Exemplo</p>
<pre>$ hora=$(dialog --stdout --title “Relógio” --timebox “Escolha o horário:” 0 0)
$ echo “ A hora escolhida foi $hora”</pre>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-14463" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2015/07/dialog-shell-script-linux-10.png" alt="widget timebox shell scripting" width="405" height="272"></p>
<p>É isso aí pessoal! Agora é só caprichar em seus scripts usando essa ferramenta excelente. E não deixem de conferir nosso artigo <a href="http://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-whiptail-no-linux-27/">Criando caixas de diálogo via Shell Scripting usando a ferramenta whiptail</a>, além de assistir ao nosso vídeo sobre a ferramenta dialog em Shell Scripting:</p>
<h2><iframe loading="lazy" src="https://www.youtube.com/embed/q90fP1IDc3I" width="853" height="480" frameborder="0" allowfullscreen="allowfullscreen"></iframe></h2>
<p>O post <a href="https://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-dialog/">Shell Scripting &#8211; Criando caixas de diálogo TUI com dialog</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/shell-script/shell-scripting-criando-caixas-de-dialogo-tui-com-dialog/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
