Underc0de

Programación Scripting => Batch - Bash => Mensaje iniciado por: Stiuvert en Julio 25, 2015, 03:31:33 PM

Título: Script que genera una estructura de directorios FHS
Publicado por: Stiuvert en Julio 25, 2015, 03:31:33 PM
El otro día estuve viendo un esquema del sistema de archivos de Linux realizado por  @KODEINFECT (https://underc0de.org/foro/profile/Kodeinfect/), y como tenía un script que generaba la estructura he decido postearlo. Básicamente consiste en crear los directorios y la estructura.

Servirá para los que recién empiezan en Bash, algo sencillo para ir jugando con menús y comparaciones. Tengo una segunda versión que reliza copias de seguridad si lo encuentro lo postearé aunque animo a los usuarios a que realicen sus Scripts.

Un saludo

Código (bash) [Seleccionar]
#!/bin/bash
# Crear un script que genere una estructura de directorios y cumpla las normas FHS.
# By Stiuvert

opc=1
flag=0

while [ $opc -ne 0 ];do
clear
echo '1. - Crear estructura de directorios FHS'
echo '2. - Crear estructura en el directorio /usr'
echo '3. - Crear estructura en el directorio /var'
echo '0. - Salir'
echo -n "Elige una opción: "
read opc


# Estructura FHS
if [ $opc -eq 1 ];
then
    clear
echo '- /proc'
echo '- /sys'
echo '- /cdrom'
echo '- /initrd'
echo '- /bin'
echo '- /boot'
echo '- /dev'
echo '- /etc'
echo '- /home'
echo '- /lib'
echo '- /media'
echo '- /mnt'
echo '- /opt'
echo '- /root'
echo '- /sbin'
echo '- /tmp'
echo '- /usr'
echo '- /var'
    echo 'Crear los siguientes directorios (s/n): ' #pregunta si o no
read crear
if [ $crear == "s" ]; # 'S' creamos los directorios
then
   mkdir /{proc,sys,cdrom,initrd,bin,boot,dev,etc,home,lib,media,mnt,opt,root,sbin,tmp,usr,var}
   flag=1
   sleep 1
fi
if [ $crear == "n" ]; # 'n' vuelve al menu principal
then [ $opc -eq 0 ];
fi
fi


# El directorio /usr
if [ $opc -eq 2 ];
then
if [ $flag -eq 1 ];
then
    clear
echo '- /usr/bin'
echo '- /usr/include'
echo '- /usr/lib'
echo '- /usr/local'
echo '- /usr/sbin'
echo '- /usr/src'
    echo 'Crear los siguientes directorios (s/n): ' #pregunta si o no
read crear
fi

if [ $crear == "s" ]; # 'S' creamos los directorios
then
mkdir /usr/{bin,include,lib,local,sbin,src}
sleep 1
fi

if [ $crear == "n" ]; # 'n' vuelve al menu principal
then [ $opc -eq 0 ];
fi
fi


# El directorio /var
if [ $opc -eq 3 ];
then
if [ $flag -eq 1 ];
then
    clear
echo '- /var/cache'
echo '- /var/lib'
echo '- /var/lock'
echo '- /var/log'
echo '- /var/mail'
echo '- /var/run'
echo '- /var/spool'
echo '- /var/tmp'
    echo 'Crear los siguientes directorios (s/n): '
read directorios
fi

if [ $directorios == "s" ]; # 'S' creamos los directorios
then
mkdir /var/{cache,lib,lock,log,mail,run,spool,tmp}
sleep 1
fi

if [ $crear == "n" ]; # 'n' vulve al menu principal
then [ $opc -eq 0 ];
fi
fi

done
Título: Re:Script que genera una estructura de directorios FHS
Publicado por: CRC-_- en Julio 25, 2015, 05:16:21 PM
Gracias por el tiempo que as dedicado a crear el script, como bien dices me sirven para empezar a coger el punto a bash. Tengo algunas dudas en el código que no se que significan. Saludos



$opc -ne 0 --> $op se que llamas a una variable pero -ne?
$opc -eq 1 --> -eq?
Título: Re:Script que genera una estructura de directorios FHS
Publicado por: Stiuvert en Julio 25, 2015, 07:53:33 PM
Buenas,

while [ $opc -ne 0 ];do #mientras opc sea distinto a 0

Lo que hace es forzar a entrar en el menú, es decir, la opción 0 es salir por lo tanto digo "mientras opc (variable opción) no sea 0 hacer ESTO.

Tu segunda duda creo que es esto:

if [ $opc -eq 1 ];

Significa que, si opción es igual a 1 hazme esto.

El usuario tiene que elegir en el menú que es lo que quiere hacer, si escoge 1 pues la primera opción, si escoge 2 la segunda opción y si escoge 0 pues saldrá del programa.


Un saludo
Título: Re:Script que genera una estructura de directorios FHS
Publicado por: po6xsecpo en Agosto 25, 2015, 06:42:06 PM
Cuando usas condicionales (if o while) en bash se testea el valor booleano (true||false) de lo que está entre "[  ]"
El operador "[ ]" equivale al comando "test". Si consutlas "man test" podrás notar que son nomenclaturas ej.
"-eq" == "equals" == "==" ó este otro "-ge" == "greater or equals" == ">=".

Consultando la manpage tendrás esto más claro.

Saludos. Po6xKernel
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Gracias por el tiempo que as dedicado a crear el script, como bien dices me sirven para empezar a coger el punto a bash. Tengo algunas dudas en el código que no se que significan. Saludos



$opc -ne 0 --> $op se que llamas a una variable pero -ne?
$opc -eq 1 --> -eq?

Título: Re:Script que genera una estructura de directorios FHS
Publicado por: xianur0n en Enero 11, 2016, 04:37:50 AM
Se que el post esta un poquito viejito pero he visto que en el foto no hay tanta documentacion sobre bash. asi que tratare de explicar un poquitillo mas. tal y como explico po6xsecpo, -ne ,-eq, -a, -o son opciones del comando test. esta es la sintasis del comando test: test <opciones> <string>, donde opciones son las opciones aceptadas por el comando test y string es el parametro al que se le aplicaran las opciones. el comando test puede ser utilizado de la siguiente forma [ .... ], mas claro podemos omitir la palabra test siempre y cuando pongamos la expression evaluada entre brackets, en la ultima version de bash 4.0xx se aconseja a usar doble brackets [[ .... ]]. espero que ayude un poquito mas.
Perdon por revivir el post, solo trataba de extender un poco mas la explicacion.
Título: Re:Script que genera una estructura de directorios FHS
Publicado por: nameless en Diciembre 27, 2016, 08:58:12 AM

#!/usr/bin/env bash

(( $EUID != 0 )) && printf "you must be root...\n" && exit ||  while [[ ${exit:-n} != [Yy] ]]; do

echo '********
1-Crear estructura de directorios FHS
2-Crear estructura en el directorio /usr
3-Crear estructura en el directorio /var
4-Salir
**************'
        read -rep $'Entry option : \n' op
        case $op in
                1) printf "hello op1\n";;
                2) printf "hello op2\n";;
                3) printf "hello op3\n";;
                4) read -rep $'Exit Y/N? \n' exit ;;
                *)read -rep $'error enter a valid option... press enter to continue...\n' && clear
                        op= ;;
        esac
done


Dentro de las opciones pones el code del mkdir. Los if los puedes trabajar como test, y en vez del "s" para una pregunta usa Regex.
Saludos