Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Caso práctico
Todos están de acuerdo en que son las personas más adecuadas para formar al
departamento en el diseño, e implementación según necesidades de programas scripts o
guiones a implantar y según las necesidades en equipos Windows o Linux.
Jimena y Diego deciden reunirse para recopilar toda la información disponible y seguir
unas pautas para realizar las ponencias.
Para acceder a realizar tareas de shell, como comandos u órdenes, debemos habilitar un
terminal.
¿Cómo se hace? Bien, depende del sistema operativo que utilicemos. En Windows
podremos utilizar la orden cmd en la opción de ejecutar programa y obtendremos una
imagen similar a la siguiente.
En el caso de distribuciones GNU/Linux accedemos a la terminal a través del menú o
bien cambiando de terminal. ¿Cómo? Mediante la combinación de teclas
<ctrl><alt><Fn> (sustituyendo Fn por la terminal a la que queramos acceder; por
ejemplo: F1 terminal 1, F2 terminal 2, etc.).
Actualmente Microsoft trabaja con Powershell. Un sistema shell más potente con su
propio lenguaje de programación y entorno gráfico. Desde Windows Vista podremos
instalarlo y trabajar con él.
Tipos de shell.
Si nos ceñimos a los sistemas operativos más conocidos hoy en día, podemos indicar los
siguientes intérpretes shell.
GNU/Linux:
En Wikipedia podemos tener un punto de partida bastante interesante para conocer más
los distintos shells que tiene cualquier distribución de GNU/Linux.
Windows:
En el siguiente enlace nos introduce en las sintaxis y estructuras de ficheros por lotes
(.bat). Es un buen comienzo.
En el siguiente enlace tenemos todos los comandos que se pueden ejecutar utilizando
CMD.
Autoevaluación
Uno.
Seis.
Tres.
Como todo lenguaje, debe cumplir con unos requisitos tales como emplear la sintaxis
correcta, que no tenga errores, no sólo sintácticos sino también lógicos.
#!/bin/bash
# misdatos.sh
# muestra datos relativos al usuario que lo invoca
#
echo "MIS DATOS."
echo " Nombre: "$LOGNAME
echo "Directorio: "$HOME
echo -n "Fecha: "
date
echo
# fin misdatos.sh
Para saber más
En el siguiente enlace podrás estudiar las estructuras del lenguaje de scripts para los
distintos tipos de shell de GNU/Linux.
Estructuras del lenguaje script para los distintos tipos de shell en GNU/Linux.
Autoevaluación
¿Qué entendemos por "shell"?
No debemos olvidar que, para interactuar más eficientemente con el sistema operativo,
debemos tener un sistema cómodo para comunicarnos más fiablemente y conseguir que
esas rutinas que implementamos sean lo más eficientes posibles. Esto lo conseguimos,
por ejemplo, con la utilización de las variables de entorno.
¿Qué son las variables? Es el nombre interno que le damos a una porción de memoria
donde almacenamos un dato.
En Windows:
set anual=%date:~-4%
echo %anual%
2011
Las distintas variables de entorno para los sistemas operativos Windows y GNU/Linux.
Uno de los inconvenientes con los que se encontrarán los desarrolladores de scripts o
guiones, comentan Diego y Jimena, será saber cómo pueden depurar los distintos
lenguajes de scripts que deberán utilizar.
En el caso de Windows los archivos utilizarán una extensión, .bat, .cmd o .vbs. Es
decir, un programa que llamamos "direccionar" lo guardaríamos como
"direccionar.bat". Simplemente con colocar la extensión, el programa tiene la
consideración de ejecutable.
En el caso de GNU/Linux no requiere extensión pero suele utilizarse una extensión más
bien por reconocimiento a simple vista más que como imprescindible. La extensión que
suele utilizarse es ".sh". Siguiendo con el ejemplo anterior sería "direccionar.sh".
Cuando tenemos un shell script o fichero por lotes grande y vemos, en su ejecución, que
está fallando, normalmente empleamos el comando "echo" para imprimir una traza y
ver por donde se queda el script.
Debes conocer
En el siguiente enlace tenemos un software en entorno gráfico que permite depurar los
shell-scripts en GNU/Linux.
Autoevaluación
Para ejecutar un script en GNU/Linux desde un terminal debe…
Consideran que tienen la misión de indicarles qué nivel ocupa dentro del sistema
operativo.
Como se ha mencionado anteriormente, los programas scripts utilizan órdenes que son
propias del sistema operativo. Más bien que el shell del sistema operativo interpreta y
genera resultados.
No olvidemos que, aparte de las instrucciones u órdenes del sistema operativo, pueden
utilizar las variables de entorno que tiene el sistema operativo.
Es más, no hay que realizar ningún tipo de adaptación de nuestro sistema para poder
ejecutarlos. Eso sí, los permisos y privilegios del programa deben ser adecuados a la
tarea que deben realizar. ¿Qué queremos decir? Pongamos un ejemplo que lo clarifique.
Si una tarea la debe realizar el supervisor del equipo, el sistema asume la autoría como
del supervisor independientemente de quién sea el usuario propietario del programa en
sí. Ahora bien, si el programa tiene como propietario al supervisor, ningún usuario
deberá poder ejecutarlo.
Por ejemplo:
Autoevaluación
¿Los scripts pueden utilizar y manipular las variables de entorno?
A lo que responde Jimena que tiene razón y que ya lo tenía valorado. Contará cómo
afecta al sistema, dónde encontrarlo en el registro y como habilitarlo a través de scripts.
¿Qué entendemos por tareas administrativas? Son aquellas que se realizan de forma
repetitiva o rutinaria pero, podríamos llamarlo así, obligatorias. Un ejemplo, realizar
copias de seguridad de un dispositivo de almacenamiento masivo a otro. Podemos
hacerlo de forma manual, escribiendo los comandos con sus parámetros
correspondientes o bien realizamos un script o guión que realice esas tareas de forma
automática. Si a esto añadimos una tarea programada, prácticamente nos
despreocupamos de realizar la tarea, sólo nos queda comprobar que la realiza.
En el siguiente enlace encontrarás una pequeña introducción a los ficheros por lotes,
pero lo más importante son las variables del entorno con las que podemos realizar
tareas.
Pongamos un ejemplo. Los usuarios necesitan varias unidades lógicas y, a través del
perfil del usuario, sólo permite una unidad. Entonces necesitamos un script que realice
esta tarea. Utilizaremos un fichero por lotes o .bat y lo colocamos en la carpeta
c:\windows\sysvol\server.local\sysvol\scripts.
Autoevaluación
Sólo Windows necesita una extensión para identificar los scripts. ¿Verdadero o
falso?
Verdadero.
Falso.
Pero una de las inquietudes de Jimena es cómo hacer entender o hacer que asuman
como propio, que a la hora de programar scripts se hace de forma creativa. Es decir, dos
personas afrontarán un problema o tarea con soluciones distintas y creativas.
Diego está de acuerdo y propone realizar tareas donde se presenten situaciones reales
para que realicen las prácticas en máquinas virtuales con sistemas operativos instalados
en las dependencias de la empresa.
¿Qué son extensiones de comandos? Las extensiones de comandos se utilizan para
ampliar la funcionalidad de determinados comandos del sistema y sólo en sistemas
operativos Windows. Los comandos a los que afectan los puedes ver con "cmd /?" pero
son los típicos de scripting: control de archivos (del, cd, md,..), control de rutinas (for,
if, goto,..), etc...
Nunca.
Acceso al registro.
Caso práctico
Diego comenta, sonriendo, que es una de las causas por las que prefiere GNU/Linux.
Primero de todo, hay que comentar que sólo el sistema operativo Windows, en sus
distintas versiones, mantiene una base de datos que almacena las configuraciones y
opciones en sus versiones de 32 bits, 64 bits y Windows Mobile.
¿Cómo podemos acceder al registro? Pondremos un ejemplo para que se entienda bien.
Queremos conocer la ruta de acceso a los programas mediante un programa escrito en
Visual Basic Script:
'Creamos el objeto
Set MiObjeto = CreateObject("Wscript.Shell")
'Mostramos mediante un Msgbox el valor del dato "ProgramFilesDir
(x86)" que tiene la ruta antes mencionada
MsgBox
MiObjeto.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curren
tVersion\ProgramFilesDir (x86)")
Autoevaluación
GNU/Linux utiliza, como motor de base de datos de registro, Mysql. ¿Verdadero o
falso?
Verdadero.
Falso.
En esta ocasión vamos a empezar con un ejemplo realizado en Windows 2008 y con un
script realizado en Visual Basic Script. Este script consiste en extraer los usuarios de un
grupo, soporte, que está dentro de la unidad organizativa redes y en el dominio
sored.local.
Sí.
Sí, pero sólo el usuario root.
No, sólo en sistemas operativos de Microsoft se pueden utilizar este tipo de variables.
Siguiendo con el enfoque práctico por parte de Diego y Jimena, quieren plantear
situaciones en las que puede ser interesante tener un pequeño programa hecho en script
para realizar alguna tarea sencilla y cotidiana que permita ver el alcance y potencia que
pueden llegar a tener este tipo de programas de scripts.
En este caso también empezamos con un ejemplo. Este script está realizado en Visual
Basic Script y genera 10 usuarios en la unidad organizativa "redes". Estos usuarios
necesitarían, posteriormente, afinar sus propiedades.
En sistemas de servidores Windows son útiles los ficheros por lotes para asignar
recursos a los usuarios que acceden al sistema. Y la mejor manera de entenderlo es
mediante un ejemplo de un fichero .bat. Este ejemplo debería estar en
c:\windows\sysvol\dominio\sysvol\scripts:
@echo off
#Sincronización de la hora del equipo cliente con la del servidor
net time \\nombre_netbios /set /yes
#Elimina las unidades lógicas por si estuvieran en uso.
net use z: /delete
net use y: /delete
#Crea las unidades lógicas que se utilizarán
#Carpeta compartida oculta como zona de trabajo del usuario.
net use z: "\\ nombre_netbios \%username%$"
#Carpeta compartida oculta para uso de un departamento, por ejemplo.
net use y: "\\ nombre_netbios \GBD$"
Para saber más
En el siguiente enlace encontrarás ejemplos suficientes para hacerte una idea de scripts
en LDAP sobre máquinas con sistema operativo Windows Server.
Scripts en LDAP sobre máquinas con sistema operativo Windows Server.
Y para tener una referencia sobre la arquitectura del Active Directory nada mejor que ir
a la fuente del propietario, Microsoft.
Existe un script inicial donde se les asignan, por defecto, varios valores a todos los
usuarios, /etc/profile. Aparte de este archivo de inicio, tenemos, en el área de trabajo
del usuario, un script de inicio llamado .bashrc que se ejecutará cuando se acceda a
través de terminal. Y otro de salida, .bash_logout que se lanzará cuando el usuario dé
por terminada la sesión.
#! /bin/bash
clear
read -p "Introduce usuario... " user
read -p "Introduce grupo... " group
if `grep -e "^$user:.*" /etc/passwd >/dev/null`
then
if `grep -e "^$group:.*" /etc/group >/dev/null`
then
echo "Usuario y grupo ya existen en el sistema"
elif `grep -e "^$group:.*" /etc/group >/dev/null`
then
echo "usuario no existe, grupo si!!"
else
echo "Ni grupo ni usuario existen"
fi
Autoevaluación
¿En GNU/Linux podemos usar variables de entorno?
Sí.
No, solo en sistemas operativos de Microsoft se pueden utilizar este tipo de variables.
Shell de Unix
Una Shell de Unix o también shell, es el término usado en informática para referirse a un
intérprete de comandos, el cual consiste en la interfaz de usuario tradicional de los sistemas
operativos basados en Unix y similares, como GNU/Linux.
Mediante las instrucciones que aporta el intérprete, el usuario puede comunicarse con el
núcleo y por extensión, ejecutar dichas órdenes, así como herramientas que le permiten
controlar el funcionamiento de la computadora.
Los comandos que aportan los intérpretes, pueden usarse a modo de guion si se escriben en
ficheros ejecutables denominados shell-scripts, de este modo, cuando el usuario necesita
hacer uso de varios comandos o combinados de comandos con herramientas, escribe en un
fichero de texto, marcado como ejecutable, las operaciones que posteriormente, línea por
línea, el intérprete traducirá al núcleo para que las realice. Sin ser un shell estrictamente un
lenguaje de programación, al proceso de crear scripts de shell se le denomina programación
shell o en inglés, shell programming o shell scripting.
En el sentido más genérico del término, shell significa cualquier intérprete que los usuarios
usen para escribir comandos. Su etimología proviene del uso natural de consolas en
computadores funcionando bajo unix antaño, cuando los usuarios conectaban al computador
central, lo hacían mediante consolas, (shells) por las cuales a través de un intérprete, hacían
inicio de sesión y manejaban la computadora principal. Posteriormente, con la proliferación de
los computadores personales y su filosofía monousuario, un computador por usuario
(entiéndase lo contrario de la filosofía inicial de Unix, un computador, muchos usuarios
conectados por terminales), se desarrolló un software que emulase las características
principales de las consolas físicas, a modo de poder seguir usándolas como clientes en un
computador o núcleo que comprendiera la convención estándar usada para configurar y llevar
a cabo tareas de administración de emergencia con servidores basados en Unix.
Los usuarios de Unix y similares, pueden elegir entre distintos shells (programa que se debería
ejecutar cuando inician la sesión, véase bash, ash, csh, Zsh, ksh, tcsh). Las interfaces de usuario
gráficas para Unix, como son GNOME, KDE y Xfce pueden ser llamadas shells visuales o shells
gráficas. Por sí mismo, el término shell es asociado usualmente con la línea de comandos. En
Unix, cualquier programa puede ser un shell de usuario. Los usuarios que desean utilizar una
sintaxis diferente para redactar comandos, pueden especificar un intérprete diferente como su
shell de usuario.
El término shell también hace referencia a un programa particular, tal como el Bourne shell,
sh. El Bourne shell fue el shell usado en las primeras versiones de Unix y se convirtió en un
estándar de facto; todos los sistemas similares a Unix tienen al menos un shell compatible con
el Bourne shell. El programa Bourne shell se encuentra dentro de la jerarquía de archivos de
Unix en /bin/sh. En algunos sistemas, tal como BSD, /bin/sh es un Bourne shell o un
equivalente, pero en otros sistemas como muchas distribuciones de Linux, /bin/sh es un enlace
simbólico a un shell compatible con más características (como Bash). POSIX especifica su shell
estándar como un subconjunto estricto del Korn shell.
Archivo batch
En DOS, OS/2 y Microsoft Windows, un archivo batch es un archivo de procesamiento por
lotes. Se trata de archivos de texto sin formato, guardados con la extensión .BAT que
contienen un conjunto de instrucciones MS-DOS. Cuando se ejecuta este archivo, las órdenes
contenidas son ejecutadas en grupo, de forma secuencial, permitiendo automatizar diversas
tareas. Cualquier orden reconocible por MS-DOS puede ser utilizado en un archivo batch.
Esta es la forma de automatizar procesos (copiar, pegar, renombrar y enviar datos) en MS-
DOS. De este modo, evitamos procesos rutinarios y monótonos, acelerando los mismos. Tiene
la funcionalidad de conectarse con otras interfaces por línea de comandos.
Índice
o 1.1 Call
o 1.2 Choice
o 1.3 Echo
o 1.4 Set
o 1.5 For
o 1.6 Goto
o 1.7 If
o 1.8 Pause
o 1.9 Rem
o 1.10 Shift
Call
Esta orden realiza, desde un archivo batch, una llamada a la ejecución de otro archivo del
mismo tipo. El primer archivo no finaliza su ejecución al realizar la llamada.
Donde:
[unidad_disco:][path]nombre_archivo es la ruta al archivo batch llamado (debe ser un archivo
*.bat) y
[parámetros] puede ser cualquier tipo de información que necesite el programa llamado que
pueda pasarse en línea de comandos.
Choice
Ofrece a los usuarios una entrada de datos para que pueda escoger una opción, y espera hasta
que ésta tenga lugar.
/C[:]letra, especifica las letras que indicarán las opciones del usuario. Si las específicas
separadas por comas, aparecerán entre corchetes seguidas de un interrogante. Si no se
especifican, se usara YN (si, no) por defecto.
/T[:]c, nn: introduce un tiempo de espera antes de ejecutar la acción por defecto. Con los
siguientes posibles valores:
c: señala que carácter será usado como opción por defecto después de nn segundos. Solo
puedes indicar uno de los caracteres especificados con el modificador /C.
• CHOICE [/C[:]letra] [/N] [/S] [/T[:]c, nn] [texto], puedes especificar un texto que
aparecerá antes de la entrada de datos. No hace falta que se entrecomille, salvo que
dicha cadena de texto incluya una barra /.
Atención: Los sistemas operativos Windows 2000, Windows xp o posteriores no trabajan con
este comando. Sólo lo aceptan por compatibilidad con otros programas.
Echo
ON|OFF: activa o desactiva el volcado de texto. Para conocer el estado actual, usar ECHO sin
parámetros.
echo.
Set
Parámetros:
• set /p Permite la entrada de datos por parte del usuario (prompt), el valor introducido
por el mismo define la variable.
Ejemplo: set /p nombre=Introduce tu nombre Esto definiría la variable %nombre% con el valor
introducido por el usuario.
Nota: Todo lo que vaya después del signo de = en un set /p se verá en pantalla.
For
Ejecuta una instrucción sobre un grupo de archivos. Puede utilizarse en la línea de comandos o
en un archivo bat o batch:
Parámetros:
%%variable o %variable: representa una variable que será reemplazada por su valor. FOR
reemplazará %%variable o %variable con la cadena de caracteres especificados en SET hasta
que la instrucción especificada se haya ejecutado sobre todos los archivos. %%variable se
emplea con FOR dentro de archivos batch, y %variable desde la línea de comandos.
(set), especifica uno o más archivos de texto (o cadenas) que se procesaran con el comando.
Necesita paréntesis.
command, la orden que debe ejecutarse sobre cada archivo especificado en SET.
Goto
Donde :Label (advierte los dos puntos) es una etiqueta que identifica la línea. 8 caracteres
máximo.
If
Permite la ejecución condicional, es decir, sólo se ejecuta la orden si cumple con la condición
introducida.
Sintaxis:
Parámetros:
Pause
pause > nul no muestra mensaje al pausar la ejecución, pero sigue requiriendo que el usuario
presione cualquier tecla para poder continuar.
Rem
Shift
El signo % seguido de un número (del 1 al 8) son los parámetros que se pasaron al invocar
nuestro archivo bat. Por ejemplo si tenemos un archivo saludo.bat con la línea echo Hola %1, si
lo invocamos tecleando saludo.bat pepe presentará en pantalla Hola Pepe. Se usa por ejemplo
para pasar nombres de archivos a un bat que se encarga de borrarlos, moverlos, etc.
El signo %0 representa el nombre del archivo bat en ejecución. El signo %* representa todos
los parámetros que se le pasaron.
@echo off
if not "%1"=="" (
) else (
pause
Para crear nuestro propio batch, es tan fácil como ir al bloc de notas de Windows, escribir los
comandos/códigos deseados, y al terminar hay que guardar el archivo con el nombre que
queramos acabado en .bat.
Tomaremos el ejemplo la frase "Hola Mundo" para crear nuestro propio batch en un par de
minutos. Algo muy básico y extremadamente simple de hacer. Abrir el bloc de notas, copiar
este código y pegar en el bloc de notas, guardar con el nombre deseado terminado en .bat y
ejecutar.
"Hola Mundo"
@echo off
pause
exit
@echo off
color 07
pause
exit
Para saber los colores disponibles y ver sus respectivos códigos, simplemente abrimos la
consola (cmd.exe) y escribimos el comando "color ?" y pulsamos ENTER. Con esto aparecerá la
lista de colores y sus respectivos códigos. Solo queda elegir los colores que más nos gusten.
Esto es muy sencillo y básico pero hay infinidad de comandos y funciones los cuales utilizados
con inteligencia se pueden obtener multitud de aplicaciones.