<?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>LuAuF &#187; Bash</title>
	<atom:link href="http://luauf.com/category/programacion/bash-programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://luauf.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Jan 2012 01:44:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ayuda memoria: loops infinitos en el shell</title>
		<link>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/</link>
		<comments>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 01:44:47 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[bucle]]></category>
		<category><![CDATA[infinito]]></category>
		<category><![CDATA[ksh]]></category>
		<category><![CDATA[LOOP]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1197</guid>
		<description><![CDATA[Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió &#8220;ayudar al prójimo&#8221;, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme. Por tal motivo, y ante un requerimiento del primer tipo (como [...]]]></description>
			<content:encoded><![CDATA[<p>Este blog, me ha sido en más de una ocasión, mi ayuda memoria ideal. En otras tantas ocasiones, un link al mismo me permitió &#8220;ayudar al prójimo&#8221;, más bien, ahorrarme tiempo de utilización de cuerdas vocales y ahorrar al otro el fastidio de escucharme.</p>
<p>Por tal motivo, y ante un requerimiento del primer tipo (como &#8220;ayuda memoria&#8221;) quiero publicar algo que frecuentemente utilizo (o que cuando no es tan frecuente mi fragil memoria olvida):</p>
<p><strong>¿Cómo hacer un loop infinito en un intérprete de comandos (sh, ksh o similar)?</strong></p>
<p>Pongamos unas comillas al &#8220;infinito&#8221;, todo concluye al fin, nada puede escapar a un <strong>Ctrl+C</strong> o a un break (produce un abandono inmediato) dentro del bucle.</p>
<p><span id="more-1197"></span></p>
<pre>while :; do
  # Todo lo que quieras repetir infinitas veces
  echo "Hola Mundo"
  sleep 2
done</pre>
<p>No olvides el sleep, sino pasarán cosas muy rápido <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Otras opciones son utilizar las <em>palabras especiale</em>s <strong>true</strong> (indica que una condición en verdadera) y <strong>false</strong> (indica que una condición es falsa) de<strong> bash</strong>:</p>
<pre>while true; do
  ...
  ...
done</pre>
<p>O:</p>
<pre>until false; do
  ...
  ...</pre>
<pre>done</pre>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2012/01/26/ayuda-memoria-loops-infinitos-en-el-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>¿Como conocer mi IP privada y mi IP pública?</title>
		<link>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/</link>
		<comments>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/#comments</comments>
		<pubDate>Sun, 25 Apr 2010 02:07:31 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cut]]></category>
		<category><![CDATA[ifconfig]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[ip privada]]></category>
		<category><![CDATA[ip publica]]></category>
		<category><![CDATA[Redes]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[Shell scripts]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1173</guid>
		<description><![CDATA[¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión. Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (ifconfig, grep, cut, awk, wget, sed) Primero, para obtener mi IP local (privada) puedo hacerlo [...]]]></description>
			<content:encoded><![CDATA[<p>¿Como conocer mi IP privada y mi IP pública?, esa es la cuestión.</p>
<p>Vamos a ver un pequeño script para lograr este propósito utilizando algunos comandos ya vistos y utilizados en la historia de este blog con varios distintos propósitos (<a href="http://luauf.com/2009/03/26/ejemplos-de-como-configurar-la-interfaz-de-red-mediante-ifconfig/">ifconfig</a>, <a href="http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/">grep</a>, <a href="http://luauf.com/2009/04/12/descargar-videos-de-youtube-de-la-forma-mas-facil/">cut</a>, <a href="http://luauf.com/2008/04/02/top-5-de-los-comandos-mas-utilizados/">awk</a>, <a href="http://luauf.com/2008/04/15/descargar-un-sitio-web-completo/">wget</a>, <a href="http://luauf.com/2010/02/22/reemplazar-cadenas-en-archivos-con-sed/">sed</a>)</p>
<p align="center">
<img class="aligncenter size-full wp-image-1174" title="terminal" src="http://luauf.com/wp-content/uploads/2010/04/terminal.png" alt="" width="128" height="128" />
</p>
<p><span id="more-1173"></span></p>
<p>Primero, para obtener mi IP local (privada) puedo hacerlo mediante <a href="http://luauf.com/2009/03/26/ejemplos-de-como-configurar-la-interfaz-de-red-mediante-ifconfig/">ifconfig</a>, ahora, con la ayuda de <a href="http://luauf.com/2009/05/04/varios-ejemplos-de-uso-del-comando-grep/">grep</a>, <a href="http://luauf.com/2008/04/02/top-5-de-los-comandos-mas-utilizados/">awk</a> y <a href="http://luauf.com/2009/04/12/descargar-videos-de-youtube-de-la-forma-mas-facil/">cut</a> quitaré todo lo que sobra para obtener <strong>solo</strong> la IP.</p>
<div class="syntax_hilite">
<div id="code-4">
<div class="code">ifconfig | grep <span style="color:#CC0000;">'inet:'</span>| grep -v <span style="color:#CC0000;">'127.0.0.1'</span> | cut -d: -f2 |&nbsp; awk <span style="color:#CC0000;">'{print $1}'</span></div>
</div>
</div>
<p></p>
<p>Segundo, con la ayuda de un sitio web  y <a href="http://luauf.com/2008/04/15/descargar-un-sitio-web-completo/">wget</a> obtendré mi IP pública, IP otorgada por el servidor de Internet al conectarme, por lo general es dinámica (a menos que paguemos a nuestro ISP por una IP fija). Al resultado obtenido con la ayuda de <a href="http://luauf.com/2010/02/22/reemplazar-cadenas-en-archivos-con-sed/">sed</a> le dejaré tan <strong>solo</strong> la IP.</p>
<div class="syntax_hilite">
<div id="code-5">
<div class="code">wget -q -O - checkip.<span style="">dyndns</span>.<span style="">org</span>|sed -e <span style="color:#CC0000;">'s/.*Current IP Address://'</span> -e <span style="color:#CC0000;">'s/&lt;.*$//'</span></div>
</div>
</div>
<p></p>
<p>Finalmente, el script:</p>
<div class="syntax_hilite">
<div id="code-6">
<div class="code">#!/bin/sh<br />
echo <span style="color:#CC0000;">"IP privada: "</span>$<span style="color:#006600; font-weight:bold;">&#40;</span>ifconfig | grep <span style="color:#CC0000;">'inet:'</span>| grep -v <span style="color:#CC0000;">'127.0.0.1'</span> | cut -d: -f2 | awk <span style="color:#CC0000;">'{print $1}'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
echo <span style="color:#CC0000;">"IP pública: "</span>$<span style="color:#006600; font-weight:bold;">&#40;</span>wget -q -O - checkip.<span style="">dyndns</span>.<span style="">org</span>|sed -e <span style="color:#CC0000;">'s/.*Current IP Address://'</span> -e <span style="color:#CC0000;">'s/&lt;.*$//'</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://belinuxmyfriend.blogspot.com/2010/04/saber-la-ip-de-red-y-publica-con-un.html">Be Linux my Friend</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/04/24/%c2%bfcomo-conocer-mi-ip-privada-y-mi-ip-publica/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Enviar tweets desde la terminal</title>
		<link>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/</link>
		<comments>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/#comments</comments>
		<pubDate>Mon, 19 Apr 2010 11:00:30 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Consola]]></category>
		<category><![CDATA[cURL]]></category>
		<category><![CDATA[Terminal]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[webservice]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1170</guid>
		<description><![CDATA[Casi dos meses después de la última publicación, es necesario dar "señales de vida" del blog, que nunca fue discontinuado... pero que se mantuvo en "pausa" por falta de "inspiración"   Y para volver, que mejor que con un clásico: hacer "cosas" desde la terminal (hoy estoy muy "comillero") A las publicaciones de tiempo atrás [...]]]></description>
			<content:encoded><![CDATA[<p>Casi dos meses después de la última publicación, es necesario dar "señales de vida" del blog, que nunca fue discontinuado... pero que se mantuvo en "pausa" por falta de "inspiración" <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />   Y para volver, que mejor que con un clásico: hacer "cosas" desde la terminal (hoy estoy muy "comillero")</p>
<p>A las publicaciones de tiempo atrás de <a href="http://luauf.com/2009/10/27/centerim-mensajeria-instantanea-para-hombres/">Center IM</a>, <a href="http://luauf.com/2008/07/06/escuchando-musica-en-modo-texto-con-mp3blaster/">mp3blaster</a> y <a href="http://luauf.com/2008/06/20/navegando-en-modo-texto-con-lynx/">Lynx</a> hoy aprenderemos a enviar tweets desde la terminal utilizando cURL-</p>
<p align="center">
<img src="http://luauf.com/wp-content/uploads/2010/04/twitter.jpg" alt="" title="twitter" width="160" height="44" class="aligncenter size-full wp-image-1171" />
</p>
<p>cURL es una herramienta, que muy probablemente tengas instalado en tu GNU/Linux o BSD, que nos permite enviar a una datos a una URL utilizando los protocolos HTTP, HTTPS, FTP, FTPS, etc.</p>
<p><span id="more-1170"></span>Bien, enviar un tweet desde la terminal es realmente muy sencillo, basta copiar la siguiente línea:</p>
<p><codeline>curl -u usuario:password -d status="Mi primer tweet desde la terminal" http://twitter.com/statuses/update.xml<br />
</codeline></p>
<p>Donde:
<ul>
<li><strong>Usuario</strong>: es tu nombre de usuario</li>
<li><strong>Contraseña</strong>: es tu clave de acceso</li>
<li><strong>status</strong>: es el texto del tweet</li>
<li><a href="http://twitter.com/statuses/update.xml">http://twitter.com/statuses/update.xml</a>: es la URL de la <a href="http://apiwiki.twitter.com/Twitter-API-Documentation">API que ofrece Twitter</a> para el envio y recepción de datos. Verás que los tweets escritos de esta forma dirán debajo "hace 'tanto tiempo' via API"</li>
</ul>
<p>Algo que obviamente puede no gustarnos de esto es escribir, a la vista de todos, la contraseña por terminal y lo que puede ser peor, que quede en el histórico. Para lo segundo, podemos borrar el <a href="http://luauf.com/2008/08/19/utilizar-el-bash-history-a-fondo/">history</a> (history -c)</p>
<p>That's all folks.</p>
<p>Vía: <a href="http://120linux.com/twitter-desde-el-terminal/">120% Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/04/19/enviar-tweets-desde-la-terminal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Reemplazar cadenas en archivos con sed</title>
		<link>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/</link>
		<comments>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 11:00:28 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[BSD]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[editor de texto]]></category>
		<category><![CDATA[filtrado de textos]]></category>
		<category><![CDATA[flujo]]></category>
		<category><![CDATA[reemplazar texto]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[stream]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[transformacion de textos]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1165</guid>
		<description><![CDATA[sed es un "editor de textos" para el filtrado y la transformación de textos. Escribo "editor de texto" entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con "flujos", la diferencia con los editores de textos clásicos (interactivos) es que sed acepta como entrada estándar un archivo o cualquier otro stream; [...]]]></description>
			<content:encoded><![CDATA[<p><strong>sed</strong> es un "editor de textos" para el filtrado y la transformación de textos. Escribo "editor de texto" entre comillas pues en realidad sed no trabaja con cadenas de caracteres sino con "flujos", la diferencia con los editores de textos clásicos (interactivos) es que <strong>sed</strong> acepta como entrada estándar un archivo o cualquier otro stream; resultado que es procesado y devuelto a la salida estándar (vea más acerca de stdin, stdout y stderr <a href="http://luauf.com/2008/06/02/el-shell-de-unix/">aquí</a>)</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/02/seda.gif"><img class="aligncenter size-thumbnail wp-image-1169" title="seda" src="http://luauf.com/wp-content/uploads/2010/02/seda-150x150.gif" alt="" width="150" height="150" /></a></p>
<p><span id="more-1165"></span>Veamos un ejemplo muy sencillito:</p>
<div class="syntax_hilite">
<div id="code-11">
<div class="code">$ cat saludo.<span style="">txt</span><br />
hola<br />
maldito<br />
mundo</div>
</div>
</div>
<p></p>
<div class="syntax_hilite">
<div id="code-12">
<div class="code">$ sed <span style="color:#CC0000;">'2d'</span> saludo.<span style="">txt</span><br />
hola<br />
mundo</div>
</div>
</div>
<p></p>
<p>No hace mucha explicación ¿no?, el <strong>comando d</strong> recibe el número de línea a eliminar. Esto es muy sencillo y es el ejemplo más básico del uso de sed; simplemente para que te vayas amigando.</p>
<p>Ahora veamos un ejemplo similar, pero reemplazando palabras:</p>
<div class="syntax_hilite">
<div id="code-13">
<div class="code">$ sed <span style="color:#CC0000;">'s/maldito/bendito/'</span> saludo.<span style="">txt</span><br />
hola<br />
bendito<br />
mundo</div>
</div>
</div>
<p></p>
<p>Ahora usamos el<strong> comando s</strong>, éste recibe una cadena a buscar y una cadena por la que se reemplazarán las coincidencias en todos sus archivos.</p>
<p>Finalmente, para cerrar esta breve introducción a sed veamos un ejemplito propuesto en <a href="http://felinfo.blogspot.com/2010/02/reemplazar-texto-en-varios-archivos.html">Feelinfo</a> ¿Cómo reemplazar textos en varios archivos en Linux?:</p>
<p>Sabiendo que "sed -i '/s/palabra-vieja/palabra-nueva/g' *.txt" reemplaza todas las ocurrencias de la palabra vieja por palabra nueva en todos los archivos:</p>
<div class="syntax_hilite">
<div id="code-14">
<div class="code">sed -i <span style="color:#CC0000;">'s/Pepe/Jose/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Manolo/Manuel/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Nacho/Ignacio/g'</span> *.<span style="">txt</span><br />
sed -i <span style="color:#CC0000;">'s/Inma/Inmaculada/g'</span> *.<span style="">txt</span></div>
</div>
</div>
<p></p>
<p>Bien, esto es todo por ahora. Una observación para mi como para ustedes, no nos creamos que <strong>sed</strong> se limita a solo esto... manipulando flujos podemos dominar el mundo <img src='http://luauf.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  (¿no me crees? mira este rudimentario <strong>tetris</strong> escrito con <strong>sed</strong>, <a href="http://uuner.doslash.org/forfun/sedtris.sed">sedtris.sed</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/03/01/reemplazar-cadenas-en-archivos-con-sed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Script para purgado de logs o archivos temporales</title>
		<link>http://luauf.com/2010/02/08/script-para-purgado-de-logs-o-archivos-temporales/</link>
		<comments>http://luauf.com/2010/02/08/script-para-purgado-de-logs-o-archivos-temporales/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 11:00:45 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Sistemas Operativos]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[Shell scripts]]></category>
		<category><![CDATA[UNIX]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1163</guid>
		<description><![CDATA[Este es otro de mis pequeños scripts que suelo utilizar y/o adaptar para diferentes circunstancias. Un script sencillo, escrito para Korn Shell pero fácilmente portable a Bash u otro similar. Para ser ciertos, más que scripting, este ejemplo es una clase de find, un comando tan potente que casi que nos permite "programar" con find [...]]]></description>
			<content:encoded><![CDATA[<p>Este es otro de mis pequeños scripts que suelo utilizar y/o adaptar para diferentes circunstancias. Un script sencillo, escrito para Korn Shell pero fácilmente portable a Bash u otro similar.</p>
<p>Para ser ciertos, más que scripting, este ejemplo es una clase de <strong>find</strong>, un comando tan potente que casi que nos permite "programar" con <strong>find</strong> <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Antes de pasar a ver el código, comento un poco la necesidad que dió origen a este pequeño ejemplar para que tu puedas interpretarlo y, por que no, adaptarlo a tu necesidad.</p>
<p>La cuestión es así, mis aplicaciones y procesos sin logs no tienen razón de ser, todo se loguea, con fines de detectar anomalías, ver errores de software e incluso para hacer auditorias.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2010/02/LogFile.png"><img class="aligncenter size-medium wp-image-1164" title="LogFile" src="http://luauf.com/wp-content/uploads/2010/02/LogFile-300x134.png" alt="" width="300" height="134" /></a></p>
<p><span id="more-1163"></span>El uso excesivo de logs nos lleva a la necesidad de la existencia de una rotación o depuración de los mismos; para esa ocasión, tan solo con un <strong>find</strong> bien robusto podemos hacer esta purga.</p>
<p>Veamos el ejemplo y analicemos brevemente el código:</p>
<p>MantenimientoLogs.sh:</p>
<div class="syntax_hilite">
<div id="code-17">
<div class="code">#!/bin/ksh</p>
<p>Log<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; date <span style="color:#CC0000;">"+%Y/%m/%d %H:%M:%S, $0, $1"</span> <br />
<span style="color:#006600; font-weight:bold;">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p>
<p>echo <br />
Log <span style="color:#CC0000;">"*** $0 Init ***"</span></p>
<p>cfgFile=$<span style="color:#800000;">1</span></p>
<p>if test -z <span style="color:#CC0000;">"$"</span>; then<br />
&nbsp; &nbsp; Log <span style="color:#CC0000;">"No se especifico archivo de configuracion"</span><br />
&nbsp; &nbsp; Log <span style="color:#CC0000;">"Termina!"</span><br />
&nbsp; &nbsp; exit <span style="color:#800000;">1</span><br />
fi</p>
<p>
if test ! -f <span style="color:#CC0000;">"$cfgFile"</span>; then<br />
&nbsp; &nbsp; Log <span style="color:#CC0000;">"No se encuentra el archivo de configuracion: [$cfgFile]"</span><br />
&nbsp; &nbsp; Log <span style="color:#CC0000;">"Termina!"</span><br />
&nbsp; &nbsp; exit <span style="color:#800000;">3</span><br />
fi</p>
<p>. $cfgFile&nbsp; &nbsp; # include</p>
<p>
Log <span style="color:#CC0000;">"Purgo logs ($datePurge dias)"</span><br />
find $pathLogs \<span style="color:#006600; font-weight:bold;">&#40;</span> -name <span style="color:#CC0000;">"*.*~"</span> -o -name <span style="color:#CC0000;">"*.log"</span> \<span style="color:#006600; font-weight:bold;">&#41;</span>&nbsp; -ctime +$datePurge -exec <span style="color:#CC0000;">"rm -v {}"</span></p>
<p>Log <span style="color:#CC0000;">"Terminamos!"</span></div>
</div>
</div>
<p></p>
<p>MantenimientoLogs.cfg</p>
<div class="syntax_hilite">
<div id="code-18">
<div class="code"># path del directorio de logs<br />
pathLogs=/var/log/myapp/</p>
<p>typeset -i datePurge<br />
# tiempo que mantengo los logs<br />
datePurge=<span style="color:#800000;">30</span>*<span style="color:#800000;">3</span>&nbsp;&nbsp; &nbsp; #tres meses</div>
</div>
</div>
<p></p>
<p>El primero de los archivos es el que hace el trabajo, el segundo es solamente de configuración. El primero recibe como argumento el segundo. El único motivo de este desacople es que cuando haya algo de configuración que modificar, se haga en el archivo cfg y no en el script de mantenimiento que es el que tiene la lógica.</p>
<p>En MantenimientoLogs.cfg solo configuro el directorio que quiero purgar, y la cantidad de días que pretendo mantener los logs.</p>
<p>MantenimientoLogs.sh tiene la "lógica", entre comillas ya que no hay mucho que decir de la misma sino más bien del <strong>find</strong>. En este script lo primero que vemos es una función Log, que hace de<strong> echo</strong> pero que agrega la fecha a cada línea. Luego se hace una especie de "include" del archivo de configuración (recibido como parámetro), previo chequeo de la existencia del argumento y la existencia del archivo.  Y luego viene todo el trabajo, que lo hace el <strong>find</strong>.</p>
<p>El<strong> find</strong> en el caso del script busca todos los archivos .sql o .*~ cuya fecha de modificación sea más de N días (donde N es $datePurge y $datePurge lo habiamos configurado en el cfg). Y finalizando esta línea, a los resultados del <strong>find</strong> les ejecuta la acción "<strong>rm -v</strong>".</p>
<p>Este script es muy sencillo, no tiene nada de otro mundo, pero fue escrito para una situación muy particular que me surgió. Para mi, con una experiencia en escritura de shell scripts muy pobre, este es un buen inicio y cumplió mi cometido. Para quienes les resulte insuficiente sepan disculpar, algo es algo, al menos no es un Hola Mundo <img src='http://luauf.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2010/02/08/script-para-purgado-de-logs-o-archivos-temporales/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Breve script para buscar en la Wikipedia desde la consola</title>
		<link>http://luauf.com/2009/10/22/breve-script-para-buscar-en-la-wikipedia-desde-la-consola/</link>
		<comments>http://luauf.com/2009/10/22/breve-script-para-buscar-en-la-wikipedia-desde-la-consola/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 03:01:04 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Miscelaneas]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[buscar]]></category>
		<category><![CDATA[Consola]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[wikipedia]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1118</guid>
		<description><![CDATA[Esta publicación es pequeña pero muy efectiva, básicamente se trata de un script para buscar en la wikipedia desde la consola, valiéndose simplemente del comando dig. A continuación el script y un ejemplo. El script: $ cat buscaWikipedia.sh #!/bin/sh dig +short txt $&#123;1&#125;.wp.dg.cx Asignación de permiso de ejecución: chmod +x buscaWikipedia.sh Ejecución y salida: ./buscaWikipedia.sh [...]]]></description>
			<content:encoded><![CDATA[<p>Esta publicación es pequeña pero muy efectiva, básicamente se trata de un script para buscar en la wikipedia desde la consola, valiéndose simplemente del comando <strong>dig</strong>.</p>
<p style="text-align: center;"><a href="http://luauf.com/wp-content/uploads/2009/10/terminal.png"><img class="alignnone size-medium wp-image-1120" title="terminal" src="http://luauf.com/wp-content/uploads/2009/10/terminal-300x98.png" alt="terminal" width="300" height="98" /></a></p>
<p><span id="more-1118"></span>A continuación el script y un ejemplo.</p>
<p>El script:</p>
<div class="syntax_hilite">
<div id="code-22">
<div class="code">$ cat buscaWikipedia.<span style="">sh</span><br />
#!/bin/sh<br />
dig +short txt $<span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">wp</span>.<span style="">dg</span>.<span style="">cx</span></div>
</div>
</div>
<p></p>
<p>Asignación de permiso de ejecución:</p>
<div class="syntax_hilite">
<div id="code-23">
<div class="code">chmod +x buscaWikipedia.<span style="">sh</span></div>
</div>
</div>
<p></p>
<p>Ejecución y salida:</p>
<div class="syntax_hilite">
<div id="code-24">
<div class="code">./buscaWikipedia.<span style="">sh</span> spanglish<br />
<span style="color:#CC0000;">"Spanglish refers to the code-switching of <span style="color:#000099; font-weight:bold;">\"</span>English<span style="color:#000099; font-weight:bold;">\"</span> and <span style="color:#000099; font-weight:bold;">\"</span>Spanish<span style="color:#000099; font-weight:bold;">\"</span>, in the speech of the Hispanic population of the United States, Gibraltar and most of the spanish holiday resorts, who are exposed to both Spanish and English. http://en.wikipedia.org/wiki/"</span> <span style="color:#CC0000;">"Spanglish"</span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://paindev.wordpress.com/2009/08/31/un-script-para-buscar-en-wikipedia/">Pain Dev</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/10/22/breve-script-para-buscar-en-la-wikipedia-desde-la-consola/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trappear Ctrl+C en bash</title>
		<link>http://luauf.com/2009/06/24/trappear-ctrlc-en-bash/</link>
		<comments>http://luauf.com/2009/06/24/trappear-ctrlc-en-bash/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 08:00:30 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[archivos de lockeo]]></category>
		<category><![CDATA[archivos temporales]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[lock]]></category>
		<category><![CDATA[robusto]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[script robust]]></category>
		<category><![CDATA[tappear]]></category>
		<category><![CDATA[trap]]></category>
		<category><![CDATA[trappear]]></category>
		<category><![CDATA[trapper]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1065</guid>
		<description><![CDATA[En alguna ocasión, puede resultar útil trappear señales en los shell scripts. Un ejemplo clásico de señal a trapear es el famoso Ctrl+C (^C). Trappear una señal es fácil, simplemente debemos definir una acción (o función) que se ejecutará al momento de recibir la señal, y luego definir las señales a trappear con el comando [...]]]></description>
			<content:encoded><![CDATA[<p>En alguna ocasión, puede resultar útil trappear señales en los<strong> shell scripts</strong>. Un ejemplo clásico de señal a trapear es el famoso <strong>Ctrl+C</strong> (^C).</p>
<p>Trappear una señal es fácil, simplemente debemos definir una acción (o función) que se ejecutará al momento de recibir la señal, y luego definir las señales a trappear con el comando <strong>trap</strong>.</p>
<p><span id="more-1065"></span>Un ejemplo sencillo:</p>
<div class="syntax_hilite">
<div id="code-26">
<div class="code">#!/bin/bash</p>
<p>function trapper <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; echo <span style="color:#CC0000;">"Signal trapped"</span><br />
<span style="color:#006600; font-weight:bold;">&#125;</span></p>
<p>trap trapper EXIT</p>
<p>while true;<br />
do<br />
&nbsp; &nbsp; echo <span style="color:#CC0000;">"I'm alive"</span><br />
&nbsp; &nbsp; sleep <span style="color:#800000;">1</span><br />
done</div>
</div>
</div>
<p></p>
<p>Realicemos un análisis rapido. El script imprime en la salida estándar un mensaje "I'm alive" cada  segundo. La ejecución no termina a menos que enviemos una señal (while true;). Al presionar Ctrl+C estamos enviando la señal de EXIT, esta señal es interceptada y dirigida la ejecución a la función trapper, esto gracias a que antes con<strong> trap</strong> definimos la acción a tomar ante la <strong>señal</strong>.</p>
<p>Así como trapeamos la señal EXIT, podemos trapear varias señales, puedes consultar el comando kill para consultar las distintas señales que se pueden enviar sobre un proceso en ejecución.</p>
<p>El uso del trapeo de señales se utiliza en los scripts para no dejar el sistema de archivos en un estado inconsistente; cosas como archivos de bloqueo, archivos temporales o archivos que has actualizado y no puedes asegurar su integridad. Ante casos como éstos, es común encontrar scripts que ante señal de EXIT (como en el ejemplo) eliminan archivos temporales o de lockeo o crean una suerte de "rollback" de las acciones ejecutadas.</p>
<p>Si quieres escribir un<strong> script robusto</strong>, es muy probable que requieras de trapear, por lo tanto, <strong>agéndalo</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/24/trappear-ctrlc-en-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Declaración de variables en Bash</title>
		<link>http://luauf.com/2009/06/12/declaracion-de-variables-en-bash/</link>
		<comments>http://luauf.com/2009/06/12/declaracion-de-variables-en-bash/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 09:00:38 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[atribuir]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[declarar]]></category>
		<category><![CDATA[declare]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[tipados]]></category>
		<category><![CDATA[tipar]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=1044</guid>
		<description><![CDATA[No suele ser costumbre utilizar la instrucción declare en Bash, de echo, hasta algunos quizás no la conozcan. Lo cierto es que Bash, al no ser un lenguaje fuertemente tipado y no requerir la declaración explícita de variables, nos permite prescindir de su utilización. No obstante esto, si declaramos las variables podemos lograr algunos beneficios [...]]]></description>
			<content:encoded><![CDATA[<p>No suele ser costumbre utilizar la instrucción <strong>declare</strong> en Bash, de echo, hasta algunos quizás no la conozcan. Lo cierto es que Bash, al no ser un lenguaje fuertemente tipado y no requerir la declaración explícita de variables, nos permite prescindir de su utilización.</p>
<p>No obstante esto, si declaramos las variables podemos lograr algunos beneficios para casos puntuales, hasta incluso evitar errores de ejecución.</p>
<p>A continuación veremos algunos ejemplos para saber de que estamos hablando con esto de declarar las variables en Bash.</p>
<p><span id="more-1044"></span></p>
<p>En el primer ejemplo veremos como forzar a una variable para que sea de lectura, por lo tanto invariable:</p>
<p><codeline>declare -r variable</codeline></p>
<p>Así, un ejemplo como el siguiente:#!/bin/bash</p>
<div class="syntax_hilite">
<div id="code-31">
<div class="code">v=<span style="color:#800000;">6</span><br />
declare -r v<br />
echo $v<br />
a=<span style="color:#800000;">0</span><br />
echo $v</div>
</div>
</div>
<p>
Devolvería:</p>
<div class="syntax_hilite">
<div id="code-32">
<div class="code"><span style="color:#800000;">6</span><br />
line <span style="color:#800000;">6</span>: v: variable de solo lectura</div>
</div>
</div>
<p>
Para tipar datos, por ejemplo, declarar una variable como numérica entera, utilizamos:<br />
<codeline>declare -i variable</codeline></p>
<p>Así:</p>
<div class="syntax_hilite">
<div id="code-33">
<div class="code">#!/bin/bash</p>
<p>declare -i n<br />
n=<span style="color:#800000;">30</span><br />
echo $a<br />
a=veinte<br />
echo $a</div>
</div>
</div>
<p></p>
<p>Devolvería:</p>
<div class="syntax_hilite">
<div id="code-34">
<div class="code"><span style="color:#800000;">30</span><br />
<span style="color:#800000;">0</span></div>
</div>
</div>
<p></p>
<p>La instrucción declare tiene un alcance mucho mayor, por ejemplo con el argumento <strong>-a</strong> se pueden declarar arrays, con <strong>-f</strong> se pueden crear funciones, con <strong>-x</strong> se pueden exportar variables de entorno,  etc. Por lo pronto, el objetivo está cumplido: saber que existe.</p>
<p>Vía: <a href="http://comulinux.blogspot.com/2009/04/la-instruccion-declare-en-bash.html">Noticias Interesantes de Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2009/06/12/declaracion-de-variables-en-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ejemplos de loops en Bash</title>
		<link>http://luauf.com/2008/12/24/ejemplos-de-loops-en-bash/</link>
		<comments>http://luauf.com/2008/12/24/ejemplos-de-loops-en-bash/#comments</comments>
		<pubDate>Thu, 25 Dec 2008 01:31:33 +0000</pubDate>
		<dc:creator>Luciano</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[LOOP]]></category>
		<category><![CDATA[scripts]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://luauf.com/?p=743</guid>
		<description><![CDATA[Muchas veces el poco conocimiento acerca de la programación de shell scripts y el propio intérprete de comandos hace que hagamos el doble de trabajo para trabajos simples que se pueden resolver con un sencillo script. Por tal motivo y con ánimo a conocer un poco más acerca de algún shell de Unix, veremos algunos [...]]]></description>
			<content:encoded><![CDATA[<p>Muchas veces el poco conocimiento acerca de la programación de shell scripts y el propio intérprete de comandos hace que hagamos el doble de trabajo para trabajos simples que se pueden resolver con un sencillo script.</p>
<p>Por tal motivo y con ánimo a conocer un poco más acerca de algún <a href="http://luauf.com/2008/06/02/el-shell-de-unix/">shell</a> de Unix, veremos algunos ejemplos cuidadosamente explicados de como hacer loops en Bash (el shell sucesor del Bourne y escrito para el proyecto GNU).</p>
<p><span id="more-743"></span></p>
<p>'for loop' es una declaración del leguaje de programación de scripts Bash que permite ejecutar un loop repetidamente. Por ejemplo, para ejecutar una tarea o comando cinco veces puedes hacer algo como lo siguiente:</p>
<div class="syntax_hilite">
<div id="code-45">
<div class="code">#!/bin/bash<br />
for i in <span style="color:#800000;">1</span> <span style="color:#800000;">2</span> <span style="color:#800000;">3</span> <span style="color:#800000;">4</span> <span style="color:#800000;">5</span><br />
do<br />
&nbsp; echo <span style="color:#CC0000;">"Welcome $i times"</span><br />
done</div>
</div>
</div>
<p></p>
<p>En este tipo de loop se ve que  los valores que tomará la variable i están especificados luego del <strong>in</strong>. El loop ejecuta una secuencia de comandos de cada uno de los miembros de la <strong>lista</strong> de <strong>items</strong>.  Los <strong>miembros</strong> de la lista no tienen por que ser siempre números, se puede escribir algo así:</p>
<div class="syntax_hilite">
<div id="code-46">
<div class="code">#!/bin/bash<br />
for i in <span style="color:#CC0000;">"Juan"</span> <span style="color:#CC0000;">"Pepe"</span> <span style="color:#CC0000;">"Jose"</span><br />
do<br />
&nbsp; echo <span style="color:#CC0000;">"Welcome $i times"</span><br />
done</div>
</div>
</div>
<p></p>
<p>O así también, combinando distintos tipos de datos:</p>
<div class="syntax_hilite">
<div id="code-47">
<div class="code">#!/bin/bash<br />
for i in <span style="color:#CC0000;">"Juan"</span> <span style="color:#800000;">1</span> <span style="color:#CC0000;">"Jose"</span> <span style="color:#800000;">2</span> <span style="color:#CC0000;">"Pepe"</span><br />
do<br />
&nbsp; echo <span style="color:#CC0000;">"Welcome $i times"</span><br />
done</div>
</div>
</div>
<p></p>
<p>Ahora, si queremos especificar un rango de valores, podemos requerir los servicios del comando<strong> seq</strong> y combinarlo con el for loop de la siguiente forma:</p>
<div class="syntax_hilite">
<div id="code-48">
<div class="code">#!/bin/bash<br />
for i in $<span style="color:#006600; font-weight:bold;">&#40;</span>seq <span style="color:#800000;">1</span> <span style="color:#800000;">2</span> <span style="color:#800000;">20</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
do<br />
&nbsp; echo <span style="color:#CC0000;">"Welcome $i times"</span><br />
done</div>
</div>
</div>
<p></p>
<p>De esta forma, el for se hace en una lista de elementos que devuelve el <strong>seq</strong>. Pero no puedo dejar el tema aquí si no explico brevemente el uso de este comando. La función de seq es básicamente imprimir un listado de números. seq recibe uno, dos o tres parámetros e imprime el listado desde el primero al último según un incremento dado (o no)</p>
<div class="syntax_hilite">
<div id="code-49">
<div class="code">seq LAST<br />
seq FIRST LAST<br />
seq FIRST INCREMENT LAST</div>
</div>
</div>
<p></p>
<p>Por ejemplo:</p>
<div class="syntax_hilite">
<div id="code-50">
<div class="code">$ seq <span style="color:#800000;">2</span><br />
<span style="color:#800000;">1</span><br />
<span style="color:#800000;">2</span><br />
$ seq <span style="color:#800000;">2</span> <span style="color:#800000;">6</span><br />
<span style="color:#800000;">2</span><br />
<span style="color:#800000;">3</span><br />
<span style="color:#800000;">4</span><br />
<span style="color:#800000;">5</span><br />
<span style="color:#800000;">6</span><br />
$ seq <span style="color:#800000;">0</span> <span style="color:#800000;">2</span> <span style="color:#800000;">10</span><br />
<span style="color:#800000;">0</span><br />
<span style="color:#800000;">2</span><br />
<span style="color:#800000;">4</span><br />
<span style="color:#800000;">6</span><br />
<span style="color:#800000;">8</span><br />
<span style="color:#800000;">10</span><br />
$</div>
</div>
</div>
<p></p>
<p>Volviendo al tema que nos compete, "for loops", veremos la sintaxis de tres expresiones, sintaxis que viene heredada del queridisimo C. Donde las tres expresiones utilizadas por el for representan, un inicializador, una condición de loop y un contador.</p>
<div class="syntax_hilite">
<div id="code-51">
<div class="code">#!/bin/bash<br />
for <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span>i=<span style="color:#800000;">0</span>;i&amp;lt;<span style="color:#800000;">3</span>;i++<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; <br />
do<br />
&nbsp; echo <span style="color:#CC0000;">"Welcome $i times"</span><br />
done</div>
</div>
</div>
<p></p>
<p>En el anterior ejemplo, se inicializa la variable i en 0, la misma se va incrementando en uno en cada pasada y el loop se realizará siempre y cuando i sea menor que tres.</p>
<p>Con esta estructura de control también se puede realizar un loop infinito, por ejemplo:</p>
<div class="syntax_hilite">
<div id="code-52">
<div class="code">#!/bin/bash<br />
for <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#40;</span>;;<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>; do<br />
&nbsp; echo <span style="color:#CC0000;">"infinite loops [ hit CTRL+C to stop]"</span><br />
done</div>
</div>
</div>
<p></p>
<p>Para quienes vienen de C, también será facil de explicar con el siguiente ejemplo, el funcionamiento del break para salir del loop o el continue para forzar una continuación del loop:</p>
<div class="syntax_hilite">
<div id="code-53">
<div class="code">for I in <span style="color:#800000;">1</span> <span style="color:#800000;">2</span> <span style="color:#800000;">3</span> <span style="color:#800000;">4</span> <span style="color:#800000;">5</span><br />
do<br />
&nbsp; statements1<br />
&nbsp; statements2</p>
<p>&nbsp; if <span style="color:#006600; font-weight:bold;">&#40;</span>disaster-condition<span style="color:#006600; font-weight:bold;">&#41;</span> <br />
&nbsp; then<br />
&nbsp; &nbsp; break              #Abandon the loop.<br />
&nbsp; <span style="">fi</span></p>
<p>&nbsp; if <span style="color:#006600; font-weight:bold;">&#40;</span>condition<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; then<br />
&nbsp; &nbsp; continue      #Go to next iteration of I in the loop and skip<br />
&nbsp; fi</p>
<p>&nbsp; statements3<br />
done</div>
</div>
</div>
<p></p>
<p>Finalizando y para no aburrirlos más, antes de que te pongas a escribir tus primeros <strong>for</strong> en bash, veremos que el uso del for también puede ser aplicado sobre un listado de archivos de un directorio. El siguiente scritp recorre los archivo guardados en el directorio /etc hasta encontrar el archivo resolv.conf</p>
<div class="syntax_hilite">
<div id="code-54">
<div class="code">#!/bin/bash<br />
for file in /etc<span style="color:#008000;">/*<br />
do<br />
&nbsp; if [ &quot;${file}&quot; == &quot;/etc/resolv.conf&quot; ]<br />
&nbsp; then<br />
&nbsp; &nbsp; countNameservers=$(grep -c nameserver /etc/resolv.conf)<br />
&nbsp; &nbsp; echo &quot;Total  ${countNameservers} nameservers defined in ${file}&quot;<br />
&nbsp; &nbsp; break<br />
&nbsp; fi<br />
done </span></div>
</div>
</div>
<p></p>
<p>Vía: <a href="http://www.cyberciti.biz/faq/bash-for-loop/" target="_blank">mixCraft</a></p>
]]></content:encoded>
			<wfw:commentRss>http://luauf.com/2008/12/24/ejemplos-de-loops-en-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

