Script que genera una estructura de directorios FHS

Iniciado por Stiuvert, Julio 25, 2015, 03:31:33 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

El otro día estuve viendo un esquema del sistema de archivos de Linux realizado por  @No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, 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
#!/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

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

Código: php


$opc -ne 0 --> $op se que llamas a una variable pero -ne?
$opc -eq 1 --> -eq?
¡La información tiene que ser libre y accesible a tod@ el mundo!

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

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

Código: php


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


Enero 11, 2016, 04:37:50 AM #4 Ultima modificación: Enero 11, 2016, 08:40:44 AM por rollth
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.

Código: php

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