{ padding-bottom: 70px; }

Linux Bash - Choices and Loops

Posted on 18th Sep 2020

#!/bin/bash

        E='echo -e';e='echo -en';trap "R;exit" 2
      ESC=$( $e "e")
     TPUT(){ $e "e[${1};${2}H";}
    CLEAR(){ $e "ec";}
    CIVIS(){ $e "e[?25l";}
     DRAW(){ $e "e%@e(0";}
    WRITE(){ $e "e(B";}
     MARK(){ $e "e[7m";}
   UNMARK(){ $e "e[27m";}
        R(){ CLEAR ;stty sane;$e "ece[37;44me[J";};
     HEAD(){ DRAW
             for each in $(seq 1 13);do
                $E "   x                                                                       x"
                done
                WRITE;MARK;TPUT 1 5
                $E "BASH SELECTION MENU                                                 ";UNMARK;}
                i=0; CLEAR; CIVIS;NULL=/dev/null
        FOOT(){ MARK;TPUT 13 5
                printf "ENTER - SELECT,NEXT                                             ";UNMARK;}
        ARROW(){ read -s -n3 key 2>/dev/null >&2
                if [[ $key = $ESC[A ]];then echo up;fi
                if [[ $key = $ESC[B ]];then echo dn;fi;}
        M0(){ TPUT  4 20; $e "Login Info";}
        M1(){ TPUT  5 20; $e "Network";}
        M2(){ TPUT  6 20; $e "Disk";}
        M3(){ TPUT  7 20; $e "Routing";}
        M4(){ TPUT  8 20; $e "Time";}
        M5(){ TPUT  9 20; $e "ABOUT";}
        M6(){ TPUT 10 20; $e "EXIT";}
        LM=6
        MENU(){ for each in $(seq 0 $LM);do M${each};done;}
        POS(){ if [[ $cur == up ]];then ((i--));fi
                 if [[ $cur == dn ]];then ((i++));fi
                 if [[ $i -lt 0 ]];then i=$LM;fi
                 if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
                if [[ $before -lt 0 ]];then before=$LM;fi
                if [[ $after -gt $LM ]];then after=0;fi
                if [[ $j -lt $i   ]];then UNMARK;M$before;else UNMARK;M$after;fi
                if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
                UNMARK;M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
        INIT(){ R;HEAD;FOOT;MENU;}
        SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
        ES(){ MARK;$e "ENTER = main menu ";$b;read;INIT;};INIT
        while [[ "$0" != " " ]]; do case $i in
        0) S=M0;SC;if [[ $cur == "" ]];then R;$e "n$(w      )n";ES;fi;;
        1) S=M1;SC;if [[ $cur == "" ]];then R;$e "n$(ip a      )n";ES;fi;;
        2) S=M2;SC;if [[ $cur == "" ]];then R;$e "n$(df -h     )n";ES;fi;;
        3) S=M3;SC;if [[ $cur == "" ]];then R;$e "n$(ip route      )n";ES;fi;;
        4) S=M4;SC;if [[ $cur == "" ]];then R;$e "n$(date      )n";ES;fi;;
        5) S=M5;SC;if [[ $cur == "" ]];then R;$e "n$($e by dan langas      )n";ES;fi;;
        6) S=M6;SC;if [[ $cur == "" ]];then R;exit 0;fi;;
esac;POS;done