Skocz do zawartości


Hej! Zauważyliśmy, że korzystasz z "adblocka".
Chcesz pozbyć się komunikatu? Wystarczy wyłączyć wtyczkę!
Jeśli chcesz swobodnie poruszać się po forum bez reklam możesz zakupić rangę "Premium".
Więcej informacji!
Dave

[Poradnik] Dialog Utility czyli własne menu do zarządzania serwerem

Rekomendowane odpowiedzi

Dave

Witam w tym poradniku pokażę wam skrypt, który umożliwi wam budowanie ładnych interfejsów dla waszych botów oraz ułatwi budowanie instalatorów dla różnych aplikacji

Aby skrypt działał prawidłowo dopiero po zainstalowaniu odpowiedniego pakietu:

apt-get install dialog

Możemy oczywiście uwzględnić powyższą linijkę w samym skrypcie startowym menu.

Nie będę rozpisywał wszystkiego linijka po linijce z racji tego, że menu które będziecie pisać będzie miało zupełnie inną zawartość.

Tak więc tworzymy sobie plik menu.shJako przykładową zawartość możemy wkleić mu poniższy skrypt:

Spoiler


#!/bin/bash
# SCRIPT  : menu_dialog.sh
# PURPOSE : A menu driven Shell script using dialog utility
#           which has following options:
#           Display Today's Date and Time.
#           Display calendar.
#           Delete selected file from supplied directory.
#           List of users currently logged in
#           Disk Statistics
#           Exit
#
##############################################################################
#                 Checking availability of dialog utility                    #
##############################################################################

# dialog is a utility installed by default on all major Linux distributions.
# But it is good to check availability of dialog utility on your Linux box.

which dialog &> /dev/null

[ $? -ne 0 ]  && echo "Dialog utility is not available, Install it" && exit 1

##############################################################################
#                      Define Functions Here                                 #
##############################################################################

###################### deletetempfiles function ##############################

# This function is called by trap command
# For conformation of deletion use rm -fi *.$$

deletetempfiles()
{
    rm -f *.$$
}


######################## Show_time function #################################

# Shows today's date and time

show_time()
{
   dialog --backtitle "MENU DRIVEN PROGRAM" --title "DATE & TIME" \
   --msgbox "\n        Today's Date:   `date +"%d-%m-%Y"` \n\n \
       Today's Time:   `date +"%r %Z"`" 10 60
}

####################### show_cal function ###################################

# Shows current month calendar

show_cal()
{
   dialog --backtitle "MENU DRIVEN PROGRAM" --title "CALENDAR" \
   --msgbox "`cal`" 12 25
}

####################### deletefile function #################################

# Used to delete file under supplied directory, not including sub dirs.

deletefile()
{

   dialog --backtitle "MENU DRIVEN PROGRAM" --title "Directory Path" \
   --inputbox "\nEnter directory path (Absolute or Relative) \
\nPress just Enter for current directory" 12 60 2> temp1.$$

   if [ $? -ne 0 ]
   then
       rm -f temp1.$$
       return
   fi

   rmdir=`cat temp1.$$`

   if [ -z "$rmdir" ]
   then
       dirname=$(pwd)                  # You can also use `pwd`
       rmdir=$dirname/*
   else

       # remove trailing * and / from directory path

       echo "$rmdir" | grep "\*$" &> /dev/null && rmdir=${rmdir%\*}
       echo "$rmdir" | grep "/$" &> /dev/null && rmdir=${rmdir%/}

       # Check supplied directory exist or not

       ( cd $rmdir 2>&1 | grep "No such file or directory" &> /dev/null )

       # Above codeblock run in sub shell, so your current directory persists.

       if [ $? -eq 0 ]
       then
           dialog --backtitle "MENU DRIVEN PROGRAM" \
           --title "Validating Directory" \
           --msgbox "\n $rmdir: No such file or directory \
\n\n Press ENTER to return to the Main Menu" 10 60
           return
       fi

       # Do you have proper permissions ?

       ( cd $rmdir 2> /dev/null )

       if [ $? -ne 0 ]
       then
           dialog --backtitle "MENU DRIVEN PROGRAM" \
           --title "Checking Permissions" \
           --msgbox "\n $rmdir:  Permission denied to access this directory \
\n\n Press ENTER to return to the Main Menu" 10 60
           return
       fi

       if [ ! -r $rmdir ]
       then
           dialog --backtitle "MENU DRIVEN PROGRAM" \
           --title "Checking Permissions" \
           --msgbox "\n $rmdir:  No read permission \
\n\n Press ENTER to return to the Main Menu" 10 60
           return
       fi

   dirname=$rmdir
   rmdir=$rmdir/*             # get all the files under given directory

   fi

   for i in $rmdir            # process each file
   do

      # Store all regular file names in temp2.$$

      if [ -f $i ]
      then
          echo " $i delete? " >> temp2.$$
      fi

   done

   if [ -f temp2.$$ ]
   then
       dialog --backtitle "MENU DRIVEN PROGRAM" \
       --title "Select File to Delete" \
       --menu "Use [UP/DOWN] keys to move, then press enter \
\nFiles under directory $dirname:" 18 60 12 \
       `cat temp2.$$` 2> file2delete.$$
   else
     dialog --backtitle "MENU DRIVEN PROGRAM" --title "Select File to Delete" \
      --msgbox "\n\n There are no regular files in $dirname directory" 10 60
      return
   fi

   rtval=$?

   file2remove=`cat file2delete.$$`

   case $rtval in

       0) dialog --backtitle "MENU DRIVEN PROGRAM" --title "ARE YOU SURE" \
          --yesno "\nDo you Want to Delete File: $file2remove" 7 70


          if [ $? -eq 0 ]
          then
              rm -f $file2remove 2> Errorfile.$$

              # Check file successfully deleted or not.

              if [ $? -eq 0 ]
              then
                  dialog --backtitle "MENU DRIVEN PROGRAM" \
                  --title "Information : FILE DELETED" \
                  --msgbox "\nFile : $file2remove deleted" 8 70
             else
                 dialog --backtitle "MENU DRIVEN PROGRAM" \
                 --title "Information : ERROR ON DELETION" \
                 --msgbox "\nProblem in Deleting File: $file2remove \
\n\nError: `cat Errorfile.$$` \n\nPress ENTER to return to the Main Menu" 12 70
             fi

          else
              dialog --backtitle "MENU DRIVEN PROGRAM" \
              --title "Information : DELETION ABORTED" \
              --msgbox "Action Aborted: \n\n $file2remove not deleted" 8 70
          fi  ;;

      *)  deletetempfiles               # Remove temporary files
          return ;;
   esac

   deletetempfiles                      # remove temporary files
   return
}

########################## currentusers function ############################

currentusers()
{
   who > userslist.$$
   dialog --backtitle "MENU DRIVEN PROGRAM" \
   --title "CURRENTLY LOGGED IN USERS LIST" \
   --textbox userslist.$$ 12 60
}

############################ diskstats function #############################

diskstats()
{
   df -h | grep "^/" > statsfile.$$
   dialog --backtitle "MENU DRIVEN PROGRAM" \
   --title "DISK STATISTICS" \
   --textbox statsfile.$$ 10 60
}

##############################################################################
#                           MAIN STRATS HERE                                 #
##############################################################################

trap 'deletetempfiles'  EXIT     # calls deletetempfiles function on exit

while :
do

# Dialog utility to display options list

    dialog --clear --backtitle "MENU DRIVEN PROGRAM" --title "MAIN MENU" \
    --menu "Use [UP/DOWN] key to move" 12 60 6 \
    "DATE_TIME" "TO DISPLAY DATE AND TIME" \
    "CALENDAR"  "TO DISPLAY CALENDAR" \
    "DELETE"    "TO DELETE FILES" \
    "USERS"     "TO LIST CURRENTLY LOGGED IN USERS" \
    "DISK"      "TO DISPLAY DISK STATISTICS" \
    "EXIT"      "TO EXIT" 2> menuchoices.$$

    retopt=$?
    choice=`cat menuchoices.$$`

    case $retopt in

           0) case $choice in

                  DATE_TIME)  show_time ;;
                  CALENDAR)   show_cal ;;
                  DELETE)     deletefile ;;
                  USERS)      currentusers ;;
                  DISK)       diskstats ;;
                  EXIT)       clear; exit 0;;

              esac ;;

          *)clear ; exit ;;
    esac

done 


 

 

następnie nadajemy użytkownikom prawo do wykonywania powyższego skryptu:

chmod +x menu.sh

oraz uruchamiamy skrypt:

menu.sh

Zamieszczam również kilka screenów z działania powyższego kodu:

Spoiler

 

image.png.cc71523f0ed25da1f439ce9f2bb84eeb.png

 

image.png.ca1b639ce5cc97305477c2fc5796b046.png

 

image.png.686cc53a6ee82fcbccc8c330db2e5eb2.png

 

image.png.5463dad03089721492151a5bac54a32c.png

 

image.png.745c300e69fd18bc79ed510807ce9c31.png

 

image.png.5409449cd134d55d70c0bc4d75342fbf.png

 

image.png.f8880dd368a3f4f79d76f3f9e2def57e.png

 

 

Powyższy kod pochodzi ze strony:

http://www.bashguru.com/2011/01/menu-driven-shell-script-using-dialog.html

 

Edytowane przez Dave

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
GryTrean

Mogłbyś trochę więcej napisać, np o tym, jak działa ten wklejony skrypt. Aczkolwiek plusik poleciał, bo pewnie się wielu osobom przyda! :D


cześć

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Dave

Nie rozumiem pytania. Wyraźnie widać jak działa na zamieszczonych obrazkach. Jest to po prostu stworzony przykładowy interfejs który może być zastosowany do wielu aplikacji takich jak różnego rodzaju aplikacje (np. boty pod ts'a)

 

A jeśli chodzi ci o wytłumaczenie kodu to nie będę tłumaczył każdej instrukcji bash-owej bo to zdaje się być raczej zbędne. Jeśli nie jest ktoś w stanie przetłumaczyć sobie angielskich komentarzy to raczej nie jest na takim poziomie zaawansowania, aby podjąć się pisania takich interfejsów.

Edytowane przez Dave

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
GryTrean

Oczywiście, że nie trzeba tłumaczyć każdej linii, ale to tylko moja taka uwaga, bo na pierwszy rzut oka może to kogoś przerazić XD


cześć

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Dave

To jest raczej poradnik dla osób, które piszą programy na poziomie OOP, tak więc wątpię aby ich to przeraziło.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Gokuś

Fajny patent, jak będę kończył swojego bota to na pewno skorzystam z tej opcji do uruchamiania/zatrzymywania/restartowania bota.

Dzięki! ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Venden!

Na pewno się przyda! Leci +

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.


  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.


×

Powiadomienie o plikach cookie