shellscript soll nur beendet werden wenn passwortabfrage erfolgt

tuxlover

tuxlover

Der den Tux knuddelt
hallo liebe leute,

ich schreibe zur zeit an einem script, dass einige user und computerspezifische daten an der konsole ausgibt, und nur beendet werden soll, wenn das passwort eingeben wurde und bestätigt wurde, sozusagen ein bildschirmschoner für die konsole.

soweit habe ich das schon fertig
Code:
#lockit
#Script that locks the current running Terminal
#and shows various system information

#Comes with the package Bash-Tools
#Ideas Collected by Mendel Cooper (Advanced Bash Scripting guide)
#written for opensue 10.2 by Matthias Propst

TIME=$(date +%c)
CPU_NAME=$(cpufreq-info -dm)
CPU_FREQ=$(cpufreq-info -fm)
LINUX_VER=$(uname -r)
SYS_UPTIME=$(uptime)
USER=$(whoami) #You should Enter more 

until false
do
clear
echo $TIME
echo "linux-$LINUX_VER seid $SYS_UPTIME"
echo "\"$CPU_NAME\" läuft derzeit mit $CPU_FREQ"
read -t 15
clear
df -h
echo "=========================================================================="
free -m
read -t 15
clear
echo "Für $USER laufen momentan:"
ps -A u | grep $USER
read -t 15
done

exit 0
nur wie man das mit dem passwort nacht weiß ich leider nicht. google hat leider auch keine ergebnisse geliefert.

vielen dank für eure hilfe.
 
Geht es darum, dass das Benutzerpasswort eingegeben werden soll, oder reicht es, wenn man einfach irgendein Passwort eingeben muss?
Letzteres ist ja relativ einfach zu realisieren.

Code:
#lockit
#Script that locks the current running Terminal
#and shows various system information

#Comes with the package Bash-Tools
#Ideas Collected by Mendel Cooper (Advanced Bash Scripting guide)
#written for opensue 10.2 by Matthias Propst

foo () {
	echo "Der Bildschirm ist gesperrt"
}

checkpwd() {
	read -st 15 INPUT
	if [ $INPUT = $PASSWD ]
	then
		echo "Der Bildschirm ist jetzt entsperrt, sie können weiterarbeiten"
		exit 0
	fi
}

trap foo SIGINT

TIME=$(date +%c)
CPU_NAME=$(cpufreq-info -dm)
CPU_FREQ=$(cpufreq-info -fm)
LINUX_VER=$(uname -r)
SYS_UPTIME=$(uptime)
USER=$(whoami) #You should Enter more
PASSWD="secret"

until false
do
clear
echo $TIME
echo "linux-$LINUX_VER seid $SYS_UPTIME"
echo "\"$CPU_NAME\" läuft derzeit mit $CPU_FREQ"

checkpwd

clear
df -h
echo "=========================================================================="
free -m

checkpwd

clear
echo "Für $USER laufen momentan:"
ps -A u | grep $USER

checkpwd

done

exit 0
 
danke das hiflt mir erstmal ein bisschen weiter. hmm einiges verstehe ich noch nicht so und muss mir das erstmal genauer angucken.

die konsole soll schon durch das benutzerkennwort gesperrt und wieder aufgehoben werden.
 
so habs jetzt soweit geschafft, dass das script beim druck der taste q nach einem passwort fragt und dann beendet wird. dummerweise kann man es immernoch mit strg+c ohne eingabe eines passworts beenden.das ist ziemlich sinnfrei.

hat einer vlt. ein hinweis für mich, wie man das script so schreiben kann, dass es eben nicht bei der eingabe von strg+c beendet wird sondern nur wenn man q drückt.

@Mµ*e^13.5_?¿ danke dein script hat mir ein bisschen geholfen. ich habs jetzt über den su befehl gelöst.

vielen dank
 
hat einer vlt. ein hinweis für mich, wie man das script so schreiben kann, dass es eben nicht bei der eingabe von strg+c beendet wird sondern nur wenn man q drückt.
Ich dachte du hättest dir mein Script angesehen.
Anscheinend nicht aufmerksam genug ;)
 
o.k habs jetzt ein bisschen geändert. das ganze sieht jetzt so aus:
Code:
#!/bin/bash

TIME=$(date +%c)
CPU_NAME=$(cpufreq-info -dm)
CPU_FREQ=$(cpufreq-info -fm)
LINUX_VER=$(uname -r)
SYS_UPTIME=$(uptime)
USER=$(whoami) #You should Enter more variables if you need more system information to be displayed
KEY_BREAK="false"


catch_out ()
{
echo "The Screen is locked by \"$USER\"" #this routine should be catch the strg+c
echo "You can return to your shell by pressing the \[q\] key."
}

trap catch_out SIGINT

locked ()
{
clear
echo $TIME
echo "linux-$LINUX_VER scince $SYS_UPTIME"
echo "\"$CPU_NAME\" running with $CPU_FREQ"
sleep 15
clear
df -h
echo "=========================================================================="
free - m
sleep 15
clear
echo "Current running processes for \"$USER\":"
ps -A u | grep $USER | tail #processes which are called by this script should not be displayed
#the user should be informed about further running processes. somthing like that: echo und weitere nn prozesse
#where nn is a variable that holds the amount of running prozesses. maybe a counter will do the job?
sleep 15
}

while [ $KEY_BREAK = "false" ]
do
read -t 1 -n 1 -s KEY_BREAK
${KEY_BREAK:="false"} 2> /dev/null

case $KEY_BREAK in
[q]) su $USER && break || locked ;;
*) locked ;;
esac
done

exit 0

leider bewirkt der trap befehl hier nur; dass die funktion catch_out ausgeführt wird und dann beendet sich das script trotzdem. hast du vlt. ne idee wo ich idee wo ich mich über den trap befehl informieren könnte ausser das abs und die bash manpage?
 
Zuletzt bearbeitet:

Ähnliche Themen

script sshpass

Queue für copy Script

Shellskript - Fehler in Cron

Windows clients können nicht mehr auf lange laufendes System zugreifen

NagiosGrapher 1.7.1 funktioniert nicht

Zurück
Oben