Vous êtes sur la page 1sur 21

Scripting en sistemas operativos.

Caso práctico

En un avance en el conocimiento de los administradores de equipos, el departamento de


informática afronta cómo formar a los componentes del departamento para capacitarles
en la creación de guiones o scripts en los distintos equipos, y con distintos sistemas
operativos que tenemos en la empresa.

Diego y Jimena han demostrado altos conocimientos en administración de servidores.


Sobre todo Diego en administración de servidores de libre distribución GNU/Linux y
Jimena en servidores de la factoría Microsoft (Windows 2008).

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.

La «shell» como lenguaje de «scripting».


Caso práctico

Diego y Jimena se ponen manos a la obra. ¿Cómo? Actualizando sus conocimientos


empezando por los nuevos entornos shell que existen.

Lo primero que afrontarán es cómo entender el entorno de trabajo de los distintos


scripts o guiones, tanto en Windows como en GNU/Linux.

Shell, es el término usado en informática para referirse a un intérprete de comandos, el


cuál consiste en la interfaz de usuario tradicional a través de consola o llamado también
"terminal". Normalmente utilizará órdenes o comandos propios del sistema así como
instrucciones de un lenguaje de programación en modo intérprete. 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 del ordenador. Los comandos que aportan los intérpretes, pueden usarse
a modo de guión si se escriben en ficheros ejecutables denominados shell-scripts en
GNU/Linux o batch en Windows, 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.

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:

Tenemos diversos intérpretes (sólo los más utilizados en GNU/Linux): sh (Bourne


shell), bash (Bourne-Again shell), ksh (Korn shell) y zsh (Z shell).

Para saber más

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.

Shells en cualquier distribución GNU/Linux.

Windows:

Básicamente tenemos dos: cmd y powershell.

Cmd es el más conocido y puede interpretar scripts o guiones realizados en ficheros


Batch (extensión BAT), Visual Basic Scripts (extensión VBS); ambos son los más
conocidos.

Para saber más

En el siguiente enlace nos introduce en las sintaxis y estructuras de ficheros por lotes
(.bat). Es un buen comienzo.

Sintaxis y estructuras por lotes de ficheros batch.

En el siguiente enlace tenemos todos los comandos que se pueden ejecutar utilizando
CMD.

Comandos para ejecutar desde cmd.

Actualmente han creado, a partir de Windows Vista, Powershell como intérprete de


comandos. Mucho más potente y con herramienta de edición y depurador incluidos.
En la imagen de la derecha se muestra el editor que incorpora y que tiene como ventaja
la prueba de un comando para insertarlo en el script o no.

Autoevaluación

¿Cuántos intérpretes shell tiene GNU/Linux?

Uno.

Seis.

Tres.

Ninguna respuesta es correcta.

Estructuras del lenguaje.


Caso práctico

Siguiendo con la dinámica de preparación de documentación por parte de Jimena y


Diego, estos revisan la sintaxis y estructura de las distintas instrucciones de los
lenguajes de scripts que se utilizarán en las distintas ponencias.

El intérprete de comandos o "shell" es también un lenguaje de programación completo.


La programación de shell se usa mucho para realizar tareas repetidas con frecuencia y
que no requieren programas complejos. Los administradores de sistemas suelen escribir
programas o aplicaciones en el lenguaje de base del sistema operativo por razones de
rapidez y eficiencia.

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.

Ese tipo de lenguaje de programación consta de órdenes. Órdenes que, generalmente,


podremos usar directamente en un entorno tipo terminal. Y aparte de estas órdenes,
disponemos de instrucciones con una estructura que nos permite jugar con las órdenes
del sistema.

Pondremos un ejemplo de un script en GNU/Linux:

#!/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.

Otro recurso interesante que introduce en la estructura shell en Windows y en


GNU/Linux.

Estructura Shell en Windows y en GNU/Linux.

En el siguiente enlace encontrarás un punto de referencia para introducirte en la


herramienta novedosa de powershell para sistemas Windows.

Introducción a la herramienta powershell para Windows.

Autoevaluación
¿Qué entendemos por "shell"?

Es un intérprete de comandos utilizado por sistemas operativos.

Es el entorno de navegación de cualquier sistema operativo.

Es cualquier intérprete o compilador de guiones o scripts.

Es un entorno de programación a nivel máquina.

Variables de entorno y paso de parámetros.

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.

Sabemos que todo lenguaje de programación tiene distintas maneras de guardar


información o datos a medida que se va generando. Los datos en memoria se almacenan
en variables. Bien, estas variables pueden generarse en el propio programa o bien
pueden pasarse como parámetros al programa o bien, en el caso de scripting, puede
utilizar las variables de entorno que usa el sistema operativo.

¿Qué son las variables? Es el nombre interno que le damos a una porción de memoria
donde almacenamos un dato.

Y, ¿una variable de entorno? Una variable de entorno es un objeto designado para


contener información usada por una o más aplicaciones. Algunos usuarios encuentran
esto un poco extraño o inmanejable. Sin embargo esto no es cierto: usando variables de
entorno hace que cualquiera pueda cambiar una opción de configuración para una o más
aplicaciones fácilmente. En Windows podremos observar las variables de entorno por
defecto en las claves de registro HKEY_CURRENT_USER\Environment y del sistema en
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\Environment. No obstante, igual que en GNU/Linux, podemos leer todas las
variables de entorno de nuestro equipo ejecutando, mediante el CMD, el comando set.

Veamos unos ejemplos:

En Windows:

echo %COMPUTERNAME% #extrae el nombre del ordenador.


echo %date% #extrae la fecha del equipo.

También podemos crear variables de entorno y modificar su resultado.

set anual=%date:~-4%
echo %anual%
2011

En GNU/Linux ocurre algo parecido:

Si ejecutamos set obtendremos todas las variables de entorno del sistema.

echo $PATH #extrae todos los caminos de búsqueda por defecto.


export PATH=$PATH:/home/usuario/bin #añade el directorio al camino de
búsqueda.
Debes conocer

Las distintas variables de entorno para los sistemas operativos Windows y GNU/Linux.

Variables de entorno. (0.01 MB)

Creación y depuración de «scripts».


Caso práctico

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.

Deciden, de común acuerdo, revisar su documentación e intentar actualizarla mediante


visitas virtuales a los desarrolladores de las herramientas a través de Internet.

¿Cómo crearemos un programa de scripting en GNU/Linux o en Windows? Bien, para


realizar un programa interpretado no necesita grandes herramientas de diseño. En
Windows podremos utilizar el bloc de notas (notepad) y en GNU/Linux podemos usar
herramientas de procesador de textos como nano, vi o herramientas gráficas como
gedit.

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".

Para ejecutar un programa en la shell de GNU/Linux debemos realizarlo con la orden


sh. Por ejemplo: sh direccionar.sh.

Podemos, también, cambiarle las propiedades al programa y le añadimos la propiedad


de ejecutable al programa con la orden chmod.

En GNU/Linux, al existir diversas shell, es conveniente utilizar la primera línea para


indicar la shell que utilizará el programa.

Como ejemplo: #!/bin/bash utilizará la shell bash.

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.

Es importante disponer de una herramienta que podamos utilizarlo de "debugger" y


seguir, paso a paso, la ejecución del script. De esta manera, podremos comprobar el
código de funciones y/o subrutinas inspeccionando el valor de cada una de las variables.

Debes conocer

Depuración, en los distintos shells, de scripts en Windows.

Depuración de scripts en Windows. (0.12 MB)

En el caso de sistemas operativos GNU/Linux, el comando sh que utilizamos para


"lanzar" un guión tiene un parámetro que nos permite visualizar los movimientos del
guión, el valor de sus variables, etc.

Para saber más

En el siguiente enlace tenemos un software en entorno gráfico que permite depurar los
shell-scripts en GNU/Linux.

Software para depurar los Shell-scripts en GNU/Linux.

Autoevaluación
Para ejecutar un script en GNU/Linux desde un terminal debe…

Tener la extensión sh.

Es suficiente que contenga la primera línea #!/bin/bash.

Con la instrucción sh script o cambiando los derechos del script.


Con la instrucción sh script y cambiando los derechos del script.

Interpretación de «scripts» del sistema. Adaptaciones.


Caso práctico

Jimena le comenta a Diego la necesidad de entender correctamente el proceso de


interpretación de los scripts o guiones por parte del sistema operativo. Cómo
interrelaciona con él y cómo podemos sacarle el mayor provecho de estos pequeños
programas para realizar tareas monótonas y repetitivas.

De igual manera debemos transmitir, comenta Jimena, el valor de las variables de


entorno tanto para el sistema como para los programas de script.

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:

#echo $LOGNAME; indicará en un sistema operativo GNU/Linux el nombre del usuario


que ha accedido al sistema mediante la "traducción" de la variable de entorno
$LOGNAME.

También podemos establecer comandos compuestos como por ejemplo:

usuario@m9:~> date; who am i


vie oct 14 13:42:44 CEST 2011
usuario pts/0 2011-10-14 13:35 (192.168.1.240)
usuario@m9:~>

Estas órdenes pueden agruparse en un único fichero que permita ejecutarlos,


prácticamente, a la vez. Ya estaríamos construyendo un archivo por lotes.

Si tenemos un fichero script01.sh que contiene:


#!/bin/bash
date
who am i
talledo@m9:~/scripts> sh uno.sh

Obtendremos el mismo resultado.

Para saber más

Instrucciones en Visual Basic Scripts desde la página oficial de Microsoft.

Instrucciones en Visual Basic Scripts.

Autoevaluación
¿Los scripts pueden utilizar y manipular las variables de entorno?

Sí, pero deben asignársela a una variable propia del programa.

No, sólo se utilizan como información al usuario.

Sí, si lo pasamos como parámetro al programa de script.

Sí, se pueden utilizar y manipularlos.

Utilización de extensiones de comandos para tareas de


administración.
Caso práctico

Diego le comenta a Jimena si tiene en cuenta que Windows tiene un sistema de


extensiones de comandos que permite interactuar de forma más completa con el sistema
operativo.

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.

Para saber más

En el siguiente enlace encontrarás mucha información sobre scripts para entornos


Windows. Así como enlaces a otras páginas que tratan sobre el mismo tema.
Scripts para entornos Windows.

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.

Introducción a los ficheros por lotes.

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.

# Sincroniza la hora con el servidor.


@echo off
net time \\hercules /set /yes
# Elimina las unidades lógicas que se van a utilizar.
net use z: /delete
net use y: /delete
# Asigna las unidades lógicas.
net use z: "\\hercules\%username%$"
net use y: "\\hercules\trabajosESI2$"
Para saber más

Tabla de extensiones para sistemas operativos basados en DOS.

Autoevaluación
Sólo Windows necesita una extensión para identificar los scripts. ¿Verdadero o
falso?

Verdadero.

Falso.

Personalización y/o creación de extensiones de


comandos específicos.
Caso práctico

Diego y Jimena disponen ya de bastante material de trabajo para sus ponencias.

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...

¿Cómo sabemos que está habilitado? Si revisamos el registro y accedemos a la variable


de registro HKEY_CURRENT_USER\Software\Microsoft\Command
Processor\EnableExtensions o
HKEY_LOCAL_MACHINE\Software\Microsoft\Command
Processor\EnableExtensions.

¿Quieres un ejemplo? Utilizamos el comando SET para crear nuevas variables de


entorno y probamos si podemos aplicar lo asignado.

C:\>SET micasa=C:\Documents and Settings\sirio


C:\>CD %micasa%
C:\Documents and Settings\sirio>

Z:\>SET m=ping -n 1 www.madrid.org


Z:\>%m%
Haciendo ping a www.madrid.org [195.77.128.9] con 32 bytes de datos:

Respuesta desde 195.77.128.9: bytes=32 tiempo=46ms TTL=247

Estadísticas de ping para 195.77.128.9:


Paquetes: enviados = 1, recibidos = 1, perdidos = 0 (0% perdidos),
Tiempos aproximados de recorrido redondo en milisegundos:
mínimo = 46ms, máximo = 46ms, promedio = 46ms

Vamos a indicar como habilitar las extensiones de comandos si éstas no están


habilitadas. Esto se realiza con el flag o bandera enableextensions. Y lo aplicamos a
un fichero BAT o CMD.

#Nombre archivo: tail.cmd


#Utilización: tail archivo número de líneas.
#Ejemplo: tail prueba.txt 3
@echo off
setlocal ENABLEEXTENSIONS
if {%2} == {} (set "lines=%1") else set "lines=%2"
for /f %%a in ('find /c /v "" ^< %1') do set /a skip=%%a-lines
for /f "delims=" %%a in ('more /e +%skip% ^< %1') do (
echo %%a
)
Para saber más

Tenemos dos enlaces interesantes. En el primero, de Microsoft, tendremos todos los


comandos que podremos utilizar en nuestros scripts .bat o .cmd.

Comandos para scripts bat o cmd.

En este otro enlace encontraremos ejemplos varios utilizando variables de entorno.

Utilización de variables de entorno.


Autoevaluación
¿Cuándo se puede utilizar, en GNU/Linux, extensiones de archivo?

Nunca.

No son necesarias, pero el usuario puede utilizarlas como referencia.

Solo si son scripts o guiones, por ejemplo documentos html.

Ninguna respuesta es correcta.

Acceso al registro.
Caso práctico

A diferencia de GNU/Linux, Windows mantiene una base de datos llamada registro,


comenta Jimena. Con lo cual, Diego se salva de esta parte de ponencia.

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.

El registro de Windows mantiene una información y configuración de todo el hardware,


software, usuarios y preferencias del equipo. Esta información se mantiene jerarquizada.

Para saber más

El siguiente enlace de Microsoft ahonda en los detalles del registro. Cómo es su


estructura, qué objetos gestiona, configuración de los distintos usuarios, etc.

Información sobre el registro de Windows.

Sabemos que accedemos al registro mediante las órdenes regedit.exe o


regedt32.exe. ¿Pero podemos acceder a dicho registro mediante un fichero de script?
Sí, podemos.

¿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 una variable para usar el método RegRead


Dim MiObjeto

'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)")

'Eliminamos la variable de objeto


Set MiObjeto = Nothing

Autoevaluación
GNU/Linux utiliza, como motor de base de datos de registro, Mysql. ¿Verdadero o
falso?

Verdadero.

Falso.

Programación para la gestión del directorio activo.


Caso práctico
Jimena y Diego quieren afrontar y enfocar, en sus respectivas ponencias, cómo acceder
a los directorios activos de los sistemas operativos. En Windows con el Active
Directory y en GNU/Linux con LDAP.

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.

'Indicamos en qué objeto buscar.


Set objetoGrupo =
GetObject("LDAP://cn=soporte,ou=redes,dc=sored,dc=local")
'Realiza una llamada a la subrutina que realiza la búsqueda.
Call EnumeraMiembros(objetoGrupo)
'Desarrollo de la subrutina. Envía como parámetro el objeto de
búsqueda.
Sub EnumeraMiembros(objetoGrupo)
For Each objetoMiembro In ObjetoGrupo.Members
wscript.Echo "Miembro: " &
objetoMiembro.SAMAccountName _ & " (" & objetoMiembro.class & ")"
If (LCase(objetoMiembro.Class =
"group") Then
Call
EnumerarMiembros(objetoMiembro)
End If
Next
End Sub
Autoevaluación
¿En GNU/Linux podemos usar variables de entorno?

Sí.
Sí, pero sólo el usuario root.

No, sólo en sistemas operativos de Microsoft se pueden utilizar este tipo de variables.

No, ni en Windows ni en GNU/Linux.

«Scripts» para la administración de cuentas de


usuario, procesos y servicios del sistema operativo
Windows (I).
Caso práctico

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.

Set objRootDSE = GetObject("LDAP://rootDSE")


Set objContainer = GetObject("LDAP://ou=redes," & _
objRootDSE.Get("defaultNamingContext"))
For i = 1 To 10
Set objLeaf = objContainer.Create("User", "cn=UserNo" & i)
objLeaf.Put "sAMAccountName", "UserNo" & i
objLeaf.SetInfo
Next
WScript.Echo "10 Usuarios creados."

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.

Arquitectura de Active Directory.

«Scripts» para la administración de cuentas de usuario, procesos y


servicios del sistema operativo GNU/Linux (II).

En el caso de GNU/Linux existen diversas formas de crear programas de scripts para


uso de usuarios o asignación de parámetros y variables de entorno.

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.

Un ejemplo de script que muestra si existe un usuario o no existe usuario o grupo,


UsuarioyGrupo.sh:

#! /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í.

Sí, pero solo el usuario root.

No, solo en sistemas operativos de Microsoft se pueden utilizar este tipo de variables.

No, ni en Windows ni en GNU/Linux.

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.

Un tipo batch es un archivo de texto que contiene órdenes a ejecutar en un intérprete de


órdenes propio de DOS o OS/2. Cuando es iniciado, un programa shell —típicamente
command.com o cmd.exe— lo lee y ejecuta, generalmente línea a línea. De este modo, se
emplea para ejecutar series de comandos automáticamente. El hecho de que funcione solo
para MS-DOS lo hace muy limitado. Su extensión es .bat o .cmd.

Índice

• 1 Órdenes de procesamiento por lotes

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

o 1.11 Parámetros pasados al script batch

▪ 1.11.1 "Hola Mundo"

Órdenes de procesamiento por lotes

Hay varias instrucciones especiales para este tipo de archivos:

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.

• CALL [unidad_disco:][path]nombre_archivo [parámetros]

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.

/N: evita que se muestre el prompt de usuario.

/S: hace que discrimine entre entrada de letras mayúsculas o minúsculas.

/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.

nn: indica el número de segundos de pausa. Valores entre 0 y 99.

• 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

ECHO [ON|OFF] echo [mensaje] Parámetros

ON|OFF: activa o desactiva el volcado de texto. Para conocer el estado actual, usar ECHO sin
parámetros.

Mensaje: el texto a mostrar.

echo.

Set

Da valor a una variable general o de entorno. Ejemplo: set nombre=jake

Parámetros:

• set /a Da valor a una variable utilizando operaciones aritméticas

Ejemplo: set /a número=2+2 Lo que devolvería el valor 4

• 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:

a) en archivos BAT: FOR %%variable IN (set) DO command [command-parameters]

b) en línea de comandos: FOR %variable IN (set) DO command [command-parameters]

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.

[command-parameters], parámetros de la instrucción. Podemos emplear la orden son


cualquiera de sus parámetros habituales.

Goto

Salta la ejecución del programa hacia la línea indicada: GOTO :label

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:

• IF [NOT] ERRORLEVEL número comando

• IF [NOT] string1==string2 comando

• IF [NOT] EXIST nombre_archivo comando

Parámetros:

NOT: La instrucción sujeta a condición se ejecuta solo si esta es falsa.

ERRORLEVEL número: la condición es verdadera sólo si la orden anterior devuelve un código


de salida igual o mayor que el especificado.

command: especifica la orden a ejecutar si la condición se cumple.


string1==string2: La condición se cumple solo si cadena1 es igual a cadena2. Cadena1 y
cadena2 pueden ser cadenas de texto o variables.

EXIST nombre_archivo: la condición se cumple si existe nombre_archivo.

Pause

Suspende la ejecución de instrucciones y presenta un mensaje para que el usuario presione


una tecla para continuar.

pause > nul no muestra mensaje al pausar la ejecución, pero sigue requiriendo que el usuario
presione cualquier tecla para poder continuar.

Rem

Línea de comentario. Podemos usar REM , :: y % comentario %

Shift

Alterna la posición de los parámetros en el archivo bat.

Parámetros pasados al script batch

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.

::cancelamos el echo para que no moleste

@echo off

::mostramos la ruta y el nombre de este bat

echo estas ejecutando el archivo %0

::si se nos pasó algún parámetro, lo mostramos

if not "%1"=="" (

echo pasaste el/los parámetro/s %*

) else (

echo no pasaste ningún argumento al programa

::espera que se pulse una tecla para terminar

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

title Mi primer 'batch'

echo Hola Mundo

pause

exit

El código básico seria este de arriba.

Al no especificar el código de color mediante su comando, el color por defecto es el color de la


consola (cmd.exe), normalmente negro/blanco. Para cambiar el color solo añadiremos el
comando "color" seguido de un espacio y el código de dos dígitos, de los cuales el primero
corresponde al color de fondo y el segundo a la letra. En este caso el código de color es 07.

Entonces el código quedaría así:

@echo off

color 07

title Mi primer 'batch'

echo Hola Mundo

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.

Es fundamental e indispensable respetar siempre los espacios, caracteres, comandos, etc, a la


hora de escribir cualquier línea de comando/código por simple o básica que sea.