Menü im Bashscript

Chris

Chris

Eroberer
Hi,

bin was die Shellprogramierung an geht ein noob, naja eine leere Datei mit einem Befehl pro Zeile bekomme ich hin.

Hab so auch ein kleines Backupscript für ein paar spezifischen files geschrieben.

Code:
#!/bin/bash

NAME=$(uname -n)_$(date '+%Y%m%d%H')_config.tar.gz
echo see if we already have a $NAME
if [ -e /var/files/$ZNAME ];
then
	echo "File exists I will remove it first .. Please wait"
	sleep 5
 	rm /var/files/$NAME 2> /dev/null
	echo saving in /var/files/$NAME
else
	echo saving in /var/files/$NAME
fi
tar Pczf /var/files/$NAME \
/etc/network/interfaces \
/etc/*.cfg \
/etc/*.config \
/etc/*.log 

echo "Sicherung wurde durchgeführt"

exit 0

Jetzt möchte ich gern ein kleines Menü darum gestallten,
so in etwa "Press A for Network config, Press B for Logfiles" usw.

Für die ksh hab ich sowas gefunden:

Code:
\t A -- \t Save configurator files
\t B -- \t Save all configuration files
\t C -- \t Save all in the * directory
\t D -- \t Save all in the /etc directory
\t E -- \t Run console
\t Q -- \t QUIT (Leave this menu program)
\t Please type a letter (from the above choices)
\t then press the RETURN key \c"

aber für Bash klappt dat nicht.
Wer kann mir dabei helfen oder mit einen Link geben wo ich so etwas nach lesen kann?
 
@ Xanti immer musst du schneller sein.
Ich empfehle dir den cdialog für nichtgrafisch und den Xdialog für grafisch.
--------------------------------------------------------
#! /bin/sh
dialog --menu "Bitte wählen" 0 0 0 \
"1" "Sichern" \
"2" "Beenden" 2> müll

wahl=$(cat müll)
if ...
elif ...
elif ...
...
fi
...
----------------------------------------------

Ich hoffe das stimmt so.
 
root1992 schrieb:
...

#! /bin/sh
dialog --menu "Bitte wählen" 0 0 0 \
"1" "Sichern" \
"2" "Beenden" 2> müll

wahl=$(cat müll)
if ...
elif ...
elif ...
...
fi
...
----------------------------------------------

Ich hoffe das stimmt so.

Warum den Umweg über müll? wahl=$(dialog ...) sollte eigentlich auch gehen.

Gruss, Xanti
 
Ich bin umständlich :)
Aber stimmt schon was du sagst.
 
Hast recht, funktioniert wirklich nicht. Dann muss man wohl doch den Umweg über die Datei gehen.
 
Ah auch gut.
Aber im Moment schreibe ich keine Shs, bin aufm (C++ && ncurses.h) Trip :)
Und ich mache so etwas ähnliches wie den dialog, bloß das inputmenu, will ich mit ncurses machen, mit configdatei, ...
 
Hallo,

dialog ist ein eigenes Paket, so weit ich weiß aktuell in der Version 1.0.


Viele Grüße
 
Das ist nicht gut, gibt es noch andere Möglichkeiten als mit dialog, kennt jmd das Paket whiptail (0.51.6-20 Displays user-friendly dialog boxes from shell scripts)?
Welche befehle gibt es dafür?

Ok statt den Befehl "dialog" ist er "whiptail", ist aber eher wie xdialog,
hat auch ähnliche Optionen.
 
Zuletzt bearbeitet:
Ok statt den Befehl "dialog" ist er "whiptail", ist aber eher wie xdialog,
du kannst bei Scripts, die "dialog" benutzen einfach aus "dialog" "xdialog" machen, sofern X als Solches vorhanden und benutzbar ist.
 
Ok so weit bin ich gekommen:
Code:
#!/bin/sh

whiptail --title "Save_Config" \
        --menu "Hi, this is a menu box. You can use this to\n\
save the configuration\n\
Choose the one of them:" 24 51 6\
        "Save"  "Saving the configuration" \
        "Beende"  "Beende das Menue" 2> /tmp/menu.tmp.$$

retval=$?
choice=`cat /tmp/menu.tmp.$$`
rm -f /tmp/menu.tmp.$$

Vielleicht kann mir noch jmd einen Anstoss geben,
wie ich jetzt die Auswahlmöglichkeiten durch führen lasse, mit einer Funktion?
 
Code:
#!/bin/sh

# Funktion
function savequestion()
{
   read $saveend
   if [ '$saveend' = 'save'] ; then
      choice=`cat /tmp/menu.tmp.$$`
   else
      rm -f /tmp/menu.tmp.$$
   fi
}


whiptail --title "Save_Config" \
        --menu "Hi, this is a menu box. You can use this to\n\
save the configuration\n\
Choose the one of them:" 24 51 6\
        "Save"  "Saving the configuration" \
        "Beende"  "Beende das Menue"             #2> /tmp/menu.tmp.$$

savequestion

Wie du ja weisst muss die Funktion über dem Aufruf sein damit sie schon "eingelesen" ist. Wurde nicht getestet und kann auch Tippfehler haben!

.::Link::.
Brauch ich sehr oft um Syntax nachzuschlagen
http://linuxseiten.kg-it.de/index.php
 
Zuletzt bearbeitet:
So hab jetzt mal eine Version fertig, es gibt zwar keine Fehler mehr aus, aber die Sicherung wird auch nicht durchgeführt.

Code:
#!/bin/sh

NAME=$(uname -n)_$(date '+%Y%m%d%H')_config.tar.gz

archive() {
        read $saveend
        if [ '$saveend' = 'save'] ; then
        echo "see if we already have a $NAME"
                if [ -e /var/files/$ZNAME ];
                then
                    echo "File exists I will remove it first .. Please wait"
                    rm /var/files/$NAME 2> /dev/null
        echo "saving in /var/files/$NAME"
        fi
        tar Pczf /var/files/$NAME \
        /etc/network/interfaces \
        /etc/*.cfg \
        /etc/*.config \
        /etc/*.log

        echo "Sicherung wurde durchgeführt"
fi
}

whiptail --title "Save_Config" \
        --menu "Hi, this is a menu box. You can use this to\n\
save the configuration\n\
Choose the one of them:" 10 70 4\
        "save"  "Saving the configuration" \
        "Beenden"  "Beende das Menue" 2> /tmp/menu.tmp.$$

choice=`cat /tmp/menu.tmp.$$`
rm -f /tmp/menu.tmp.$$
case choice="save" in
 start)
        $saveend
        echo "Sicherung wurde durchgeführt"
        ;;
*)
esac
exit 0

Wo liegt der Fehler, wer weiß es, wer weiß es?
 
Code:
...
case choice="save" in
 start)
        [B]$saveend[/B]
        echo "Sicherung wurde durchgeführt"
        ;;
*)
esac
exit 0

Sollte da nicht archive statt $saveend stehen?

Gruss, Xanti
 
Zuletzt bearbeitet:
Xanti schrieb:
Code:
...
case choice="save" in
 start)
        [B]$saveend[/B]
        echo "Sicherung wurde durchgeführt"
        ;;
*)
esac
exit 0

Sollte da nicht archive statt $saveend stehen?

Gruss, Xanti

Ja stimmt, aber ist weiterhin unverändert, keine Sicherung.
 

Ähnliche Themen

Nginx als Reverse Proxy für Nextcloud und Emby

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

HandbrakeCLI Shell Skript

Port generieren, wenn nicht dann

Zugriff auf Samba Fileserver Freigaben verweigert(Samba 4 Active Directory Domäne)

Zurück
Oben