PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Signatur Script



marz
29-11-2004, 20:37
tach!
ich habe mir ein dokument mit Singnaturen für meinen Mailaccount angelegt. Nun wollte ich per Shell Skript der datei .singnatur (Signaturdatei für elmo) immer zufällig eine Zeile übergeben.
Wie stelle ich das am dümmsten an? Ich weiß nicht wie man eine zufallszahl zw. 1 und x bekommt und wie man diese zeile dan rausnehmen soll (vieleicht mit cat ... ?).

Thx

Marz

michael.sprick
29-11-2004, 21:06
Ich weiß auch gerade nicht, wie man mit einer pure bsah Lösung an eine Zufallszahl kommt... aber evtl. ist folgendes ein Workaround:



#!/bin/bash

Zufallszahl=`perl -e "print int rand(10)"`;
Zeile=0
cat signaturen.txt | while read line; do
if [ "$Zeile" -eq "$Zufallszahl" ]; then
echo "$line"
fi
Zeile=`expr "$Zeile" + 1`
done


in der Zeile Zufallszahl=`....` musst Du die 10 dann halt tauschen gegen die Anzahl der Zeilen in Deiner Signaturen Datei...

geht aber sicher eleganter ;)

peschmae
29-11-2004, 21:29
echo $RANDOM liefert ne Zufallszahl (afair zwischen 0 und 32767 oder so) - die könntest du dann mit bc oder expr bearbeiten.
Für Zehn Zeilen sowas:
expr $RANDOM % 10

MfG Peschmä

P.S. bevorzugt zwar leicht die Zahlen 0 - 7 bzw. benachteiligt 8 und 9, aber ich glaub das kannst du vernachlässigen ;)

tictactux
30-11-2004, 03:52
Hi,

da schon ein leicht perliger Lösungsansatz genannt wurde,
hier ein kleiner (IMHO pfiffiger) Signaturgenerator (Quellangabe im Code)
der ursprünglich auf den 'Zufallsgenerator' fortune aufsetzt,
aber einfach (s. Markierung) erweiterbar ist (in Perl wie durch externen
Skriptaufruf).
Benutzung: Skript als Hintergrundprozeß starten.
Es erstellt im Home-Verzeichnis den FIFO .signature, der nach jedem
Auslesen aktualisiert wird.


#!/usr/bin/perl -w
# based on Tom Christiansen's FMTYEWTK example

chdir; # go home
$FIFO = '.signature';
$ENV{PATH} .= ":/etc:/usr/games";
while (1) {
unless (-p $FIFO) {
unlink $FIFO;
system('mknod', $FIFO, 'p')
&& die "can't mknod $FIFO: $!";
}
# next line blocks until there's a reader
open (FIFO, "> $FIFO") || die "can't write $FIFO: $!";
print FIFO "Mickey Mouse <mouse@work.edu>\n", # fester Adressteil
`fortune -s -m Disney`; # <-eigener externer Befehl
close FIFO;
sleep 2; # to avoid Sig duplicates
}

Hoffe, dies paßt noch zum Thema,
Schönen Gruß,
Wolfgang