En el articulo anterior vimos como crear un menú simple, ahora nos toca ponerlo en marcha y ejecutar ordenes. En este caso y para que sirva de ejemplo, al anterior script le agregaremos funciones que nos aportaran información del sistema, en concreto serán:
- Información del Sistema Operativo.
- Información del Hostname y dns.
- Información de la network/red.
- Usuarios conectados actualmente.
- Últimos usuarios que estuvieron conectados.
- Información de la memoria, libre, ocupada, y el software que hace uso de ella.
Script de ejemplo:
Creamos un script al que llamaremos «systeminfo.sh».
nano systeminfo.sh
Copia, pega, modifica el script.
#!/bin/bash # Menu shell script info del sistema # Linux server / desktop. # Define variables LSB=/usr/bin/lsb_release # Purpose: Display pause prompt # $1-> Message (optional) function pause(){ local message="$@" [ -z $message ] && message="Press [Enter] key to continue..." read -p "$message" readEnterKey } # Purpose - Display a menu on screen function show_menu(){ date echo "---------------------------" echo " INFORMACION DEL SISTEMA " echo "---------------------------" echo "1. Informacion del S.O." echo "2. Informacion del Hostname y dns" echo "3. Informacion network" echo "4. Usuarios conectados" echo "5. Ultimos usuarios conectados" echo "6. Informacion de la memoria" echo "7. Salir" } # Purpose - Display header message # $1 - message function write_header(){ local h="$@" echo "---------------------------------------------------------------" echo " ${h}" echo "---------------------------------------------------------------" } # Purpose - Get info about your operating system function os_info(){ write_header " System information " echo "Operating system : $(uname)" [ -x $LSB ] && $LSB -a || echo "$LSB command is not insalled (set \$LSB variable)" #pause "Press [Enter] key to continue..." pause } # Purpose - Get info about host such as dns, IP, and hostname function host_info(){ local dnsips=$(sed -e '/^$/d' /etc/resolv.conf | awk '{if (tolower($1)=="nameserver") print $2}') write_header " Hostname and DNS information " echo "Hostname : $(hostname -s)" echo "DNS domain : $(hostname -d)" echo "Fully qualified domain name : $(hostname -f)" echo "Network address (IP) : $(hostname -i)" echo "DNS name servers (DNS IP) : ${dnsips}" pause } # Purpose - Network inferface and routing info function net_info(){ devices=$(netstat -i | cut -d" " -f1 | egrep -v "^Kernel|Iface|lo") write_header " Network information " echo "Total network interfaces found : $(wc -w <<<${devices})" echo "*** IP Addresses Information ***" ip -4 address show echo "***********************" echo "*** Network routing ***" echo "***********************" netstat -nr echo "**************************************" echo "*** Interface traffic information ***" echo "**************************************" netstat -i pause } # Purpose - Display a list of users currently logged on # display a list of receltly loggged in users function user_info(){ local cmd="$1" case "$cmd" in who) write_header " Who is online "; who -H; pause ;; last) write_header " List of last logged in users "; last ; pause ;; esac } # Purpose - Display used and free memory info function mem_info(){ write_header " Free and used memory " free -m echo "*********************************" echo "*** Virtual memory statistics ***" echo "*********************************" vmstat echo "***********************************" echo "*** Top 5 memory eating process ***" echo "***********************************" ps auxf | sort -nr -k 4 | head -5 pause } # Purpose - Get input via the keyboard and make a decision using case..esac function read_input(){ local c read -p "Enter your choice [ 1 - 7 ] " c case $c in 1) os_info ;; 2) host_info ;; 3) net_info ;; 4) user_info "who" ;; 5) user_info "last" ;; 6) mem_info ;; 7) echo "Bye!"; exit 0 ;; *) echo "Please select between 1 to 7 choice only." pause esac } # ignore CTRL+C, CTRL+Z and quit singles using the trap trap '' SIGINT SIGQUIT SIGTSTP # main logic while true do clear show_menu # display memu read_input # wait for user input done
Le das permisos.
chmod +x systeminfo.sh
Ejecuta.
./systeminfo.sh # O bien.. bash systeminfo.sh
Ejemplos de respuestas:
Red del sistema.
Usuarios en linea (en este caso tan solo el root).
Uso de la memoria incluyendo el soft o scripts instalados.
Continua en el siguiente articulo: ——–>>
hola, muchas gracias por el ducumento, tengo problemas en ejecutar los scripts por lo general en los case, en concreto en este ejercicio linea 75 «error sintactico cerca del elemento inesperado», si lo dejo sin un espacio al final aparece como $’in\r’, con el espacio ‘newline’, no entiendo el error y de verdad me divierte mucho el tema y lo estoy tratando de implementar en el trabajo para hacer la vida mas facil, gracias!!!
¿Has puesto las comillas?