Hi, alle zusammen!
In Vorbereitung meiner Prüfung hab' ich mich in den letzten Tagen auf
vielfaches Anraten einzelner Personen (*pfiffel*) mal etwas intensiver
mit der Shell-Programmierung beschäftigt.
Was dabei rausgekommen ist, seht Ihr beigefügt ('laufschrift')...
Eines vorneweg: Das Teil erhebt weder den Anspruch besonders schön, noch
fehlerfrei und vollständig zu sein - dafür dürft Ihr es beliebig
verwenden und/oder verbessern/modifizieren; wozu auch immer! ;-)
Sollte jemand eine ernsthafte Anwendung dafür finden, stehe ich für den
Spendenempfang natürlich jederzeit unbürokratisch zur Verfügung...
Das Script lässt einen als Parameter übergebenen Text über die Mitte des
aktuellen Terminalfensters scrollen. Das funktioniert im Prinzip alles
so, wie ich mir das vorgestellt hab' (keine Ahnung, wozu man sowas in
der Praxis braucht! *feix*).
ABER: Eines habe ich nicht hinbekommen und muss VOR dem 1. Start in
jedem neuen Terminalfenster einmalig manuell durchgeführt werden:
export COLUMNS LINES
Das sorgt dafür, dass die BASH die Variablen für Fensterhöhe und -breite
übermittelt bekommt. Wurde der Befehl einmal eingegeben, kann das
Fenster vor jedem Neustart des Scripts beliebig in der Größe verändert
werden - der Text wird immer in der Mitte erscheinen!!!
Und nun warte ich auf jemanden von Euch, der mir sagt, wie ich das auch
noch automatisieren kann...! Ich hab's mit unzähligen Versuchen und
Googlen NICHT hinbekommen... *schnief*
Trotzdem viel Spaß beim "rumspielen". Das Script ist hinreichend
kommentiert und sollte von daher keine Fragen aufwerfen.
CU Stefan
#!/bin/bash
#
# laufschrift v1.0
#
# Script, das einen einzugebenden Text in der gewünschten Richtung und Geschwindigkeit in der Mitte des
# Terminalfensters vorbeiscrollt
#
# geschrieben von Stefan Schmitt am 11.03.2007
#
# ...und hiermit feierlich unter die GPL gestellt! ;-)
#
#
leerzeilen () # Funktion "n Leerzeilen ausgeben"
{
for i in `seq 1 $1`; do echo; done
}
zeige_hilfe () { # Funktion "Hilfe-Seite anzeigen"
clear
echo
echo "Benutzung des Scripts 'laufschrift':"
echo "===================================="
echo
echo "laufschrift {Anzahl der Durchläufe} {Geschwindigkeit} {Richtung} {anzuzeigender Text}"
leerzeilen 2
echo "Dabei gilt:"
echo "-----------"
echo "{Anzahl der Durchläufe} : Zahl zwischen 1 und 5"
echo "{Geschwindigkeit} : Zahl zwischen 1 (langsam) und 5 (schnell)"
echo "{Richtung} : l = Text scrollt von links nach rechts"
echo " r = Text scrollt von rechts nach links"
echo "{anzuzeigender Text} : Text, der in der Bildschirmmitte durchläuft"
leerzeilen 5
exit 1
}
if [ $# -lt 4 ]; then zeige_hilfe; fi # Abfrage, ob Anzahl Start-Parameter richtig
if [ $1 -lt 1 ]; then zeige_hilfe; fi # Tests, ob {Anzahl} in erlaubtem Rahmen
if [ $1 -gt 5 ]; then zeige_hilfe; fi
case $2 in # Scrollgeschwindigkeit festlegen
1) pause=0.12;;
2) pause=0.09;;
3) pause=0.06;;
4) pause=0.03;;
5) pause=0;;
*) zeige_hilfe;;
esac
case $3 in # Scrollrichtung festlegen
l|L) richtung=l;;
r|R) richtung=r;;
*) zeige_hilfe;;
esac
clear
anzahl=$1 # Aufruf-Parameter auslesen und setzen
shift;shift;shift # Anzahl/Tempo/Richtung überspringen => Zeilenrest ist Text!
text=$* # Scrolltext ermitteln
textlaenge=${#text} # Textlänge ermitteln
breite=$COLUMNS # Terminalbreite ermitteln
hoehe=$LINES # Terminalhöhe ermitteln
zeilen=`expr $hoehe / 2` # vertikale Bildschirmmitte ermitteln
leerzeilen `expr $zeilen - 1` # zur vertikalen Bildschirmmitte springen
versatz=`expr $breite - $textlaenge - 1` # Anzahl Füllzeichen pro Zeile ermitteln
for i in `seq 1 $anzahl`; # Schleife für 'Anzahl' Durchläufe
do
case $richtung in
l) for j in `seq 1 $versatz`; # Schleife für Bildschirmbreite
do
for k in `seq 1 $j`;do echo -n " ";done # Schleife zur Textausgabe l -> r
echo -n $text
sleep $pause
echo -ne \\r;
done;;
r) for j in `seq $versatz -1 1`; # Schleife für Bildschirmbreite
do
for k in `seq 1 $j`;do echo -n " ";done # Schleife zur Textausgabe r -> l
echo -n $text
rest=`expr $breite - $j - $textlaenge - 1`
for k in `seq 0 $rest`;do echo -n " ";done
sleep $pause
echo -ne \\r;
done;;
esac
done
leerzeilen `expr $zeilen - 2`
exit 0