Curso de BASH scripting básico by LTSmash
Hola amigos Linuxeros/UNIXeros/BSDeros.
Como leyeron el título, esto será un pequeño curso de BASH para todos aquellos que quieran aprender algo de programación (
scripting) en BASH, o sea, nuestra shell libre y la más usada a nivel UNIX como es GNU/Linux.
Indice1 - Conceptos e Historia de BASH
1.1 - Sintaxis
1.2 - Hola Mundo en BASH
2 - Variables en BASH
2.1 - Llamando a una variable
3 - Comandos basicos UNIX
1 - Conceptos e Historia de BASHbash es un shell de Unix (intérprete de comandos de Unix) escrito para el proyecto GNU. Su nombre es un acrónimo de bourne-again shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros shells importantes de Unix. Hacia 1978 el shell Bourne era el shell distribuido con el Unix Version 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió el shell Bourne original . Brian Fox escribió el shell bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador. bash es el shell por defecto en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha portado a Microsoft Windows por el proyecto Cygwin.
1.1 - SintaxisLa sintaxis de órdenes de bash es un superconjunto de la sintaxis del shell Bourne. La especificación definitiva de la sintaxis de órdenes de bash, puede encontrarse en el bash Reference Manual distribuido por el proyecto GNU. Esta sección destaca algunas de las características únicas de bash.
La mayoría de los shell scripts (guiones de órdenes) Bourne pueden ejecutarse por bash sin ningún cambio, con la excepción de aquellos scripts de shell Bourne que hacen referencia a variables especiales de Bourne o que utilizan una orden interna de Bourne. La sintaxis de órdenes de bash incluye ideas tomadas desde el Korn Shell (ksh) y el C Shell (csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables $RANDOM y $PPID, y la sintaxis de substitución de órdenes POSIX: $(...). Cuando se utiliza como un intérprete de órdenes interactivo, bash proporciona autocompletado de nombres de programas, nombres de archivos, nombres de variables, etc, cuando el usuario pulsa la tecla TAB.
Los scripts de bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos recibido con el símbolo $#.
Por ejemplo, si nuestro script necesita dos parámetros pondremos:
if [ $# -lt 1 ]; then
echo "You need to pass two parameters"
exit 0
fi
1.2 - HOLA MUNDO en BASHPara empezar, haré una mención al simplisimo "Hola mundo" de BASH, y también lo explicare.
#!/bin/bash
# Script de hola mundo
echo hola mundo
Es muy simple, en realidad. Lo que hacemos aqui es primero al escribir "#!/bin/bash", llamar a nuestra shell BASH, que por lo general se ubica en /bin/bash, pero podria estar en otro lugar, asi que si no la tenemos ahi ejecutaremos el comando "locate bash" desde nuestra terminal, o bien si no tenemos locate podemos usar "which bash" o bien desde nuestro directorio raiz ( / ) ejecutamos "find bash".
Pero ¿acaso no cuando escribimos un símbolo como # antes de iniciar una linea es un comentario? En realidad sí, como en la segunda linea vemos, eso es un comentario, es decir, algo que no es interpretado y está ahí para que el programador/coder/scripter se ubique y sepa que es lo que hace el código, esto ayuda a tener mejor orden y al corregir el code si tiene BUGS. Pero la excepción a esto, es al escribir #!/ruta/de/interprete , esto nos sirve para llamar a nuestro interprete, como perl, bash, sh, python, etc; y se usa para los lenguajes interpretados, de modo que se ejecuten en donde corresponde.
Por ultimo tenemos el comando
echo, como en batch, que sirve para imprimir texto en la pantalla.
BASH funciona igual que nuestra terminal favorita, esto es por que nuestra terminal usa BASH para funcionar, y claro, cuando hacemos scripts es para automatizar procesos (lease INFORMATICA). Asi es que la sintaxis es muy simple. un comando por linea.
Recordemos que leer, es buena idea experimentar con nuestro sistema (claro sin ser root si no sabemos que es lo que hacemos) para aprender.
2 - Variables en BASH Como todo lenguaje, necesitamos de manejar las muy utiles variables, que nos servirán para todo lo que queramos hacer en determinadas situaciones. Una variable es una cadena de datos que se almacena en la memoria y que podemos llamar en cualquier momento para darle X uso.
Asignando variables:En BASH, las variables se asignan simplemente dando el nombre de la variable y su valor:
#!/bin/bash
#Asignando variables
hola=1
Como podemos leer aqui, este codigo asigna el valor 1 a la variable "hola". recordemos que en BASH las variables son "CASE SENSITIVE", es decir, la variable Hola no es lo mismo que HOLA ni que holA.
Otro de los puntos importantes de las variables en BASH es que no tenemos que asignarles un tipo, es decir, podemos darle a las variables cualquier valor y lo aceptará sin tener que decirle a BASH si es numerico o si son letras, etc.
2.1 - Llamando a las variables en BASHY claro, sabemos asignar una variable, pero de poco nos sirve si no podemos llamarla. En BASH, las variables las invocamos simplemente anteponiendo un simbolo de dolar ( $ ) antes del nombre de la variable.
#!/bin/bash
#Asignando variables
hola=1
#Llamando a la variable
$hola
#Mostrando el contenido de la variable
echo $hola
Si ponemos atención al código, en BASH, las variables simplemente se reemplazan por su valor al llamarlas, de modo que en ellas podemos almacenar X texto o numero, ya sean comandos o lo que sea. Al llamar a la variable, observamos que simplemente da el valor y lo pasa como una orden al interprete, pero si lo ponemos siguiendo un comando como echo entonces este mostrará el contenido de la variable.
3 - Comandos Basicos UNIXPara poder trabajar eficientemente en BASH, es indispensable conocer los comandos mas basicos, aqui una pequeña lista que debemos conocer a la perfeccion:
Comando [Opciones] Descripcion del comando Ejemplo de uso
cat fich1 [...fichN] Concatena y muestra un archivos cat /etc/passwd
cd [dir] Cambia de directorio cd /tmp
chmod permisos fich Cambia los permisos de un archivo chmod +x miscript
chown usuario:grupo fich Cambia el dueño un archivo chown nobody miscript
cp fich1...fichN dir Copia archivos cp foo foo.backup
diff [-e]arch1 arch2 Encuentra diferencia entre archivos diff foo.c newfoo.c
du [-sabr] fich Reporta el tamaño del directorio du -s /home/
file arch Muestra el tipo de un archivo file arc_desconocido
find dir test acción Encuentra archivos. find . -name ``.bak'' -print
grep [-cilnv] expr archivos Busca patrones en archivos grep mike /etc/passwd
head -count fich Muestra el inicio de un archivo head prog1.c
mkdir dir Crea un directorio. mkdir temp
mv fich1 ...fichN dir Mueve un archivo(s) a un directorio mv a.out prog1
mv fich1 fich2 Renombra un archivo. mv .c prog_dir
less / more fich(s) Visualiza página a página un archivo. more muy_largo.c
less acepta comandos vi. less muy_largo.c
ln [-s] fich acceso Crea un acceso directo a un archivo ln -s /users/mike/.profile .
ls Lista el contenido del directorio ls -l /usr/bin
pwd Muestra la ruta del directorio actual pwd
rm fich Borra un fichero. rm foo.c
rm -r dir Borra un todo un directorio rm -rf prog_dir
rmdir dir Borra un directorio vacío rmdir prog_dir
tail -count fich Muestra el final de un archivo tail prog1.c
at [-lr] hora [fecha] Ejecuta un comando mas tarde at 6pm Friday miscript
cal [[mes] año] Muestra un calendario del mes/año cal 1 2025
date [mmddhhmm] [+form] Muestra la hora y la fecha date
echo string Escribe mensaje en la salida estándar echo ``Hola mundo''
finger usuario Muestra información general sobre finger nn @maquina.aca.com.co
un usuario en la red
id Número id de un usuario id usuario
kill [-señal] PID Matar un proceso kill 1234
man comando Ayuda del comando especificado man gcc
man -k printer
passwd Cambia la contraseña. passwd
ps [axiu] Muestra información sobre los procesos ps -ux
que se están ejecutando en el sistema ps -ef
who / rwho Muestra información de los usuarios conectados al sistema. who
-------------------------------------------------------------------------------------
Por ahora es todo. Iré modificando el post para agregar mas contenidos, y postearé cada vez que actualize.