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
#!/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
$opc -ne 0 --> $op se que llamas a una variable pero -ne?
$opc -eq 1 --> -eq?
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 enlaces.
Registrate o Entra a tu 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?
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.
#!/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