2017-09-28 1 views
-1

J'ai créé une fonction de menu et j'ai pu prendre une entrée et appeler la fonction quand elle est entrée. Je me demandais comment je devrais faire revenir le menu après avoir fini une fonction.Bash Script Menu Loop

J'ai ici un exemple de ce que je cherche. J'ai un menu et les fonctions de celui-ci. Je voudrais juste être en mesure de revenir au menu après avoir utilisé l'une des fonctions. Ce peut être une solution simple, mais j'ai regardé beaucoup d'endroits et ne peux pas trouver ce que je cherche.

#!/bin/sh 
function Main_Menu 
clear 
echo "Select an option ..." 
printf "\n" 
echo "1 - Check Free Disk Space" 
echo "2 - List Directories" 
echo "3 - Show Running Processes" 
echo "4 - TCP Connections" 
echo "5 - Network Interfaces" 
echo "6 - Show PATH" 
echo "7 - Show Computer Hostname" 
echo "8 - Routing Table" 
echo "9 - Computer Uptime" 
echo "10 - Available Block Devices" 
echo "11 - Mount Device" 
echo -n "Input desired function number and press ENTER: " 
read user_input  
if [ "$user_input" = "1" ] 
then 
    Check_Disk 
elif [ "$user_input" = "2" ] 
then 
    List_Dir 
elif [ "$user_input" = "3" ] 
then 
    Show_Run 
elif [ "$user_input" = "4" ] 
then 
    TCP_Con 
elif [ "$user_input" = "5" ] 
then 
    Net_Int 
elif [ "$user_input" = "6" ] 
then 
    Show_Path 
elif [ "$user_input" = "7" ] 
then 
    Host_Name 
elif [ "$user_input" = "8" ] 
then 
    Route_Table 
elif [ "$user_input" = "9" ] 
then 
    Up_time 
elif [ "$user_input" = "10" ] 
then 
    Block_Dev 
elif [ "$user_input" = "11" ] 
then 
    Mount_Dev 
else 
    Main_Menu 
fi 

function Check_Disk 
clear 

freedisk=$(df -h ) 

echo "$freedisk" 

then 
    Main_Menu 

else 
    CheckDisk 
fi 
+0

'while true; faire ...; done' – Barmar

+0

Aussi, si votre shell est 'bash', comme indiqué dans le titre (mais pas le shebang), vous pouvez utiliser' select' pour simplifier le code. – choroba

+1

Vous ne disposez pas de la syntaxe de fonction appropriée qui vous a été fournie [dans votre question précédente] (https://stackoverflow.com/q/46453114/7552) –

Répondre

0

Semble un peu long pour un menu, j'utiliser quelque chose comme:

function f_list_nodes { 
echo "some stuff" 
} 
function f_add_nodes { 
echo "some stuff 2" 
} 
function f_del_nodes { 
echo "some stuff 3" 
} 

function m_main_menu { 
while [ 1 ] 
do 
    PS3='Choose a number: ' 
    select choix in "listnodes" "addnode" "delnode" "quit" 
    do 
     break 
    done 
    case $choix in 
     listnodes) f_list_nodes;; 
     addnode) f_add_node;; 
     delnode) f_del_node;; 
     quit)  exit ;; 
     *)  echo "nope" ;; 
    esac 
done 
} 

m_main_menu