bash scripting - Ausgabe Problem
Verfasst: Montag 17. Oktober 2005, 07:23
Hallo,
tut mir leid, ziemlich off-topic, aber ich frage lieber hier nach, als sonst wo
Also, es handelt sich um folgendes: Z. Zt. schreibe ich einen Haufen kleinerer Shellskripte (bash, leider kein Python) und das klappt auch erstaunlich gut, wenn man mal von dieser völlig kruden Syntax absieht.
U. A. gibt es da dieses Hilfsskript, das eigentlich nur winzige Funktionalität für ein anderes Skript zur Verfügung stellt:
Nicht schön, aber ...
Nun ja, es sollte so etwas ausgeben (leider sieht es auch in code tags nicht so schön aus, aber ich hoffe, man kann erkennen worum es geht):
stattdessen erhalte ich:
Warum? Wie kann ich das lösen?
Und (leider geht das "*"*5 = "*****" mit der Shell ja nicht) wie kann ich diese Zeile (printf "%s%s%s%s%s %-50s %s%s%s%s%s\n" ....) etwas eleganter schreiben?
Hat jemand eine Idee? Es geht mir ja eher insgesamt ums Formatieren, als um dieses blöde Beispiel.
Vielen Dank,
Christian
edit: zweimal editiert (zusätzliche Code Tags eingeführt, um das Stripping der Leerstellen zu verhindern)
tut mir leid, ziemlich off-topic, aber ich frage lieber hier nach, als sonst wo

Also, es handelt sich um folgendes: Z. Zt. schreibe ich einen Haufen kleinerer Shellskripte (bash, leider kein Python) und das klappt auch erstaunlich gut, wenn man mal von dieser völlig kruden Syntax absieht.
U. A. gibt es da dieses Hilfsskript, das eigentlich nur winzige Funktionalität für ein anderes Skript zur Verfügung stellt:
Code: Alles auswählen
#! /bin/bash
#define a help message:
function usage()
{
echo "linblock will print a given message surrounded by a box on"
echo "the screen. The default box is made up by '='. Using the"
echo "option '-s' plus a string it is possible to change this"
echo "default separator."
echo ""
echo "invoke like:"
echo "linblock [-s] <message>"
}
separator="=" #defining default separator
declare -ri width=60 #define default line width
while getopts ":s:" opt; do
case $opt in
s ) separator=$OPTARG;;
\? ) usage ; exit 1
esac
done
shift $(($OPTIND - 1))
#check whether a proper message was passed
if [ -z "$@" ]; then
usage
exit 1
fi
function extend_separator()
{
local lwidth=${width}
while [ $((lwidth--)) -ge 0 ]; do
echo -n "${separator}"
done
echo "${separator}"
}
#start actual printing functionality
extend_separator
printf "%s%s%s%s%s %-50s %s%s%s%s%s\n" ${separator} ${separator} ${separator} ${separator} ${separator} ${1} ${separator} ${separator} ${separator} ${separator} ${separator}
extend_separator
exit 0
Nun ja, es sollte so etwas ausgeben (leider sieht es auch in code tags nicht so schön aus, aber ich hoffe, man kann erkennen worum es geht):
Code: Alles auswählen
./skript "wichtige Nachricht"
==========================================
===== wichtige Nachricht =====
==========================================
Code: Alles auswählen
./skript
==========================================
===== wichtige Nachricht=====
==========================================
Und (leider geht das "*"*5 = "*****" mit der Shell ja nicht) wie kann ich diese Zeile (printf "%s%s%s%s%s %-50s %s%s%s%s%s\n" ....) etwas eleganter schreiben?
Hat jemand eine Idee? Es geht mir ja eher insgesamt ums Formatieren, als um dieses blöde Beispiel.
Vielen Dank,
Christian
edit: zweimal editiert (zusätzliche Code Tags eingeführt, um das Stripping der Leerstellen zu verhindern)