Guia de Shell Scripting Avanzado - Comandos nativos de Bash
Monografía creado por David F. Madrid. Extraido de: http://www.nautopia.net/archives/es/linux_programacion/guia_de_shell_scripting_avanzado/introduccion.php
11 de Octubre de 2005
Linux
5 - Comandos nativos de Bash
Podemos llamar comandos nativos a falta de una mejor traducción a Built-in a los comandos que han sido incluídos en el propio código del intérprete para un mejor rendimiento. Son muchos, para una referencia completa consultad la página man de Bash. Algunos de los más útiles pueden ser:
alias
Con el comando alias podemos definir un identificador que podemos asociar a un comando con argumentos.
#!/bin/sh
alias ls='ls -lh --color=always'
dir=$1
if [ -d $dir ]
then
echo "El contenido del directorio $dir es"
echo "`ls $dir`"
fi
cd
Podemos usar cd para cambiar el directorio en el que trabaja nuestro script de igual forma que lo usamos en la línea de comandos.
pwd
Muestra la ruta del directorio actual
test
El comando test o [ ] abreviado se utiliza para comparar valores y comprobar la existencia de archivos,directorios,enlaces dispositivos y es una auténtica navaja suiza. Devuelve 1 si la expresión se evalúa como cierta. Las opciones de test que podemos establecer para controlar su comportamiento son las podemos encontrar en la man de test, aquí podemos ver algunos de los usos de test con un ejemplo:
#!/bin/sh
# Comprueba como son dos números pasados como argumento
if [ ${#@} -ne 2 ]
then
if [ $1 -lt $2 ]
then
#!/bin/sh
# Comprueba si existe el elemento pasado como argumento y devuelve
# lo que es
archivo=$1
if [ -e $archivo ]
then
if [ -h $archivo ]
then
then
fi
Eval
Con eval podemos evaluar una expresión o serie de comandos y asignar el resultado a una variable
#!/bin/sh
variable="eval ls -lh"
echo $variable
getopts
Con este comando podemos procesar la entrada que se le pasa a un script de forma sencilla. Para usarla sólo tenemos que meterla en un bucle while y diferenciar entre opciones que requieren un argumento y las que no.
#!/bin/sh
while getopts b:c:a miopt
do
case $miopt in
a) selecta=1 ;;
b) opt2="$OPTARG" ;;
c) opt1="$OPTARG" ;;
?) echo "Uso: ejemplo -b algo [-c algo] [-a]"
exit 1;;
esac
done
if [ -n "$opt2" ]
then
echo Se ha introducido -b $opt2
else
echo Debe introducir -b con un argumento
exit 1
fi
if [ -n "$selecta" ] && [ -n "$opt1" ]
then
echo Se ha introducido -c $opt1
fi
Como vemos las opciones que requieren un parámetro se le indican a getopts poniendo un : a su derecha y el valor del parámetro lo podemos recuperar accediendo a la variable $OPTARG
read
Con el comando read podemos leer valores de la entrada stándard y asignárlos a variables.
#!/bin/sh
alias ls='ls -lh --color=always'
echo "introduce un directorio"
read dir
if [ -d $dir ]
then
popd
Extrae un elemento de la pila de directorios y cambia el directorio actual al elemento puntero de pila.
pushd
Almacena un elemento en la pila de directorios y cambia el directorio actual a ese elemento,
#!/bin/sh
cd /
echo "Estamos en `pwd`"
pushd usr
pushd local
echo "Estamos en `pwd`"
ls -lh
popd
popd
echo "Estamos en `pwd`"
ls -lh
Como rareza comentar que Bash permite acceder mediante /dev/tcp y /dev/udp a conexiones tcp y udp con un servidor. Después de iniciar el subsistema tcp/ip se puede leer/escribir como si fuese la entrada estándar. Aquí teneis un ejemplo que lee lo último publicado en nautopia y lo envía a nuestra tty:
#!/bin/sh
exec 3<>$1
printf "GET / HTTP/1.1\n" >&3
printf "HOST:www.nautopia.net\n" >&3
printf "\n\n">&3
echo "Novedades en Nautopia"
while read hola <&3
do
alias
Con el comando alias podemos definir un identificador que podemos asociar a un comando con argumentos.
#!/bin/sh
alias ls='ls -lh --color=always'
dir=$1
if [ -d $dir ]
then
echo "El contenido del directorio $dir es"
echo "`ls $dir`"
fi
cd
Podemos usar cd para cambiar el directorio en el que trabaja nuestro script de igual forma que lo usamos en la línea de comandos.
pwd
Muestra la ruta del directorio actual
test
El comando test o [ ] abreviado se utiliza para comparar valores y comprobar la existencia de archivos,directorios,enlaces dispositivos y es una auténtica navaja suiza. Devuelve 1 si la expresión se evalúa como cierta. Las opciones de test que podemos establecer para controlar su comportamiento son las podemos encontrar en la man de test, aquí podemos ver algunos de los usos de test con un ejemplo:
#!/bin/sh
# Comprueba como son dos números pasados como argumento
if [ ${#@} -ne 2 ]
then
echo Debe introducir dos números
exit 1
fiexit 1
if [ $1 -lt $2 ]
then
echo $1 es menor que $2
exit 0
else if [ $1 -gt $2 ]exit 0
then
echo $1 es mayor que $2
exit 0
fi echo $1 es mayor que $2
exit 0
echo $1 y $2 son iguales
exit 0
fiexit 0
#!/bin/sh
# Comprueba si existe el elemento pasado como argumento y devuelve
# lo que es
archivo=$1
if [ -e $archivo ]
then
echo Existe el archivo $archivo
elseecho No existe el archivo $archivo
exit 1
fiexit 1
if [ -h $archivo ]
then
echo $archivo es un enlace simbólico
else if [ -d $archivo ]then
echo $archivo es un directorio
fifi
Eval
Con eval podemos evaluar una expresión o serie de comandos y asignar el resultado a una variable
#!/bin/sh
variable="eval ls -lh"
echo $variable
getopts
Con este comando podemos procesar la entrada que se le pasa a un script de forma sencilla. Para usarla sólo tenemos que meterla en un bucle while y diferenciar entre opciones que requieren un argumento y las que no.
#!/bin/sh
while getopts b:c:a miopt
do
case $miopt in
a) selecta=1 ;;
b) opt2="$OPTARG" ;;
c) opt1="$OPTARG" ;;
?) echo "Uso: ejemplo -b algo [-c algo] [-a]"
exit 1;;
esac
done
if [ -n "$opt2" ]
then
echo Se ha introducido -b $opt2
else
echo Debe introducir -b con un argumento
exit 1
fi
if [ -n "$selecta" ] && [ -n "$opt1" ]
then
echo Se ha introducido -c $opt1
fi
Como vemos las opciones que requieren un parámetro se le indican a getopts poniendo un : a su derecha y el valor del parámetro lo podemos recuperar accediendo a la variable $OPTARG
read
Con el comando read podemos leer valores de la entrada stándard y asignárlos a variables.
#!/bin/sh
alias ls='ls -lh --color=always'
echo "introduce un directorio"
read dir
if [ -d $dir ]
then
echo "El contenido del directorio es $dir"
echo "`ls $dir`"
fiecho "`ls $dir`"
popd
Extrae un elemento de la pila de directorios y cambia el directorio actual al elemento puntero de pila.
pushd
Almacena un elemento en la pila de directorios y cambia el directorio actual a ese elemento,
#!/bin/sh
cd /
echo "Estamos en `pwd`"
pushd usr
pushd local
echo "Estamos en `pwd`"
ls -lh
popd
popd
echo "Estamos en `pwd`"
ls -lh
Como rareza comentar que Bash permite acceder mediante /dev/tcp y /dev/udp a conexiones tcp y udp con un servidor. Después de iniciar el subsistema tcp/ip se puede leer/escribir como si fuese la entrada estándar. Aquí teneis un ejemplo que lee lo último publicado en nautopia y lo envía a nuestra tty:
#!/bin/sh
exec 3<>$1
printf "GET / HTTP/1.1\n" >&3
printf "HOST:www.nautopia.net\n" >&3
printf "\n\n">&3
echo "Novedades en Nautopia"
while read hola <&3
do
titulo=`echo $hola | sed -r "s/(.*
)(.*)(<\/h3>.*)/\2/"` echo $titulo > /dev/tty do
Valora este capítulo:
Autor y licencia de 'Guia de Shell Scripting Avanzado - Comandos nativos de Bash'
|
Opiniona sobre 'Guia de Shell Scripting Avanzado - Comandos nativos de Bash' (0)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este monografía |
Wikis relacionados con 'Guia de Shell Scripting Avanzado - Comandos nativos de Bash'
Es muy fácil crear archivos en el sistema operativo UNIX. Por lo tanto, los usuarios...
Más »
Esta guía no es un documento general de seguridad. Esta guía está específicamente orientada a...
Más »
Esta guía rápida explica cómo instalar y configurar Iptables con soporte H323. Se basa en...
Más »
Esta guía tiene por objetivo dar respuestas muy claras y concretas a los problemas que...
Más »
Hablar de redes de ordenadores siempre implica hablar de Unix. Por supuesto, Unix no es...
Más »

