miércoles, 30 de septiembre de 2015

Shell script para crear usuarios en linux (Debian)


A continuación se plantea un shell script que recibe como parámetro el nombre base para los usuarios a crear, el número de usuarios a generar y el grupo al que han de pertenecer. El número de usuarios es opcional siendo por defecto 5. El grupo al que han de pertenecer es opcional, siendo por defecto el nombre base que se da para generar los usuarios. No se realiza control de valides de argumentos, solamente el orden según se indica en el mensaje de uso.


#! /bin/bash

# Declaración de funciones
function mensaje_uso(){
    echo "ERROR: Número de parámetros incorrecto." >&2
    echo "USO: $0 <nombre_base> [-n <numero_de_usuarios>] [-g <nombre_de_grupo>]" >&2
    exit $salida  
}

function crea_grupo(){
    sentencia_crea_grupo="groupadd $nombre_grupo"
    $sentencia_crea_grupo 2> /dev/null #Supuesto de error es porque ya existe
}

function crea_usuario(){
    sentencia_crea_usuario="useradd -g $nombre_grupo $nombre_usuario"
    $sentencia_crea_usuario 2> /dev/null #Supuesto de error es porque ya existe
}

function asigna_grupo(){
    sentencia_cambio_grupo="adduser $nombre_usuario $nombre_grupo"
    $sentencia_cambio_grupo 1>&2> /dev/null #Nos aseguramos de que formen parte del grupo exigido
}

function asigna_passwd(){
    echo $nombre_usuario:$nombre_base | chpasswd    
}

# Inicialización de variables
ENE="-n"
GE="-g"
nombre_grupo=$1
nombre_base=$1
numero_usuarios=5
salida=1

# Control simple de argumentos
case "$#" in
    1)  case $1 in
            -h | --help | -help )
            salida=0 
            mensaje_uso 
            ;;
        esac
        #Se mantiene los valores por defecto
    ;;    
    3)
        if [ "$2" = "$ENE" ]; then
            numero_usuarios=$3
        else
            if [ "$2" = "$GE" ]; then
            nombre_grupo=$3
            else
                mensaje_uso
            fi
        fi
    ;;
    5)
        if [ "$2" = "$ENE" ]; then
            if [ "$4" = "$GE" ]; then
                numero_usuarios=$3
                nombre_grupo=$5
            else
                mensaje_uso
            fi
        else
            mensaje_uso
        fi
    ;;
    *) mensaje_uso
    ;;
esac

# Cuerpo
crea_grupo
 
for (( indice=1; indice <= $numero_usuarios; indice++ ))
    do
    nombre_usuario=$nombre_base$indice
    crea_usuario
    asigna_grupo
    asigna_passwd
done

exit 0


Se ha realizado en una máquina con Debian 7.0 (Wheezy) 

sábado, 19 de septiembre de 2015

Mostrar código con formato en una entrada del blog


Para escribir una entrada en el blog en la que se incluye código y se desea mostrar con un formato que lo diferencie, se puede utilizar la siguiente forma:

1) Escribir el código entre las etiquetas «pre» y «code». «code» indica que es código y «pre» nos facilita la interpretación de este, por ejemplo, evitando así la necesidad de incluir saltos de línea con formato html.
2) Aplicar estilos CSS.

Por ejemplo para mostrar el texto de la siguiente forma:

#!/bin/bash

echo ¡Hola mundo cruel!


El código utilizado es el siguiente:

<div id="codigo">
<pre><code>
#!/bin/bash

echo ¡Hola mundo cruel!

</code>
</pre>
</div>

<style>
#codigo{
color:#ffffff;
background:#000000;
}
</style>

Enlaces relacionados:
Mostrar HTML en una página web
Mostrar etiquetas html <>, sin que sean interpretadas por el navegador

jueves, 17 de septiembre de 2015

Permiso denegado al intentar instalar Guest Additions en Debian VirtualBox

Lo primero es ir al menú Devices de Virtual Box y dar clic a la opción de: Insert Guest Additions CD image... y asegurarse de que la imagen está montada, es decir, accesible el CD.
Desde una terminal nos ponemos en modo administrador:
sudo su
(e introducimos la contraseña del usuario con el que iniciamos sesión)
En este punto debemos ser root. Ejecutamos el archivo y es cuando da error diciendo: Permission denied.

Para solucionarlo se antepone la llamada al shell: sh

usuario@maquina:~$ sudo su
[sudo] password for usuario:
root@maquina:/home/usuario# whoami
root
root@maquina:/home/usuario# cd /media/cdrom0/
root@maquina:/home/usuario# sh VBoxLinuxAdditions.run

Otra forma de hacerlo es modificando el fichero /etc/fstab y cambiar la opción «auto» por «exec», es decir, «user,auto» por «user,exec» en la línea correspondiente al cdrom0, tal como se muestra a continuación:


root@maquina:/media/cdrom0# cat /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options>  <dump> <pass>
# / was on /dev/sda1 during installation
UUID=d5df0c9a-ce86-41f0-85c3-35acb6b9d9a1 /  ext4  errors=remount 0 1
# swap was on /dev/sda5 during installarion
UUID=a57d5d74-f3c3-4938-955f-ef1e3a2336c3  none  swap  sw  0  0
/dev/sr0   /media/cdrom0  udf,iso9660  user,exec   0  0

Solución encontrada en: https://forums.virtualbox.org/viewtopic.php?f=3&t=58799


Probado en Debian 7.0 (Wheezy)
Oracle VirtualBox 4.3.30 for Mac


martes, 1 de septiembre de 2015

Condición LIKE en Oracle SQL


Para condicionar en vez de utilizar un igual «=» en el que se comprueba carácter a carácter si son iguales:
('Francisco' = 'Francisco') es verdadero
('Fran     ' = 'Francisco') es falso

Con LIKE se puede condicionar utilizando comodines para realizar búsquedas como:

--Nombre de los empleados que su segunda letra, del nombre, sea una «a» minúscula.
SELECT first_name
FROM employees
WHERE first_name LIKE '_a%';

Comodines (wildcard)
Guión bajo «_» indica un carácter.
Porcentaje «%» indica cero o n caracteres.

--Nombre de los empleados que su nombre empiece por «S» y termine en «n».
SELECT first_name
FROM employees
WHERE first_name LIKE 'S%n';

Cuando tenemos la necesidad de indicar que buscamos en la cadena de caracteres uno de los caracteres comodines («_», «%»), especificamos un carácter de escape.

--Email de los empleados que contengan un guión bajo.
SELECT email
FROM employees
WHERE email LIKE '%@_%' ESCAPE '@';

En el ejemplo se ha utilizado como carácter de escape la arroba «@», podría ser otro carácter. Si coincide el carácter que especificamos fijo en la búsqueda y el de escape, simplemente se lo repite.

SELECT email
FROM employees
WHERE email LIKE '%__%' ESCAPE '_';

Si la comparación es de igualdad lo mejor es utilizar simplemente un igual «=»; en caso de solo una parte de la cadena, como por ejemplo que empiece por «A» lo mejor es utilizar la función SUBSTR y no un LIKE.

Más información: web Oracle