"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Kleine Shellscript-Fun[d]grube

COLOSSUS 23.12.2005 - 17:40 9395 47 Thread rating
Posts

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Hallo zusammen! :)

Da ich immer wieder gerne ein paar laestige Aufgaben automatisiere, meist mithilfe der bash, hab ich mir gedacht, ich koennte hier eine kleine (Shell-)Scriptsammlung an den Start bringen - wobei jeder herzlich dazu eingeladen ist, selbst etwas beizutragen. Sprachlich soll alles, was interpretiert ist, und auf UNIXoiden Systemen laeuft, erlaubt sein. Eventuell bekannte Bugs bitte im Code der Skripte vermerken.



usechk (01-06-2006)

Fuer Gentoo-User ein (eigentlich auch als Oneliner abhandelbares, aber trotzdem ;)) kleines Skript, um zu ueberpruefen, ob in der /etc/make.conf nicht vielleicht Bogus-USE-Flags gesetzt wurden, die gar nicht im aktiven Profile vorhanden sind.

Zum Download gibt es das Script hier:
http://johannes.truschnigg.info/code/usecheck.sh.asc
http://johannes.truschnigg.info/code/usecheck.sh


getlinks (01-31-2006)

Wer seinen Browser gerne frei von unnoetigen Plugins haelt, die ungefragt Videos, Sounds und anderen Schnickschnack abspielen, kennt das Problem mit Seiten, die online multimedialen Content anbieten, wie z. B. http://www.putfile.com. Moechte man naemlich trotzdem an ein Video kommen, das in den Untiefen der Page durch einen Link oder gar einen <embed>-Tag verborgen liegt, gilt es, haendisch durch den Quelltext der Seite zu suchen. Deshalb habe ich ein Script begonnen, das diesen muehseligen Vorgang so gut wie moeglich automatisiert. Bis jetzt ist es noch nicht sonderlich einfallsreich, und scheitert sicher an einigen besonders kruden URLs, aber es duerfte sich dennoch schon jetzt als brauchbar erweisen.

Zum Download gibt es das Script hier:
http://gnulords.org/~colo/src/getlinks.sh.asc
http://gnulords.org/~colo/src/getlinks.sh



countprocs (08-06-2007)

Im Zuge der Realisierung einer Monitoring-Aufgabe (zwecks Debugging von mod_fcgid) eines Apache2-Webservers mit suEXEC musste ich eine Moeglichkeit finden, festzustellen, wie viele Prozesse eines Namens X welche UID gerade in der run queue hat. `countprocs.sh` erledigt das; erforderlicher Parameter ist ein regulaerer Ausdruck, der den fraglichen Programmnamen matcht.

Zum Download gibt es das Script hier:
http://johannes.truschnigg.info/code/countprocs.sh.asc
http://johannes.truschnigg.info/code/countprocs.sh

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Man merkt gleich, dass es einen haufen leute gibt, die sich auch mit dem thema befassen. Ich hab begonnen ein e-book über shellscripting zu lesen, kenn mich allerdings noch nüsse aus. Aber mal ein skript, bei dem ich halbwegs weis was es tun soll zu lesen ist doch recht angenehm.

Gute idee, vllt werd ich auch bald was beitragen können

issue

Rock and Stone, brother!
Avatar
Registered: Feb 2003
Location: Linz
Posts: 3644
so, hier mal mein erstes selbergemachtes script...
dient zum abspielen von .netdemo files direkt per GUI
leider pack ichs bisweilen nur, dass es mit 1 mod funzt, im script steht q4max drinnen

http://mitglied.lycos.de/frog1/etc/q4/demo.sh

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von COLOSSUS
Den Anfang macht meine neueste Kreation, "xextract". Gedacht als eine Art generisches CLI-frontend fuer Entpacker versteht es sich zur Zeit auf die Formate .tar, .gz, .bz2, .rar und .zip.

Ah, also sowas wie "unp" (emerge app-arch/unp), nur dass letzeres
tar[.gz,.bz2], gz, bz2, Z, ar/deb, rpm, shar, rar, arj, zip, LHa, cab, ace, tnef, uu (mail, news), mime, hqx, sea, zoo, pmd, cpio, afio und lzop unterstützt. :)

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Ja, nur dass unp iirc ein Perl-Script ist.

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Ich hab ein problem mit einem shellscript das ich geschrieben hab, vorerst will ich noch anmerken, dass ich ein skriptkiddie bin und das ding bei weitem nicht so funktioniert wie es sollte.

Das ding soll meinen printserver in der schule zuverlässig außerhalb des unterrichts abdrehen, tuts aber nicht

Zitat
#! /bin/bash
if date | grep Mo >> /dev/null
then
HOUR=14
MIN=55
elif date | grep Di >> /dev/null
then
HOUR=15
MIN=55
elif date | grep Mi >> /dev/null
then
HOUR=13
MIN=15
elif date | grep Do >> /dev/null
then
HOUR=16
MIN=35
elif date | grep Fr >> /dev/null
then
HOUR=13
MIN=15
elif date | grep Sa >> /dev/null
then
shutdown -hf now -t 300 &
elif date | grep So >> /dev/null
then
shutdown -hf now -t 300 &
fi
RHOUR=`date +%H` # REAL HOUR & REAL MIN
RMIN=`date +%M`
if ( $HOUR >= $RHOUR || ( $HOUR == $RHOUR && $MIN >= $RMIN )) || ( $RHOUR <= 7 || ( $RHOUR == 7 && $RMIN <= 40 )) #irgendas an der zeile passt nicht
then
shutdown -hf now -t 300 &
else
shutdown -hf $HOUR:$MIN &
fi

Wenn ich das ding ausführe will er sich innerhalb von 5 min abdrehen, deswegen nehm ich an, dass die zeile mit dem vergleich der zeiten irgendwie nicht passt, beim ausführen gibt er auch paar fehlermeldungen aus ich hab echt 0 ahnung was ich da machen soll.

Ich bin für alle anregungen dankbar tia

that

Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von Marcellus
beim ausführen gibt er auch paar fehlermeldungen aus ich hab echt 0 ahnung was ich da machen soll.

Ich bin für alle anregungen dankbar tia

Hier kommt die ultimative Anleitung "Was tun, wenn ein von mir geschriebenes Programm/Script nicht funktioniert":

1. Fehlermeldungen verstehen
2. Fehler finden
3. Fehler beheben

:)

OK, mehr Details:

1.1. Fehlermeldungen in der Hilfe oder im Internet finden
1.2. Erklärungen lesen
1.3. Erklärungen verstehen

2.1. Script zum Test vorbereiten, z.B. "echo " vor "shutdown" schreiben und ausprobieren, was ausgeführt werden würde
2.2. Fehler eingrenzen: Zeilen löschen und das Script so klein wie möglich machen, so dass der Fehler noch auftritt
2.3. Situation vereinfachen und zum Test Variablen auf bestimmte Werte setzen

3.1. "Fehler beheben" ist jetzt das Leichteste an der ganzen Übung. :)

TitusTheFox

The Oilman
Avatar
Registered: Aug 2004
Location: Oiltown
Posts: 1256
hi !

Für alle die mit Debian (Ubuntu) über PPPoE im Netz sind hab ich ein kleines scribt , nach dem man mit pppoeconf den netzzugang eingestellt hat das ganze automatisch beim start funktioniert.(Es gibt da nähmlich ein kleines Problem mit dem pppoeconf Paket).

1.mit pppoeconf alles eingestellt , das Paket pppoe muss auch installiert sein.

2. Kleines Scribt mit dem namen pppoestart.sh oder auch xxxxx.sh im Ordner /etc/init.d mit dem folgendem inhalt erstellen:

Zitat
#! /bin/sh
echo "Starte pppoe!";
/usr/sbin/pppoe -T20 -Ieth0 -A ;
/usr/bin/pon dsl-provider|| echo "No AC-Point found try again";
echo "All done!"



3. Berechtigungen mit dem Befehl chmod 755 pppoestart.sh setzen

4. symbolischen link mit ln /etc/init.d /etc/rc2.d/S21pppoestart erstellen

und fertig !

madp

Big d00d
Registered: Mar 2005
Location: vienna
Posts: 161
Hallo

folgendes Skript verwende ich zum sichern meiner Gnucash-Daten (alle Files in ~/Documents/gnucash/gnucash accounts) auf einen Memory Stick.

Das erstellte Backup File hat das Format DDMMMYYYY.tar.gz, bzw. wenn am gleichen Tag schon mal gesichert wurde dann DDMMMYYYY_hhmmss.tar.gz. So bleiben auch vorherige Backups am USB Stick erhalten.

Das Skript könnt man noch verbessern indem das Ziel-Verzeichniss gleich zu Beginn als Variable definiert wird. Im Moment muss es an drei verschiedenen Stellen verändert werden, wenn man das Skript umschreiben will um woanders hinzusichern.



Code: PHP
#!/bin/bash

if [ ! -d "/Volumes/NO NAME/gnucash/" ]; then
	echo "memory stick not mounted, can't backup"
	exit
fi

datestring="`date +%d%b%Y`"
backupfile="/Volumes/NO NAME/gnucash/""$datestring"".tar.gz"

if [ -a "$backupfile" ]; then
	datestring="`date +%d%b%Y_%H%M%S`"
	backupfile="/Volumes/NO NAME/gnucash/""$datestring"".tar.gz"
fi

cd ~

tar zcvf "$backupfile" "Documents/gnucash/gnucash accounts"

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Kleines Update.

adebar

Big d00d
Avatar
Registered: Dec 2001
Location: Kopf.
Posts: 275
Hallo!

Erst mal [*****] von mir für diesen Thread!

Ich benutze Linux erst recht kurz. Habe aber zur Übung ein kleines Skript gebastelt. Es ist nicht gerade die Killer-Application schlechthin, aber vielleicht gibt's ja noch jemanden, der's ganz nützlich findet. :D


wiki (2006-03-04)

wiki macht nichts anderes, als einen eingegebenen Begriff in der Wikipedia nachzuschlagen.

Syntax:
Code:
wiki [-en] [BEGRIFF]

Mit der Option "-en" kann angegeben werden, dass der Begriff auf en.wikipedia.org nachgeschlagen wird.

Code:
Code: PHP
#!/bin/bash

# wiki.sh - Opens firefox and looks up a given term on "de.wikipedia.org" or "en.wikipedia.org"
# Licensed under the terms of the GNU GPLv2 or later

# TODO:
# Multiple Browser- / Wikipedia-Languages-Support

# AUTHOR: Markus Schanta ( [email]schanm@gmx.at[/email] )

if [ $# == 0 ]
then
  firefox [url]http://de.wikipedia.org[/url]
  echo "Starte Wikipedia..."
else
  if [ $1 == -en ]
  then
    firefox "http://en.wikipedia.org/wiki/Special:Search?search=$2&go=Go"
    echo "Starte en.wikipedia.org und suche $2..."
  else
    firefox "http://de.wikipedia.org/wiki/Spezial:Search?search=$1&go=Artikel"
    echo "Starte de.wikipedia.org und suche $1..."
  fi
fi

Downlaod: wiki.txt

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Ich lass nur sehr ungern den Miesepeter raushängen, allerdings wollt ich nur anmerken:

Colo: bezüglich getlinks, falls du firefox verwendest kannst du dir die sachen leichter raussuchen, indem du dir die paginfo anschaust bzw mit einer extension names unplug geht das ganze noch bequemer

Adebar: firefox yubnub search bar

aber ich will ja nicht nur herumstänkern, ich hab ein problem mit einem noch nicht script, das einmal meine mp3s sortieren soll. Ich will die mp3s nach den mp3tags benennen, problem dabei ist folgendes:

mp3tag $(ls -b | grep mp3)

funktioniert nicht, wenn das mp3 ein Leerzeichen im Namen hat. Ich hab keine ahnung wieso, wenn ich mp3tag irgendwas[tab][tab] drück kommt zumindest rein optisch die selbe Zeichenfolge raus. mp3tag scheint mehrere parameter als eingang zu bekommen. Googlen hat mir auch nix gebracht. man ls sagt gerade mal, dass durch -b statt " " "\ " ausgegeben wird. Bringt mir sexuell aber auch nix.

Ich hab vor allem die schreibweise mit deim einsetzen einer variable als parameter nicht wirklich oft gefunden, gibts vllt einen saubereren weg? Ich hab probiert die ausgabe auf mp3tag zu pipen, das ding wollte allerdings nicht.

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Zitat von Marcellus
Colo: bezüglich getlinks, falls du firefox verwendest kannst du dir die sachen leichter raussuchen, indem du dir die paginfo anschaust bzw mit einer extension names unplug geht das ganze noch bequemer

Mag sein, aber diese Firefox-Sache braucht X11+GTK+anderen Pipapo, laesst sich nicht an andere Programme pipen (wget's calling! ;)), und frisst keine RegExps. Trotzdem ist `getlinks` natuerlich keine groesze Sache. Ich hab's mir eigentlich als Batchdownloader von interessantem Zeug zusammengehackt.

Zitat von Marcellus
problem dabei ist folgendes:

mp3tag $(ls -b | grep mp3)

In einer Subshell kriegst du Probleme mit den Fieldseperatoren fuer Strings. Nimm eine Shellwildcard, oder `find` mit "-exec"-Parameter (evtl. anstatt "-exec" in Kombination mit `xargs`)

Marcellus

OC Addicted
Avatar
Registered: Mar 2005
Location: ~
Posts: 1755
Ich weis zwar nicht wieso

mp3tag $(ls -b | grep mp3)

nicht funktioniert hat, aber ich weis, dass

find ./*mp3 -printf "mp3tag \"%p\"" | -head -n 1 | /bin/bash

funktioniert, mein shell script ist zwar noch etwas unsauber, weils sich bei mp3tags mit "/" aufhängt, und mp3s ohne mp3tags einfach überschreibt, aber meine mp3s sind sortiert.

Im nachhinein bin ich draufgekommen, dass es mit

mp3tag "$(echo -n $(ls -c | grep mp3 | head -1 | cat))"

geht, es scheint irgendwie nicht zu gehen wegen den Leerzeichen.

COLOSSUS

Administrator
GNUltra
Avatar
Registered: Dec 2000
Location: ~
Posts: 12070
Neues Script im 1. Posting.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz