BASH – Script para controlar espacio en disco.

           Script bash para vigilar en nuestros servidores linux el tamaño de disco de los sistemas operativos, para que nos advierta antes de que se llene.
#!/bin/bash
used=`df -h | grep usr02 | awk {'print $5'}`
USADO=${used/\%/}
if [ $USADO -gt 75 ];
then
echo "WARNING! El disco se est\341 llenando. El espacio utilizado = $USADO %" | mail -s "DISK" direccioemal@dominio.email
fi

Publicado en Unix - Linux | Deja un comentario

BASH – Creación de un bucle infinito.

#!/bin/bash
n=1
while :
do
         printf "The current value of n=$nn"
         if [ $n == 3 ]
         then
                   echo "good"
         elif [ $n == 5 ]
         then
                  echo "bad"
         elif [ $n == 7 ]
         then
                  echo "ugly"
         elif [ $n == 10 ]
         then
                   exit 0
         fi
         ((n++))
done
Publicado en Unix - Linux | Deja un comentario

BASH – Manipulación de cadenas de texto.-

Extraer subcadena

            Mediante ${cadena:posicion:longitud} podemos extraer una subcadena de otra cadena. Si omitimos :longitud, entonces extraerá todos los caracteres hasta el final de cadena.

            Por ejemplo en la cadena string=abcABC123ABCabc:

•	echo ${string:0} : abcABC123ABCabc
•	echo ${string:0:1} : a (primer caracter)
•	echo ${string:7} : 23ABCabc
•	echo ${string:7:3} : 23A (3 caracteres desde posición 7)
•	echo ${string:7:-3} : 23ABCabc (desde posición 7 hasta el final)
•	echo ${string: -4} : Cabc (atención al espacio antes del menos)
•	echo ${string: -4:2} : Ca (atención al espacio antes del menos)

             Borrar subcadena

             Hay diferentes formas de borrar subcadenas de una cadena:

•	${cadena#subcadena} : borra la coincidencia más corta de subcadena desde el principio de cadena
•	${cadena##subcadena} : borra la coincidencia más larga de subcadena desde el principio de cadena
Por ejemplo, en la cadena string=abcABC123ABCabc:
•	echo ${string#a*C} : 123ABCabc
•	echo ${string##a*C} : abc

Reemplazar subcadena

                También existen diferentes formas de reemplazar subcadenas de una cadena:

•	${cadena/buscar/reemplazar} : Sustituye la primera coincidencia de buscar con reemplazar
•	${cadena//buscar/reemplazar} : Sustituye todas las coincidencias de buscar con reemplazar
Por ejemplo, en la cadena string=abcABC123ABCabc:
•	echo ${string/abc/xyz} : xyzABC123ABCabc.
•	echo ${string//abc/xyz} : xyzABC123ABCxyz.

Publicado en BATCH - DOS | Deja un comentario

BASH – Algunos códigos obtenidos desde la WEB.-

#!/bin/bash
read -p "Please input the operation (create or delete ): " OPERATION   
// Ingrese la acción que desea realizar
case $OPERATION in
    create)              // El primer caso: crear
    read -p "Please input the userfile : "   USERFILE     // Solicitar archivo de entrada
    [ -e $USERFILE ] || {                                  // Determinar si existe
        echo "$USERFILE is not exist "
        exit 1
        }
    read -p "Please input the passwdfile :  " PASSFILE
    [ -e $PASSFILE ] || {
        echo "$PASSFILE is not exist "
        exit 1
        }
    USERLINE=`awk 'BEGIN{N=0}{N++}END{print N}' $USERFILE`  // Calcular el número de líneas de archivo de archivo de usuario
    for LINE_NUM in `seq 1 $USERLINE`  // usa loop para construir
    do
        USERNAME=`sed -n "${LINE_NUM}p" $USERFILE` // Intercepta la primera línea del archivo de archivo de usuario
        PASSWORD=`sed -n "${LINE_NUM}p" $PASSFILE` // Intercepta la primera línea del archivo de passfile
        useradd $USERNAME                                // Crear usuario
        echo $PASSWORD | passwd --stdin $USERNAME
    done
    ;;
    delete)      // La segunda situación: eliminar
    read -p "Please input the userfile : "   USERFILE
    [ -e $USERFILE ] || {
        echo "$USERFILE is not exist "
        exit 1
        }
    USERLINE=`awk 'BEGIN{N=0}{N++}END{print N}' $USERFILE`
    for LINE_NUM in `seq 1 $USERLINE`
    do
                USERNAME=`sed -n "${LINE_NUM}p" $USERFILE`
                userdel -r $USERNAME
    done
    ;;
    *)                       // La tercera situación: las diversas situaciones restantes
    echo Eorror!
    ;;
Esac
#!/bin/bash
/usr/bin/expect << EOF     // Cambiar al entorno esperado
spawn ssh root@$1        // IP de conexión ssh
expect {
    "yes/no" { send "yes\r";exp_continue }   // Confirma la conexión
    "password" { send "$2\r" }              // Ingrese la contraseña
}
Interact               // reservado
EOF                   // salir

#!/bin/bash
Auto_Connect()
{
/usr/bin/expect << EOF
set timeout 5
spawn ssh root@172.25.254.$IP_NUM hostname
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" { send "westos\r" }
}
expect eof
EOF
}
for IP_NUM in {71..72}
do
    ping -c1 -w1 172.25.254.$IP_NUM &> /dev/null && {
    Host_Name=`Auto_Connect | grep -E "authenticity|fingerprint|connecting|password|spawn|Warning" -v`   // Filtrar advertencias y otras declaraciones
    }
    echo "      $Host_Name 172.25.254.$IP_NUM"
done

#!/bin/bash
Auto_Connect()
{
/usr/bin/expect << EOF
set timeout 5
spawn ssh root@172.25.254.$IP_NUM hostname
expect {
    yes/no { send "yes\r";exp_continue }
    password { send "redhat\r" }
}
expect eof
EOF
}
for IP_NUM in {226..227}
do
    ping -c1 -w1 172.25.254.$IP_NUM &> /dev/null && {
        Host_Name=`Auto_Connect | grep -E "authenticity|fingerprint|connecting|password|spawn|Warning" -v`
    }
    echo  "$Host_Name 172.25.254.$IP_NUM " | sed 's/\r//g'     // Reemplazar / r del texto completo con vacío.
Done

#!/bin/bash
Auto_Discuz()
{
/usr/bin/expect << EOF
set timeout 30
spawn ssh root@$1
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" { send "westos\r" }
}
expect "]#" { send "yum install httpd -y\r" }
expect "]#" { send "yum install mariadb-server -y\r"}
expect "]#" { send "yum install php-mysql.x86_64 -y\r"}
expect "]#" { send "systemctl start httpd\r" }
expect "]#" { send "systemctl start mariadb\r" }
expect eof
EOF
}
Auto_Connect()
{
/usr/bin/expect  << EOF
set timeout 30
spawn ssh root@$1
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" { send "westos\r" }
}
expect "]#" { send "cd /var/www/html/\r" }
expect "]#" { send "unzip /var/www/html/Discuz_X3.2_SC_UTF8.zip >> /dev/null \r" }
expect "]#" { send "chmod 777 /var/www/html/upload/ -R\r" }
expect "]#" { send "systemctl restart httpd\r" }
expect eof
EOF
}
Auto_Httpd()
{
/usr/bin/expect << EOF
set timeout 30
spawn ssh root@$1
expect {
    "yes/no" { send "yes\r";exp_continue }
    "password:" { send "westos\r" }
}
expect "]#" { send "sed "/^Listen/cListen 8080" -i /etc/httpd/conf/httpd.conf\r" }
expect "]#" { send "yum restart httpd -y\r" }
expect eof
EOF
}
yum install expect -y
Auto_Discuz $1
scp /home/kiosk/Downloads/Discuz_X3.2_SC_UTF8.zip root@$1:/var/www/html
Auto_Connect $1
firefox -new-tab $1/upload/install
Auto_Httpd $1

Publicado en Unix - Linux | Deja un comentario

LINUX – BASH script comando UNTIL.-

#!/bin/sh

CONTADOR=0
until [ $CONTADOR – ge 3]; do
    echo El contador es $CONTADOR
    CONTADOR=$(($CONTADOR+1))
done

Publicado en Unix - Linux | 2 comentarios

LINUX – Comandos Lsattr y chattr: leer y establecer atributos especiales (Bit Inmutable o Bit Append Only).

Además de los permisos de lectura, escritura, y de ejecución asociados con el dueño, el grupo propietario y el resto de los usuarios del sistema, Linux nos permite establecer otros atributos en archivos y directorios. Por muchos motivos, podemos necesitar que ciertos archivos dentro de un sistema Linux tengan una protección total ante su borrado, incluso para usuarios administradores (root) quienes por equivocación o descuido, pudieran borrar ese fichero.

El comando lsattr nos permite leer los atributos especiales que pudiese tener activado un directorio o un archivo en particular :

lsattr prueba.log
---------------- prueba.log

Para bloquear el borrado o modificación de un fichero para cualquier usuario de un sistema, necesitamos configurar el bit «immutable», +i del comando chattr (Esta acción se debe realizar con cuenta root). Para quitar el atributo se realiza con el parámetro -i :

chattr +i prueba.log
lsattr prueba.log
----i----------- prueba.log

Para evitar borrar o modificar información de un archivo, se realiza configurando el bit «append only». Esto es muy útil para proteger los archivos de log. Para quitar el atributo se realiza con el parámetro -a :

chattr +a prueba.log
lsattr prueba.log
-----a---------- prueba.log
Publicado en Unix - Linux | 3 comentarios

Renombrar varios archivos a la vez, en lote, desde consola (linux).-

1) Añadir algo tras una parte del nombre del archivo que es común en todos los ficheros.
Ejemplo:
imagenXXXX.jpg por imagen_NEW_XXXX.jpg

# rename -v -n 's/imagen/imagen_NEW_/' *.jpg

2) Renombrar un grupo de imágenes con nombres diferentes. Si tenemos un grupo de imágenes (por ejemplo PNG) a las que les queremos añadir una información en la parte final del nombre de la imagen antes de la extensión.
Ejemplo:
nombreimagen.png por nombreimagen_150x150.png

# rename -v -n 's/\.png/\_150x150.png/' *.png

3) Vamos a suponer que queremos reemplazar los guiones bajos por guiones medios («_» por «-«) en los nombres de nuestros archivos de un directorio determinado.

# rename -v -n 's/_/-/' *.jpg

4) Añadir texto al inicio del nombre del fichero. Con el carácter ^ le indicamos al comando rename que se sitúe en el comienzo del nombre del fichero y ahí inserte o ejecute la segunda parte.
Ejemplo:
leccion 1.doc,
leccion 2.doc …
por
tema – leccion 1.doc,
tema – leccion 2.doc …

# rename -v -n 's/^/tema – /' *.doc

5) Si queremos eliminar varios caracteres antes de un punto de corte determinado.
Ejemplo:
texto1_abc_001_small.jpg,
texto2_abc_002_small.jpg,
texto3_abc_003_small.jpgpor
texto1_small.jpg,
texto2_small.jpg,
texto3_small.jpg
Utilizamos para el corte la cadena «_small» y le decimos que nos elimine los 8 caracteres (\w) anteriores, o los reemplace por lo que indiquemos en la segunda parte del comando rename.

# rename -v -n 's/\w{8}\_small/_small/' *.jpg

5b) Si queremos reemplazar desde un punto determinado de corte, pero respetando un número concreto de caracteres numéricos antes de la parte donde se produce el corte. Para este caso usamos el elemento «$1» en la cadena de la parte derecha, para que nos coja esa variable obtenida de la parte izquierda.  Viendo el ejemplo se entenderá mejor.
Ejemplo:
texto1_uno001_small.jpg,
texto2_otro002_small.jpg,
texto3_cualquiera003_small.jpg …por
texto1_uno_ADD-001_small.jpg,
texto2_otro_ADD-002_small.jpg,
texto3_cualquiera_ADD-003_small.jpg …

Utilizamos para el corte la cadena «_small» y le decimos que nos guarde los 3 caracteres numéricos (\d) anteriores (001, 002, 003…) utilizando el $1 en la segunda parte del comando (la expresión de la derecha) Nos añadirá o modificara lo indicado en la segunda parte del comando rename justo antes de esos 3 caracteres reservados antes del corte.

# rename -v -n 's/(\w{3})\_small/_ADD–$1_small/' *.jpg

6) Cambiar mayúsculas y minúsculas.
Ejemplo:
mi_fichero.txt por MI_FICHERO.TXT

# rename -v -n 'y/a-z/A-Z/' *.txt

7) Eliminar del nombre del fichero caracteres especiales que no están entre la letra a y la z (a-z) . Dejando en el nombre del fichero solo caracteres alfanuméricos.
Ejemplo:
mi-fichero.txt por mifichero.txt

# rename -v -n 'v/[^a-z]//' *.*

Para cambiar varios caracteres lo ejecutamos varias veces:
Ejemplo:
mi-fichero-con-varios-caracteres.txt por mificheroconvarioscaracteres.txt
Lo ejecutaremos 4 veces.

Publicado en Unix - Linux | Deja un comentario

BASH – Creador de directorios con bash scripting.-

Lo que queremos hacer es lo siguiente, primero comprobar si el directorio que nosotros indicamos ya existe, y si existe obviamente no lo vamos a crear, pero vamos a informar al usuario de que ya existe, con un texto personalizado. En caso contrario, si este directorio no existe, vamos a crearlo.

Como es una buena práctica controlar los procesos para saber si han funcionado bien o no, crearemos un mensaje personalizado para que el usuario tenga más información. Para ello evaluaremos si la ejecución anterior ha ido bien o mal, indicando al usuario con un texto personalizado si el directorio se ha creado con éxito o no.

#!/bin/bash

for dir in $@
do
  if [ -d $dir ]
  then
    echo “La capeta $dir ya existe.”
Else
    mkdir $dir
    if [ $? -eq 0 ]
    then
      echo “$dir se ha creaco con éxito”
    else
      echo “Ups! Algo ha fallado al crear $dir”
    fi
  fi
done

Publicado en Unix - Linux | Deja un comentario

LINUX – Comando cp de Linux. Un par de trucos útiles.-

El comando cp en GNU/Linux sirve para copiar un archivo o carpeta trabajando en la línea de comandos. Pero esconde muchas opciones.

cp -r -u -v Fotos_movil /run/media/Datos
o
cp -ruv Fotos_movil /run/media/Datos

A la opción ya conocida de -r (recursive) para que copie la carpeta Fotos_movil y todo el contenido de la misma, hemos añadido la opción -u (“update“) para que actualice el contenido en la carpeta destino y sólo copie aquellas fotos o datos que no estuvieran ya en el destino. Y con la opción -v (“verbose“) el comando muestra en pantalla las tareas que va realizando.

cp --force --backup=numbered texto.md texto.md

Imaginemos que estamos trabajando en un archivo llamado texto.md y lo estamos modificando, pero queremos tener una copia de seguridad o backup, de los distintos archivos antes de ir modificándolos, es aquí cuando el comando cp hace su magia.

En el comando lo que hacemos es copiar el mismo archivo encima de sí mismo. Esto con el comando cp no se puede hacer, pero en este caso especial queremos que sea así por tanto forzamos al comando que lo haga con la opción –force

La opción –backup=numbered le dice al comando que quiero hacer un backup del archivo indicado, y que las sucesivas copias de seguridad que haga quiero que estén numeradas consecutivamente. La primera será la 1, la segunda la 2, etc…

Ahora modificamos nuestro archivo texto.md una vez guardado volvemos a ejecutar el comando anterior para tener un nuevo archivo de respaldo. Si listamos los archivos que tenemos en nuestro equipo con el comando ls veremos que tenemos algo similar a esto:

texto.md texto.md.~1~ texto.md.~2~
Publicado en Unix - Linux | Deja un comentario

BASH _ Ejecutar comando remoto mediante SSH sin Password.-

Estamos acostumbrados a ejecutar comando en nuestra maquina local de manera sencilla. Esto también se hace sencillo utilizando la herramienta EXPECT, a continuación unos pequeños ejemplos de uso :

#!/bin/bash
HOST="aqui_pon_la_maquina_remota"
USER="aqui_pon_el_usuario_remoto"
PASS="aqui_pon_el_password_remoto"
CMD=$@
VAR=$(expect -c "
spawn ssh -o StrictHostKeyChecking=no $USER@$HOST $CMD
match_max 100000
expect \"*?assword:*\"
send -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"

Le damos permisos de jecución : chmod +x execute.sh y ya podremos utilizarlo : ./execute.sh “ls -l” Con esto te mostrara el listado del servidor en donde hayas lanzado el comando. Otros ejemplos para bajar o subir archivos a un servidor mediante el comando SCP :

#!/bin/bash
 
HOST="aqui_servidor"
USER="aqui_usuario"
PASS="aqui_password"
CMD=$@
 
VAR=$(expect -c "
spawn scp -r $USER@$HOST:$CMD . 
match_max 100000
expect \"*?assword:*\"
send -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
#!/bin/bash
 
HOST="aqui_servidor"
USER="aqui_usuario"
PASS="aqui_password"
FICHEROS=$1
DIRECTORIO_REMOTO=$2
 
VAR=$(expect -c "
spawn scp -r $FICHEROS $USER@$HOST:$DIRECTORIO_REMOTO 
match_max 100000
expect \"*?assword:*\"
send -- \"$PASS\r\"
send -- \"\r\"
expect eof
")
echo "==============="
echo "$VAR"
Publicado en Unix - Linux | Deja un comentario

Comando Source: evitando la creación de subprocesos en Bash.-

Cuando se ejecuta desde una shell un comando o un script, se crea un subproceso (proceso hijo) de la shell que ejecuta el comando o el script (proceso padre).
Si el script que ejecuta el proceso hijo crea o modifica alguna variable de entorno, esos cambios o variables desaparecen cuando finaliza el comando o script.

Si deseamos que dichos cambios permanezcan, podemos utilizar el comando de Bash source. Este comando hace que el proceso o comando se ejecute sin crear ningún proceso hijo, de forma que los cambios efectuados en las variables de entorno y demás, se mantengan al finalizar el archivo.

Veamos el uso del comando source de Bash con un ejemplo.
Tenemos creado el script ejemplo_source.sh, que contiene el siguiente código:

#!/bin/bash
 VAR_EJEMPLO_SOURCE='www.aradaen.com';
 echo '$VAR_EJEMPLO_SOURCE='$VAR_EJEMPLO_SOURCE;

Al Ejecutarlo obtenemos :

$VAR_EJEMPLO_SOURCE=www.aradaen.com

Después de la ejecución del SCRIPT tratamos de ver el valor que tiene la variable, veremos que esta vacía. Pero si el SCRIPT lo ejecutamos con el comando SOURCE, el valor lo mantendrá, ya que no crea procesos HIJOS, sino que lo ejecuta en el mismo entorno.-

Publicado en Unix - Linux | Deja un comentario

BASH – Dirección HERE DOCUMENT, perfecta para generar código adicional.-

En ocasiones pasa desapercibida ya que no se suele mencionar demasiado en las guías de scripting o se hace una pasada muy superficial sobre las posibilidades que ofrece. Especialmente en los casos en los que hay que “volcar” código adicional desde scripts en bash hacia otros scripts o ficheros. Afortunadamente, gracias a las redirecciones  Here Document/Here-script esta tarea se hace bastante más llevadera. Muy útil en la generación de SCRIPTS y presentar los resultados via WEB.

Vamos a ver un ejemplo muy sencillo de script en bash en el que generamos un HTML a base de “echo” y haciendo redirecciones al fichero html_example.html:

#!/bin/sh
 
fecha=`date +%F`
parrafo1="Este es el primer parrafo"
parrafo2="Este es el segundo parrafo"
parrafo3="Este es el tercer parrafo"
 
 
cat << EOF > /home/julio/html_example.html
<html>
        <head><title>HTML ejemplo</title></head>
        <body>
                <h1>Este es el header principal</h1>
                <h2>Aqui incluimos una variable, su contenido es $fecha</h2>
                <p>$parrafo1</p>
                <p>$parrafo2</p>
                <p>$parrafo3</p>
                <p>Ejemplo de tabla<p>
                <table style="width:100%">
                        <tr>
                                <td align="center">Primera columna</td>
                                <td align="center">Segunda Columna</td>
                                <td align="center">Tercera columna</td>
                        </tr>
                        <tr>
                                <td align="center">50</td>
                                <td align="center">60</td>
                                <td align="center">70</td>
                        </tr>
                </table>
        </body>
</html>
EOF

Al ejecutar el script obtendríamos:

<html>
    <head><title>HTML ejemplo</title></head>
    <body>
        <h1>Este es el header principal</h1>
        <h2>Aqui incluimos una variable, su contenido es 2016-01-10</h2>
        <p>Este es el primer parrafo</p>
        <p>Este es el segundo parrafo</p>
        <p>Este es el tercer parrafo</p>
        <p>Ejemplo de tabla<p>
        <table style="width:100%">
            <tr>
                <td align="center">Primera columna</td>
                <td align="center">Segunda Columna</td>
                <td align="center">Tercera columna</td>
            </tr>
            <tr>
                <td align="center">50</td>
                <td align="center">60</td>
                <td align="center">70</td>
            </tr>
        </table>
    </body>
</html>

Publicado en Unix - Linux | Deja un comentario

SCRIPTS – Construcción de comandos en tiempo de ejecución: eval (Referencia Indirecta).-

El comando eval construye un comando mediante la concatenación de sus argumentos (pueden ser variables, etc.) separados por espacios.

Dicho comando construido es leído por el shell e interpretado. La sintaxis del comando es:

eval[argumentos …]

Un posible uso es la creación de referencias indirectas a variables (parecido a usar punteros en lenguaje de programación C).

#ejemplo de referencia indirecta con eval
VAR="Texto"
REF=VAR 
#REF es una variable que valeVAR
eval OTRA='$'$REF 
#equivale a ejecutar OTRA=$VAR
echo $OTRA 
#se ha accedido al contenido de VAR a#traves de REF

Publicado en Unix - Linux | Deja un comentario

BASH – Verificar ingreso de un número valido.-

A continuación se valida mediante una función que el parámetro ingresado corresponde a un numero valido.

#!/usr/bin/bash
isint()
{
    re='^[-]?[0-9]+$'
    [[ $1 =~ $re ]]
}
if isint ${1} ; then
   echo " Es un numero valido"
   else
   echo " No ha ingresado un numero valido"
fi
Publicado en Unix - Linux | Deja un comentario

BASH – Leer linea a linea con comando READ.-

También podemos a partir de un archivo estructurado (como una libretas de direcciones o /etc/passwd por ejemplo) obtener los valores de cada campo y asignarlos a varias variables con el comando “read”. Sin embargo hay que tener cuidado de asignar a la variable “IFS” el separador de campo adecuado (espacio por defecto).

#! /bin/bash
while IFS=: read user pass uid gid full home shell
do
echo -e "$full :\n\
Pseudo : $user\n\
UID :\t $uid\n\
GID :\t $gid\n\
Home :\t $home\n\
Shell :\t $shell\n\n"
done < /etc/passwd
Publicado en Unix - Linux | Deja un comentario

BASH- Control de flujo CASE. Ejemplo.-

Controla el flujo de ejecución basándose en la “palabra” dada. La palabra se compara, en orden, con todos los patrones. Cuando la palabra coincida con un patrón, se ejecutan todas las órdenes que vayan a continuación, hasta encontrar ;; (doble punto y coma).

#!/bin/bash
#############################
# Ejemplo de uso de case-esac
#############################
dia=$(date | cut –c 1-3)
case $dia in
	lun)   echo Hoy es lunes ;;
	mar)   echo Hoy es martes ;;
	mié)   echo Hoy es miércoles ;;
	jue)   echo Hoy es jueves ;;
	vie)   echo Hoy es viernes ;;
	sáb)   echo Hoy es sábado ;;
	dom)   echo Hoy es domingo ;;
	*)     echo No se sabe qué es hoy ;;
esac

#!/bin/bash
read -p "Introduzca A, B o C: " letra
case "$letra" in
	a|A)
		echo Introdujo A
		;;
	b|B)
		echo Introdujo B
		;;
	c|C)
		echo Introdujo C
		;;
	*)     
		echo No introdujo A, B o C
		;;
esac
Publicado en Unix - Linux | Deja un comentario

BASH – Retornar valor de una función.-

La función Bash puede pasar valores numéricos y de cadena. En el
siguiente ejemplo se muestra cómo puede pasar un valor de cadena
desde la función.
#!/bin/bash
function greeting() {

str="Hello, $name"
echo $str

}

echo "Enter your name"
read name

val=$(greeting)
echo "Return value of the function is $val"
Publicado en Unix - Linux | Deja un comentario

BASH – LINUX – Como hacer bucles en shell script.-

Los Bucles, en programación, son uno de los pilares fundamentales en los cuales nos apoyamos a la hora de desarrollar cualquier tipo de aplicación, bien sea una web, una APP para Android o IOS, una aplicación de escritorio etc… 

BUCLE WHILE – En el siguiente ejemplo, podemos ver que, mientras la variable $contador sea menor o igual a 15, imprimiremos un mensaje por pantalla. Una vez que la variable tenga el valor 15, el bucle finalizará y el script imprimirá otro mensaje de finalización.

#!/bin/bash
# Bucle básico While
contador=1
while [ $contador -le 15 ]
do
     echo "Este es el mensaje número" $contador
     ((contador++))
done
echo "Bucle finalizado" 

BUCLE UNTIL – En el siguiente ejemplo, la variable $contador se inicializa con un valor de 1. Hasta que la variable $contador no sea superior a 10, la variable $contador se incrementará en +1 hasta que sea superior a 10. El código es el siguiente:

#!/bin/bash
# Bucle básico Until
contador=1
until [ $contador -gt 10 ]
do
     echo "El valor de la variable $contador es: " $contador
     ((contador++))
done
echo "Bucle finalizado. Enhorabuena!"

BUCLE FOR – n el siguiente ejemplo, vamos a crear una serie de elementos (marchas de coches) que asignaremos a la variable coche y que posteriormente iremos recorriendo uno a uno para mostrar el nombre de cada una de las marcas. Lo que hace el bucle básicamente es, para cada uno de los elementos, hacer N cosas:

#!/bin/bash
# Bucle básico For
coches='Ford Seat Mercedes Fiat Opel'
print "El listado de marcas de coches es:"
for coche in $coches
do
     echo $coche
done
echo "Bucle <for> finalizado!"

BREAK y CONTINUE EN BUCLES – Aunque no son realmente ningún tipo de bucle, break y continue se suelen utilizar dentro de los bucles vistos anteriormente para obligar al bucle a seguir o salirse de la ejecución. En el siguiente ejemplo, $a toma valores entre 0 y 10, pero si a=5, el bucle finalizará:

#!/bin/bash
a=0

while [ $a -lt 10 ]
do
     echo "Valor: $a"
     ((i++))
     if [[ "$a" == '5' ]]; then
          break
     fi
done

En el siguiente ejemplo, $a toma valores entre 0 y 10, y se mostrará un mensaje solo cuando a sea diferente de 7:

#!/bin/bash
a=0

while [ $a -lt 10 ]
do
    ((a++))
     if [[ "$a" == '7' ]]; then
          continue
     fi
     echo "Valor: $a"
done
echo 'Finalizado!'

Publicado en Unix - Linux | 1 comentario

BASH – Como generar un HERE DOCUMENT en BASH.-

Ahora veamos cómo nos facilita la vida el uso de Here Document, indicando un delimitador (en este caso le he dado el nombre EOF) para el código que queremos volcar en el fichero html_example.html

#!/bin/sh
 
fecha=`date +%F`
parrafo1="Este es el primer parrafo"
parrafo2="Este es el segundo parrafo"
parrafo3="Este es el tercer parrafo"
 
 
cat << EOF > /home/julio/html_example.html
<html>
        <head><title>HTML ejemplo</title></head>
        <body>
                <h1>Este es el header principal</h1>
                <h2>Aqui incluimos una variable, su contenido es $fecha</h2>
                <p>$parrafo1</p>
                <p>$parrafo2</p>
                <p>$parrafo3</p>
                <p>Ejemplo de tabla<p>
                <table style="width:100%">
                        <tr>
                                <td align="center">Primera columna</td>
                                <td align="center">Segunda Columna</td>
                                <td align="center">Tercera columna</td>
                        </tr>
                        <tr>
                                <td align="center">50</td>
                                <td align="center">60</td>
                                <td align="center">70</td>
                        </tr>
                </table>
        </body>
</html>
EOF
Publicado en Unix - Linux | 1 comentario

LINUX – Algunos códigos interesantes para nuestros SCRIPTS :

Esta corresponde a una consulta WEB, en donde la respuesta se almacena en la variable “check” para ser procesada posteriormente, en la respuesta se quitan los símbolos “{}” y los espacios que deja adelante y atrás de la variable (check).-

check=`curl -s curl http://jupiter.cl:8281/compras-rs/message/getStatus | tr '{}"' " " | sed 's/^[[:space:]]*//' | sed 's/[[:space:]]*$//'`

El siguiente codigo nos permite listar los archivos contenidos en la ruta “/usr19/servicios/” con grep –v se filtran los nombres de archivo que finalizan con números, signo “:” y “/”, también los que contienen en su nombre el patrón “respaldo”.

find /usr19/servicios/ -type f | grep -v *.sh | grep -v '[0-9,:,/]$' | grep -v respaldo

Elimina todos los espacios en blanco de una variable :

variable="Esto es una cadena de texto con espacios en blanco"
sinespacios=$(echo "$variable" | tr -d '[[:space:]]')
echo $sinespacios

Lista en forma recursiva los archivos, mostrando su ruta completa y filtrando los que en sus nombres finalicen con un número :

ls -R | sed "s;^;`pwd`\/;" | grep -v *.sh | grep -v '[0-9,:,/]$'

Si lo que quieres es eliminar el primer y el último carácter de una cadena, usa:

$ echo '*hola que tal;' | sed -e 's/^.//' -e 's/.$//'
hola que tal

Publicado en Unix - Linux | Deja un comentario