Ingeniero Luis Henriquez Valle Yanes
Programación para Sistemas Abiertos II
Scipt Bash
Integrantes
1.Aristides Martinez 201930110197
2.Daniel David Solano Aguilar 201810110093
3.Eduardo Josue Ordóñez Castro 201810110124
4.María Isabel Aguilera Hernández 201810110113
5.Marvin Miguel Manzanarez Melgares 201810110015
6.Stephany Paola Calix Maradiaga 201810110097
09/07/2022
ÍNDICE
I. Menú principal con Whiptail ....................................................................................... 1
II. Administración de usuarios...................................................................................... 3
III. Estado de PC .......................................................................................................... 10
IV. Instalación PSA...................................................................................................... 15
1
I. MENÚ PRINCIPAL CON WHIPTAIL
La utilización del programa requiere ubicarlo en el d irectorio /home donde adicionalmente
se creará un directorio nombrado lv¸ dentro del directorio de nuestro programa nos
encontraremos con varios archivos con extensión shell script .sh, el archivo menu_whiptail.sh
es el archivo principal que contiene la ejecución y funcionamiento de submenús del
programa.
Al ejecutarlo deberá verse de la siguiente manera
El archivo menu_whiptail.sh contiene un ciclo de estructura de control que permitirá
seleccionar los diferentes submenús del programa y terminará hasta que el usuario termine
la ejecución.
2
#!/bin/bash
salir=0
while [ $salir -eq 0 ]; do
function MenuPrincipal() {
opcion_menu_1=$(whiptail --title "Menu principal" --menu "Elige una opción"
12 50 4 \
"1" "Ardministracion de Usuarios" \
"2" "Estado de PC" \
"3" "Instalación PSA" \
"4" "Cerrar Menu" 3>&1 1>&2 2>&3)
case $opcion_menu_1 in
1)
function Menu_User(){
...
}
;;
2)
function Menu_Estado(){
...
}
;;
3)
function Menu_Instalacion(){
...
}
;;
4)
salir=1
;;
esac
}
MenuPrincipal
Menu_User
Menu_Estado
Menu_Instalacion
done
3
II. ADMINISTRACIÓN DE USUARIOS
Al seleccionar la opción Administración de Usuarios se nos abrirá un menú donde estarán
las opciones de Crear usuarios y su contraparte de Borrar usuarios.
function Menu_User(){
opcion_menu_2=$(whiptail --title "Ardministracion de Usuarios" --menu
"Seleccione" 11 50 3 \
"1" "Crear usuario" \
"2" "Borrar usuarios" \
"3" "Regresar" 3>&1 1>&2 2>&3)
if [ $opcion_menu_2 = "1" ];then
...
elif [ $opcion_menu_2 = "2" ];then
...
elif [ $opcion_menu_2 = "3" ];then
MenuPrincipal
fi
}
;;
Al seleccionar la opción de Crear usuario se abrirá un menú el cual contendrá las opciones
Crear mediante archivo y Crear manualmente.
4
salir=0
while [ $salir -eq 0 ]; do
menu_item1=$(whiptail --title "Ardministracion de Usuaios" --menu
"Seleccione" 11 50 3 \
"1" "Crear mediante archivo'" \
"2" "Crear manualmente" \
"3" "Regresar" 3>&1 1>&2 2>&3)
case $menu_item1 in
1)
sh crearUser_archivo.sh
;;
2)
sh crearUser_manual.sh
...
;;
3)
Menu_User
;;
esac
done
Al seleccionar la opción Crear mediante archivo iniciará la ejecución del archivo shell script
nombrado crearUser_manual.sh que contiene las siguientes instrucciones de comandos
Se crea la estructura de completar la información con el nombre de usuarios y se valida los
archivos de las rutas en caso de errores
5
#!/bin/bash
ingreso_user=$(whiptail --title "Creacion de usuario por archivo" \
--inputbox "Ingrese nombre y extension de
archivo" 11 50 \
3>&1 1>&2 2>&3)
#verificar que el archivo de usuarios existe mediante el uso de la
variable del nombre de archivo
if [ -f /home/iaguilera/lv/psafiles/usuarios/$ingreso_user ]; then
# ^ CAMBIAR ESTA RUTA EN CASO DE NO SER IGUAL PARA EVITAR
ERRORESthen
whiptail --title "Aviso" \
--msgbox "Extraendo usuarios...(☞゚ヮ゚)☞" 11 50
else
whiptail --title "Aviso" \
--msgbox "El archivo de usuarios no existe...☜(゚ヮ゚☜)" 11 50
exit 1
fi
Una vez realizada las validaciones se almacenan los datos en variables y se realiza el envío
de información para la creación de usuarios
#cargar los datos del archivo a una variable
for LINE in $USER
do
LOGIN=`echo $LINE | cut -d: -f2`
NOMBRE=`echo $LINE | cut -d: -f3`
APELLIDOS=`echo $LINE | cut -d: -f4`
CORREO=`echo $LINE | cut -d: -f5`
PASSWORD=`echo $LINE | cut -d: -f6`
#omitiendo datos que corresponden al GECOS
CGECOS=`echo $NOMBRE,$APELLIDOS,$CORREO`
#creando usuario
sudo useradd -m -s /bin/bash -c $CGECOS $LOGIN
#agregando password
echo "$LOGIN:$PASSWORD" | sudo chpasswd --md5
done
whiptail --title "Aviso" \
--msgbox "Usuario(s) creado(s) ☜(゚ヮ゚☜)" 11 50
6
Al seleccionar la opción Crear manualmente realizará la ejecución del archivo
crearUser_manual.sh el cual contiene las siguientes instrucciones de comandos
#!/bin/bash
LOGIN=$(whiptail --title "Creacion de usuario manual" \
--inputbox "Ingrese correctamente el login del
usuario" 11 50 \
3>&1 1>&2 2>&3)
NOMBRE=$(whiptail --title "Creacion de usuario manual" \
--inputbox "Ingrese correctamente el nombre del
usuario" 11 50 \
3>&1 1>&2 2>&3)
APELLIDOS=$(whiptail --title "Creacion de usuario manual" \
--inputbox "Ingrese correctamente el apellido de l
usuario" 11 50 \
3>&1 1>&2 2>&3)
CORREO=$(whiptail --title "Creacion de usuario manual" \
--inputbox "Ingrese correctamente el email del
usuario" 11 50 \
3>&1 1>&2 2>&3)
PASSWORD=$(whiptail --title "Creacion de usuario manual" \
--inputbox "Ingrese correctamente el password del
usuario" 11 50 \
3>&1 1>&2 2>&3)
#omitiendo datos que corresponden al GECOS
CGECOS=`echo $NOMBRE,$APELLIDOS,$CORREO`
#creando usuario
sudo useradd -m -s /bin/bash -c $CGECOS $LOGIN
#agregando password
echo "$LOGIN:$PASSWORD" | sudo chpasswd --md5
whiptail --title "Aviso" \
--msgbox "Usuario(s) creado(s) ☜(゚ヮ゚☜)" 11 50
Se pedirá que escriba la información necesaria del usuario para su creación manual y se
enviará la información para la creación del usuario.
Una vez realizada la creación de usuarios podemos eliminarlos si regresamos al menú
principal de Administración de Usuarios y seleccionamos la opción Borrar usuarios que
contiene el siguiente menú
7
salir=0
while [ $salir -eq 0 ]; do
menu_item2=$(whiptail --title "Ardministracion de Usuaios" --menu
"Seleccione" 11 50 3 \
"1" "Borrar mediante archivo'" \
"2" "Borrar manualmente" \
"3" "Regresar" 3>&1 1>&2 2>&3)
case $menu_item2 in
1)
sh deletUser_archivo.sh
;;
2)
sh deletUser_manual.sh
...
;;
3)
Menu_User
;;
esac
done
Al seleccionar la opción Borrar mediante archivo realizará la ejecución del archivo
deleteUser_archivo.sh el cual contiene las siguientes instrucciones de comandos
Se crea la estructura de completar la información con el nombre de usuarios y se valida los
archivos de las rutas en caso de errores
8
#!/bin/bash
ingreso_user=$(whiptail --title "Borrar usuario por archivo" \
--inputbox "Ingrese nombre y extension de
archivo" 11 50 \
3>&1 1>&2 2>&3)
#verificar que el archivo de usuarios existe mediante el uso de la
variable del nombre de archivo
if [ -f /home/iaguilera/lv/psafiles/usuarios/$ingreso_user ]; then
# ^ CAMBIAR ESTA RUTA EN CASO DE NO SER IGUAL PARA EVITAR
ERRORESthen
whiptail --title "Aviso" \
--msgbox "Extraendo usuarios...(☞゚ヮ゚)☞" 11 50
else
whiptail --title "Aviso" \
--msgbox "El archivo de usuarios no existe...☜(゚ヮ゚☜)" 11 50
exit 1
fi
Una vez realizada las validaciones se almacenan los datos en variables y se realiza el envio
de información para la eliminación de usuarios.
#cambiar los espacios por _
USER=`cat /home/iaguilera/lv/psafiles/usuarios/$ingreso_user | tr " "
_`
#cargar los datos del archivo a una variable
for LINE in $USER
do
LOGIN=`echo $LINE | cut -d: -f2`
#borrando usuario
sudo userdel -r $LOGIN
done
whiptail --title "Aviso" \
--msgbox "Usuario(s) eliminado(s) ☜(゚ヮ゚☜)" 11 50
fi
Al seleccionar la opción Borrar manualmente del menú se realizará la ejecución del archivo
deletUser_manual.sh el cual contiene las siguientes instrucciones de comandos
9
El cuál solicitará el ingreso de los usuarios a ser eliminados.
#!/bin/bash
LOGIN=$(whiptail --title "Borrar usuario de forma manual" \
--inputbox "Ingrese correctamente el login del
usuario a eliminar" 11 50 \
3>&1 1>&2 2>&3)
#borrando usuario
sudo userdel -r $LOGIN
whiptail --title "Aviso" \
--msgbox "Usuario eliminado ☜(゚ヮ゚☜)" 11 50
10
III. ESTADO DE PC
En el menú principal la opción Estado de PC este ejecutará la siguiente función el cual
contiene un menú que contiene las opciones de Mostrar Estado, Actualizar Log y
Configuración
function Menu_Estado(){
salir=0
while [ $salir -eq 0 ]; do
opcion_menu_3=$(whiptail --title "Estado de PC" --menu "Seleccione" 12 50 4 \
"1" "Mostrar Estado" \
"2" "Actualizar Log" \
"3" "Configuracion" \
"4" "Regresar" 3>&1 1>&2 2>&3)
if [ $opcion_menu_3 = "1" ];then
sh mostrar_estado.sh
elif [ $opcion_menu_3 = "2" ];then
sh update_log.sh
elif [ $opcion_menu_3 = "3" ];then
sh configuracion.sh
elif [ $opcion_menu_3 = "4" ];then
MenuPrincipal
fi
done
}
;;
Al seleccionar la opción Mostrar Estado este ejecutará el archivo mostrar_estado.sh el cual
contiene las siguientes instrucciones de comando.
11
En este archivo se valida la existencia de directorio y se usa como base el archivo de texto
cant.txt para verificar la cantidad de logs a imprimir
#!/bin/bash
FOLDER=statepc
#Existe la carpeta?
if [ -d "$FOLDER" ]
then
#El directorio existe
var1=`ls statepc | wc -l`
else
#El directorio no existe
mkdir statepc
var1=`ls statepc | wc -l`
fi
#Existen archivos?
if [ $var1 -ge 1 ]
then
#Existen
#Calidar tengo y quiero
FILE="cant.txt"
#Existe el archivo?
if [ -f "$FILE" ]
then
#El directorio existe
canti=`cat cant.txt`
else
#El directorio no existe
echo 1 > cant.txt
canti=`cat cant.txt`
fi
if [ $var1 -ge $canti ]
then
cantprint=$canti
else
cantprint=$var1
fi
for (( c=1; c<=$cantprint; c++ ))
do
namef=log$c.txt
echo "---------------Log #$c---------------"
cat statepc/$namef
echo "------------Fin Log #$c--------------"
done
else
#No existen archivos
Alecho
seleccionar
'-----Nolahay
opción Actualizar Log este ejecutará
logs-----' el archivo update_log.sh el cual
fi
contiene las siguientes instrucciones de comando
namef=log$num.txt
echo 'Presione enter para continuar'
read fakevar
clear
12
El archivo verificará la existencia de los directorios para generar logs actualizados, en caso
de que no exista el directorio será creado y nombrado statepc
#!/bin/bash
FOLDER=statepc
#Existe la carpeta?
if [ -d "$FOLDER" ]
then
#El directorio existe
var1=`ls statepc | wc -l`
else
#El directorio no existe
mkdir statepc
var1=`ls statepc | wc -l`
fi
#Existen archivos?
if [ $var1 -ge 1 ]
then
#Existen
num=`expr $var1 + 1`;
else
#No existen archivos
num=1;
fi
namef=log$num.txt
Posteriormente cargará la información necesaria para verificar la ultima actualización la cual
será: Estado de PC, fecha y hora, uptime, uso de CPU, uso de disco, consumo de red
13
#Cargar Log
echo '-----ESTADO DE PC-----' >> statepc/$namef
echo ' ' >> statepc/$namef
date +'FECHA: %D HORA: %H:%M:%S' >> statepc/$namef
echo ' ' >> statepc/$namef
echo 'UPTIME:' >> statepc/$namef
uptime >> statepc/$namef
echo ' ' >> statepc/$namef
echo 'USO DE CPU:' >> statepc/$namef
mpstat >> statepc/$namef
echo ' ' >> statepc/$namef
echo 'USO DE DISCO:' >> statepc/$namef
df -h >> statepc/$namef
echo ' ' >> statepc/$namef
echo 'CONSUMO DE RED:' >> statepc/$namef
route >> statepc/$namef
echo '-----FIN DE LOG-------' >> statepc/$namef
clear
whiptail --title "Actualizar Log" \
--msgbox "LISTO!!!, Log Generado con Exito." 7 40
sleep 3
clear
Al seleccionar la opción Configuración este ejecutará el archivo configuración.sh el cual
contiene las siguientes instrucciones de comando
Este archivo contiene las instrucciones de comando para crear el archivo de texto cant.txt el
cual contendrá la información del número de logs para el funcionamiento de mostrar estado
y actualización de logs.
Realiza la validación de las rutas de directorios y nombre de archivo para la correcta
ejecución en caso de no ser encontrado es creado y se solicita que ingrese la información del
archivo.
14
#!/bin/bash
clear
FILE="cant.txt"
#Existe el archivo?
if [ -f "$FILE" ]
then
#El directorio existe
canti=`cat cant.txt`
else
#El directorio no existe
echo 1 > cant.txt
canti=`cat cant.txt`
fi
whiptail --title "Configuracion" \
--msgbox "La cantidad de Logs Configurada para imprimir es: $(cat
cant.txt) " 7 60
whiptail --title "Configuracion" \
--yesno "¿Desea cambiar la cantidad?" 7 50
ans=$?
case $ans in
0)
cant=$(whiptail --title "Configuracion"
\
--inputbox "Digite la cantidad de Logs deseados" 7 50 \
3>&1 1>&2 2>&3)
echo $cant > cant.txt
;;
1)
op=1
;;
esac
clear
15
IV. INSTALACIÓN PSA
En el menú principal la opción Instalación PSA este ejecutará la siguiente función el cual
contiene un menú que contiene las opciones de Instalar Grafana y Instalar Node-Red
function Menu_Instalacion(){
echo "3"
salir=0
while [ $salir -eq 0 ]; do
opcion_menu_4=$(whiptail --title "Instalacion" --menu "Seleccione" 12 50 3 \
"1" "Instalar Grafana" \
"2" "Instalar Node-Red" \
"3" "Regresar" 3>&1 1>&2 2>&3)
if [ $opcion_menu_4 = "1" ];then
sh install_grafana.sh
elif [ $opcion_menu_4 = "2" ];then
sh install_node.sh
elif [ $opcion_menu_4 = "3" ];then
MenuPrincipal
fi
done
}
;;
Al seleccionar la opción Instalar Grafana este ejecutará el archivo install_grafana.sh el cual
contiene las siguientes instrucciones de comando
El archivo contiene comandos utilizados con el gestor de paquetes de yum para la descarga
e instalación de grafana y el administrador y controlador de servicios para iniciar el servicio
16
de grafana y luego se configuran las reglas de firewall para añadir el puerto al servicio, una
vez realizado se abrirá la ventana de inicio de sesión en navegador predeterminado
#!/bin/bash
sudo yum update;
echo '-----------------------------------------------'
sudo nano /etc/yum.repos.d/grafana.repo
echo '-----------------------------------------------'
sudo yum install grafana
echo '-----------------------------------------------'
sudo systemctl daemon-reload
echo '-----------------------------------------------'
sudo systemctl start grafana -server
echo '-----------------------------------------------'
sudo systemctl status grafana-server
echo '-----------------------------------------------'
sudo systemctl enable grafana-server
echo '-----------------------------------------------'
sudo yum install nmap
echo '-----------------------------------------------'
sudo nmap –p 1-1000 127.0.0.1
echo '-----------------------------------------------'
sudo netstat -putna
echo '-----------------------------------------------'
firewall-cmd --list-all
echo '-----------------------------------------------'
firewall-cmd --add-port=3000/tcp --permanent
echo '-----------------------------------------------'
firewall-cmd --reload
echo''
whiptail --title "Instalacion" \
--msgbox "Se ha instalado correctamente, presione enter para abrir
login" 12 40
/usr/bin/firefox -new-window http://127.0.0.3:3000/login
Al seleccionar la opción Instalar Node-Red este ejecutará el archivo install_node.sh el cual
contiene las siguientes instrucciones de comando.
El arachivo contiene comandos utilizados con el gestor de paquetes de yum para la descarga
e instalación de nodejs y el administrador de paquetes de node que realizará la instalación
global del paquete node-red
17
#!/bin/bash
sudo yum update;
echo '-----------------------------------------------'
sudo yum install epel-release -y
echo '-----------------------------------------------'
sudo yum install wget -y
echo '-----------------------------------------------'
sudo yum install nodejs
echo '-----------------------------------------------'
sudo yum install npm
echo '-----------------------------------------------'
sudo npm install -g node-red
echo '-----------------------------------------------'
echo '-----------------------------------------------'
NODE=node --version
echo''
whiptail --title "Instalacion" \
--msgbox "Se instalo Node-Red Version: $NODE" 7 60