Introduccion A La Programacion en Scripts
Introduccion A La Programacion en Scripts
Autores:
Tutor:
Msc. Ing. Juan Francisco Gómez Flores.
TABLA DE CONTENIDO
Índice
Páginas
Objetivos
Introducción
Funciones y/o Procedimientos
Operadores en cadena
Sustitución de comandos
Los Ficheros de configuración en POWERSHELL
Conclusión
Bibliografía
Anexos
Introducción:
En la unidad anterior aprendimos sobre los diversos sistemas operativos que existen en el tema
siguiente estaremos aprendiendo como usar scripts los cuales facilitara la interaccion entre el
usuario y el sistema operativo.
La red está llena de terminología que para los que no son informáticos podría resultar algo
confusa. Algunos de estos términos pueden ser código fuente, guiones o script, snippets, etc. Bien,
en cuanto a código fuente, es todo aquel texto o información escrita usando algún lenguaje de
programación y respetando una determinada sintaxis para formar un algoritmo o función
específica que compondrá al programa.
Por tanto, código fuente es un término algo más genérico y amplio, pudiendo englobar también
dentro a los otros términos, ya que un snippet es un fragmento de código fuente que no llega a ser
demasiado complejo por lo general. Por ejemplo, cuando nos dedicamos al diseño web o
necesitamos insertar algún banner en nuestra web, normalmente los proveedores de anuncios
como Google Adsense o Amazon Afiliados nos dan un snippet con el código HTML para poderlo
insertar en nuestra web. Por tanto no es un programa completo, sino más bien pequeñas partes
de código reutilizables.
Si se están preguntando qué es un script o guión, debes saber que en programación se usa este
término para referise al código fuente escrito en algún tipo de lenguaje interpretado (casi
siempre). ¿Y qué diferencia existe con respeto a los lenguajes de programación compilados
tradicionales? Pues que a diferencia de éstos, el código fuente no se compila una sola vez y se
transforma en un binario, sino que se necesita de un intérprete que haga de intermediario y cada
vez que se quiere ejecutar el programa, el intérprete deberá traducir el código para que la
máquina lo entienda.
Funciones y procedimientos
Como podeis ver, nada dificil para empezar. Empecemos a explicar un poco que significa cada
linea:
#!/bin/bash: Esta linea indica donde se encuentra el interprete de comandos en nuestro sistema.
Por defecto todos los sistemas que tengan Bash instalado, lo tendrán en el directorio /bin. Al
utilizar esta linea, podremos ejecutar el script como un programa normal, ya que el sistema sabra
que es un script en Bash y que tiene que hacer con él.
# Esto es un ejemplo en Bash del clásico "Hola Mundo ": Esto es un comentario. Todas las
líneas que empiecen con el símbolo '#' serán tratadas como comentarios y no se ejecutaran.
echo "Hola Mundo": Esto es el comando que imprime la cadena de texto en pantalla.
Variables:
En todo script tendréis que trabajar con variables, más tarde o más temprano. Vamos a ver como
se definen y usan. Una buena costumbre cuando definamos variables en Bash es utilizar letras
mayúsculas, esto no es necesario, pero nos ayudara a tener un script más fácil de entender.
#!/bin/bash
#
# Esto es un ejemplo en Bash del clasico "Hola Mundo"
#
MENSAJE="Hola Mundo"
echo $MENSAJE
Hemos definido una variable llamada MENSAJE con el valor "Hola Mundo", y la hemos usado con
el comando echo para escribir el valor de la misma. Las variables en Bash se definen como
NOMBRE=valor (sin espacios antes o después del símbolo '=') y su valor se usa, poniendo el
símbolo '$' delante del nombre de la variable, $NOMBRE.
Si al utilizar el valor de una variable, el nombre de variable esta seguido de un carácter que sea
otra letra, numero o el símbolo '_', tendremos que utilizar los símbolos '{}' alrededor del nombre
de la variable
#!/bin/bash
FICHERO="registro"
echo ${FICHERO}_2006.txt
Variables de Entorno:
#!/bin/bash
echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "
También se pueden usar en nuestro scripts, variables que no hemos definido nosotros. Estas
variables son las llamadas 'variables de entorno' del sistema. En nuestro ejemplo hemos utilizado
$USERNAME y $HOSTNAME para obtener el nombre de usuario y del ordenador. La variable $0
contiene el nombre del script, más adelante explicaremos esto.
#!/bin/bash
ATRIBUTOS_SCRIPT=`/bin/ls -l $0`
echo "El usuario '$USERNAME' ha ejecutado el script $0, en el ordenador '$HOSTNAME'. "
echo "Los atributos del script son: "
echo $ATRIBUTOS_SCRIPT
También podemos asignar la salida que producen los comandos del sistema a una variable. En
nuestro ejemplo hemos asignado la salida del comando 'ls -l a una variable llamada
ATRIBUTOS_SCRIPT. Esto nos será muy útil en nuestros scripts para obtener información del
sistema que podremos utilizar en nuestros scripts.
Existen una serie de caracteres que tienen un significado especial en Bash, por ejemplo $ y ". Si
queremos usar literalmente estos caracteres en el valor de una variable tendremos que usar el
simbolo '\' delante de ellos.
#!/bin/bash
Variables Numéricas:
Si queremos definir variables numéricas para su utilización en scripts Bash podemos utilizar el
comando let. Nada mejor que un ejemplo para ver cómo se trabaja con variables numéricas.
#!/bin/bash
let A=100
let B=200
let C=$A+$B
Funciones:
function nombre_de_funcion(){
comandos_del_shell
}
#!/bin/bash
let A=100
let B=200
#
# Funcion suma()
# Suma los variables A y B
#
function suma(){
let C=$A+$B
echo "Suma: $C"
}
#
# Funcion resta()
# Resta los variables A y B
#
function resta(){
let C=$A-$B
echo "Resta: $C"
}
suma
resta
operadores de cadena
Operadores de cadena
Hay dos operadores de cadena. Uno utiliza los valores cadena de los operandos y devuelve una
cadena como resultado. El otro compara los operandos y devuelve un valor booleano que indica la
correspondencia.
& Concatenación de cadenas. La operación devuelve una cadena de texto, que consiste en los dos
operandos, uno tras otro.
Example:
lik Comparación de cadenas con caracteres comodín. La operación devuelve un valor booleano True (-1) si
e la cadena anterior al operador coincide con la cadena posterior al operador. La segunda cadena puede
contener los caracteres comodín * (cualquier número de caracteres arbitrarios) o ? (un carácter
arbitrario).
Example:
Operadores de cadena
Una expresión que utiliza un operador de cadenas devuelve una cadena. La siguiente tabla
muestra los operadores de cadena:
Operadores de Cadena
= Iguales
!= Diferentes
-n Con longitud mayor que 0
-z Longitud igual a 0 o vacío
Formas de utilizar el operador de cadena y los comodines
El operador de cadena (&) puede utilizarse en fórmulas y los comodines (*, ? , ~) pueden
utilizarse en condiciones.
Es la operación por la cual dos caracteres se unen para formar una cadena de caracteres (o string).
También se pueden concatenar dos cadenas de caracteres o un carácter con una cadena para
formar una cadena de mayor tamaño. Algunos ejemplos:
Estas sustituciones están disponibles en varios shells, pero nos enfocaremos en su sintaxis y
funcionamiento en bash.
SUSTITUCIÓN DE COMANDOS
La sustitución de comandos consiste en ejecutar uno o varios comandos y escribir su salida de forma que
sea tomada como argumento por otro comando. Esta sustitución es diferente del encadenamiento de
comandos que se hace con el símbolo | (pipe), pues no arroja un flujo que es leído a través de standard
input sino que escribe la información textualmente en la línea de comandos. La sustitución de comandos
en bash hace uso del operador $() (en otros shells normalmente se usan las comillas invertidas o
backticks ``).
$(comando)
El shell efectúa las sustituciones de comandos antes de interpretar la línea de comandos en su totalidad.
La sintaxis clásica de una sustitución de comandos utiliza el apóstrofe invertido (o acento abierto, o "back
quote") obtenido con la tecla [`]+[espacio] en un teclado español:
[javier]$ whoami
javier
[javier]$ echo "mi login es ’whoami’"
mi login es javier
[javier]$ milogin=’whoami’
[javier]$ echo "mi login es $milogin"
mi login es javier
La ventaja de asignar la salida de un comando a una variable radica en poder reutilizar varias veces el
resultado evaluando una sola vez el comando.
La segunda sintaxis admitida para la sustitución de comandos es $(). La ventaja de esta sintaxis reside en
poder anidar las sustituciones de comandos:
$ fecha=$(date)
$ echo $fecha
lun sep 5 12:27:33 CEST 2013
Ejemplo: Crear una variable de entorno que contenga el resultado de un comando ejecutable.
MYDIR=`dirname /usr/local/share/doc/foo/foo.txt`
Ejemplo: se quiere editar un archivo fuente C utlizando vi. El archivo se llama myprog.c, pero no
recordamos en qué subdirectorio bajo nuestro home está almacenado. Para lograr esto normalmente
haríamos algo así:
/home/carlos/cprogs/tests/myprog.c
vi /home/carlos/cprogs/tests/myprog.c
La forma de hacerlo es correcta, pero implica tres pasos: encontrar el archivo, tomar nota de la ruta y pasar
esta ruta como argumento a vi.
Mediante el operador $() indicamos a bash que ejecute el comando entre paréntesis y pegue la salida justo
delante de vi. La salida en este caso es la ruta del archivo encontrado por find, por lo que la expresión
resultante será vi /home/carlos/cprogs/tests/myprog.c. En caso que hubiera varios archivos con el mismo
nombre en distintos directorios, vi abrirá todos ellos; por ejemplo, si el archivo myprog.c existe tanto
en ~/cprogs/tests/ como en ~/cprogs/drafts, tendríamos la expresión resultante vi
/home/carlos/cprogs/tests/myprog.c /home/carlos/cprogs/drafts/myprog.c.
Microsoft lleva dos años a favor tanto del código abierto como de las aplicaciones
multiplataforma. Cada poco tiempo podemos ver cómo la compañía libera el código de distintas
herramientas o servicios, así como la creación de nuevos proyectos con el fin de llegar a un mayor
número de sistemas operativos. Siguiendo con esto, el pasado 10 de enero Microsoft lanzó una
nueva versión de su consola PowerShell Core, la 6.0, versión que, además de ser de código
abierto, ahora está preparada para funcionar en otros sistemas operativos, como macOS y Linux.
Igual que los sistemas Linux, así como macOS, tienen su propia termina desde la que poder
ejecutar todo tipo de comandos, imprescindible para la mayoría de las tareas de administración,
Microsoft también tiene una herramienta llamada PowerShell. A diferencia de CMD, la conocida
ventana de símbolo de sistema, PowerShell es una consola (CLI) mucho más completa, tanto en
funciones como en comandos, lo que la hace ideal especialmente para administradores de
sistemas.
A pesar de estas pérdidas, la llegada de PowerShell a otros sistemas operativos es una gran
noticia ya que, de esta manera, cualquier administrador va a poder utilizar la consola de
Microsoft tanto en sistemas Windows (desde 7 en adelante) como en macOS y una gran
variedad de distribuciones Linux, como Ubuntu, Redhat, Centos, Fedora, OpenSuse y Debian,
entre otras.
De forma similar a cualquier otra aplicación, para instalar esta nueva consola de PowerShell en
Linux, lo que debemos hacer en primer lugar es importar las claves del repositorio y registrarlo
en nuestra distro. Después, actualizaremos las listas de paquetes para, finalmente, descargar
esta aplicación en nuestro sistema utilizando el conocido comando apt.
2
4
Una vez tengamos ya PowerShell instalado en nuestro Linux, solo nos queda ejecutar el
comando “pwsh” en una terminal cualquiera para arrancar esta consola y poder empezar a
utilizarla.
LISTA DE EQUIVALENTES EN POWERSHELL A COMANDOS LINUX
Con esta aclaración hecha podemos ponernos con las equivalencias:
# CD
# LS
# PWD
# MAN
Si queremos consultar la ayuda en PowerShell podemos valernos de Get-Help:
# SCP
Si bien para SCP no existe una herramienta nativa en PowerShell que la reemplace podemos
tirar de WinSCP para PowerShell como vimos en entradas anteriores:
Si bien la lista puede seguir y seguir creo que esta es una buena representación de los
principales equivalentes en PowerShell a comandos en Linux para cualquier persona recién
aterrizada en PowerShell desde el sistema operativo del pingüino. Algo importante a tener en
cuenta es que en casi todos los casos existe un alias igual al comando de Linux al que ‘sustituye’,
por lo que la transición puede ser muy sencilla.
Bibliografia:
https://www.uv.es/jac/guia/vbscript/vb01.htm
https://baulderasec.wordpress.com/desde-la-consola/shell-en-unixlinux-sh-ksh-bash/4-bases-de-
la-programacion-shell/4-9-los-operadores-logicos-del-shell-y-codigos-de-terminacion/
https://www.lawebdelprogramador.com/foros/Linux-Unix-Shell-Scripting/1354692-Listado-de-
operadores-de-comparaciones-en-bash.html
http://fpg.site11.com/GNU-Linux/sustitucin_de_comandos.html
https://carloslindado.wordpress.com/2013/04/05/sustitucion-de-comandos-y-sustitucion-de-
procesos-en-bash/
https://www.redeszone.net/2018/01/20/instalar-powershell-linux/
https://thesolving.com/es/glosario/que-es-powershell/