Eigene Script-Kreationen
bytecamp
+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 15 von 22

Thema: Eigene Script-Kreationen

  1. #1
    .:DISTORTED:. Avatar von Cyber
    Registriert seit
    16.05.2003
    Ort
    D -> BW -> Karlsruhe
    Beiträge
    997

    Lightbulb Eigene Script-Kreationen

    HIn und wieder gibt es ja immer wieder Probleme, Aufgaben, Routinen usw. die sich mittel Shell-Script einfacher und bequemer lösen lassen. Der eine oder andere hat sich da mit Sicherheit ja auch schon was gebastelt.
    Meine Intension ist die, dies den anderen hier zur Verfügung zu stellen. Vielleicht findet sich dann hier die eine oder andere Lösung für die Community.

    Ich mach mal den Anfang und poste hier meine einfache aber schnelle MP3-Verwaltung. Das Script erstellt anhand von mp3-CD's Listen und ermöglicht die Suche nach bestimmten Songs oder Interpreten.

    Der Einfachkeit halber (oder eher wegen der Upload-Beschränkung) habe ich das Script mit der Extension .txt versehen.
    Angehängte Dateien

  2. Terrashop.de >Shell-Befehle als Poster für 1 Euro jetzt bei terrashop.de< Terrashop.de
  3. #2
    Steirer Avatar von chb
    Registriert seit
    01.06.2003
    Ort
    ÖSTERREICH
    Beiträge
    2.360
    Blog-Einträge
    1
    Gute Idee - Ich werd des wenn das Wiki fertig iss dann auch mal dort unterbringen ..
    --
    Nichts ist so mysthisch als die Fähigkeit der menschlichen Einbildung.
    --
    My friend, you would not tell with such high zest
    To children ardent for some desperate glory,
    The old Lie: Dulce et decorum est
    Pro patria mori.

  4. #3
    Haudegen Avatar von rup
    Registriert seit
    10.04.2002
    Beiträge
    627
    Find ich eine gute, bei mir haben sich auch ein paar Skripte angesammelt

  5. #4
    Tripel-As Avatar von Wizard
    Registriert seit
    21.01.2003
    Beiträge
    234
    Hi Cybermarc, Gute Idee!
    werde auch noch ein paar Scripts veröffentlichen.
    Das erste ist das Rotate-Script. Es richtet sich an die Benutzer von Digitalkameras: Die Hochkant-Aufnahmen müssen jeweils um 90° nach rechts gedreht werden (bzw. 270, wenn die Kamera anders herum gehalten wird). Es benutzt das Programm Convert des Paketes Image Magick. Ich habe eine Kamera von Canon, die Dateinamen sehen dort so aus: IMG_0578.JPG. Ich habe ein Script geschrieben, das nur die jeweiligen Nummern der zu drehenden Bilder abfragt (hier: 0578 ), das Bild dann dreht und so lange weiter fragt, bis man 0 eingibt. Welche Bilder gedreht werden sollen, lässt sich mit der Vorschau-Funktion in Nautilus oder Konqueror schnell ermitteln. Das Script ist primitiv aber ich finde es sehr praktisch.

    URL: http://mitglied.lycos.de/kriegeronline/scripts

  6. #5
    .:DISTORTED:. Avatar von Cyber
    Registriert seit
    16.05.2003
    Ort
    D -> BW -> Karlsruhe
    Beiträge
    997
    @Wizard:
    Kling gut, kann ich auch gebrauchen.

    @ALL:
    ich hab noch zwei Fehler im MP3-Script ausgebessert. Hier die funktionierende Variante.
    Angehängte Dateien

  7. #6
    Haudegen Avatar von rup
    Registriert seit
    10.04.2002
    Beiträge
    627
    @wissard


    Gute Idee. Man koennte z.B. auch mit identify -size geometry (auch ImageMagick) abfragen ob das Bild auf dem Kopf steht. Natuerlich musste man dann seine bevorzugte Kamera haltung bei Hochformat mit angeben.

  8. #7
    Tripel-As Avatar von Wizard
    Registriert seit
    21.01.2003
    Beiträge
    234
    @rup

    Wenn das Script, wie Du es vorschlägst, noch erkennen könnte, ob das Bild hochkant aufgenommen wurde oder nicht, wäre es natürlich so gut wie perfekt.

    Leider funktioniert der Identify-Befehl nicht so, wie er soll:
    identify -size IMG_0635.JPG
    --> identify: Missing geometry (-size).
    Beim Aufruf ohne weitere Optionen ergibt sich:
    identify IMG_0635.JPG
    --> IMG_0635.JPG JPEG 1600x1200+0+0 DirectClass 8-bit 383.1k 0.000u 0:01
    Wobei es keinen Unterschied macht, ob das Bild hochkant ist oder nicht.

    Es gäbe noch die Möglichkeit, das Programm "exif" zu verwenden. Es liest die Exif-Informationen von Bilddateien aus.
    Bei einem Hochkant-Bild sieht das Ergebnis so aus:
    exif -t Orientierung IMG_0633.JPG
    -->
    EXIF entry 'Orientierung' (0x112, 'Orientation') exists in IFD '0':
    Tag: 0x112 ('Orientation')
    Format: 3 ('Short')
    Components: 1
    Size: 2
    Value: rechts - oben

    Bei einem Bild im Querformat so:
    exif -t Orientierung IMG_0635.JPG
    -->
    EXIF entry 'Orientierung' (0x112, 'Orientation') exists in IFD '0':
    Tag: 0x112 ('Orientation')
    Format: 3 ('Short')
    Components: 1
    Size: 2
    Value: oben - links

    Man kann erkennen, dass der entscheidende Unterschied bei der Eigenschaft "Value" liegt. Man könnte diese Zeile mit 'grep' herausfiltern und vom Script auswerten lassen...
    Ich arbeite dran.

  9. #8
    der-mit-dem-tux-tanzt Avatar von tr0nix
    Registriert seit
    11.07.2003
    Ort
    Schweiz, Opfikon/Glattbrugg
    Beiträge
    1.585
    [ ] /dev/sleep support (obsolete)
    [x] /dev/caffeine support (NEW!)

  10. #9
    Haudegen Avatar von rup
    Registriert seit
    10.04.2002
    Beiträge
    627
    @ Wizard
    ich hab gerade identify getestet, bei mir erkennt er ob das Bild hochkant steht oder nicht. Natuerlich weiss er nicht ob du das Bild um 90 oder 270 Grad drehen musst, aber du weisst ja wie du deine Kamera meisstens haeltst


    Code:
    $ identify -size geometry img_2078.jpg
    img_2078.jpg JPEG 1600x1200 DirectClass 8-bit 185kb 0.0u 0:01
    
    rup pc2000 ~
    $ gimp img_2078.jpg
    
    rup pc2000 ~
    $ identify -size geometry img_2078.jpg
    img_2078.jpg JPEG 1200x1600 DirectClass 8-bit 187kb 0.0u 0:01
    
    rup pc2000 ~
    Version: @(#)ImageMagick 5.4.4 04/05/02 Q:16

  11. #10
    Tripel-As Avatar von Wizard
    Registriert seit
    21.01.2003
    Beiträge
    234
    DIE LÖSUNG!

    Ich fand sie in der aktuellen Ausgabe des Linux User (10/03).
    Das Programm jhead kann die Exif-Informationen auslesen und Bilder dementsprechend bearbeiten.
    jhead gibt es für Mandrake als Einzelpaket.
    Sofern die Kamera erkennt, wie sie gehalten wird, kann man alle Bilder folgendermaßen automatisch drehen:
    jhead -autorot *.JPG

    Daneben gibt es in dieser Ausgabe noch jede Menge Tips, Skript- und Bedienungsanleitungen; ich kann diese Ausgebe wirklich jedem wärmstens empfehlen, der eine digitale Kamera besitzt und / oder große Mengen an Bildern beareiten und verwalten will.

  12. #11
    GESPERRT!
    Registriert seit
    13.08.2002
    Beiträge
    351

    Cool

    Mal meine funktionen aus der ~/.bashrc zeig:

    Code:
    function mkiso() {
    	local ISO_FILE ISO_VOL_ID SOURCE USAGE
    	USAGE="usage: makeiso ISO_FILE ISO_VOL_ID SOURCE [SOURCE2 SOURCE 3...]"
    	if [ -z "$1" ]; then
    		echo -e "${USAGE}"; return 1
    	fi
    	ISO_FILE="$1"
    	ISO_VOL_ID="$2"
    	shift 2
    	SOURCE="$@"
    	mkisofs -J -r -V "${ISO_VOL_ID}" -o "${ISO_FILE}" ${SOURCE}
    Klar, ist zum ISOS erstellen.

    Code:
    function burniso() {
    	local ISO_FILE CDRECORD_ARGS USAGE
    	USAGE="usage: burniso ISO_FILE"
    	if [ -z "$1" ]; then
    		echo -e "${USAGE}"; return 1
    	fi
    	ISO_FILE="$1"
    	CDRECORD_ARGS="-v dev=$CDR_DEVICE speed=$CDR_SPEED driveropts=burnfree -eject"
    	sudo cdrecord ${CDRECORD_ARGS} -data "${ISO_FILE}"
    }
    Klar, ISOS auf CD bruzeln

    Code:
    function swatch() {
    	local USAGE FILE
    	USAGE="usage: swatch INTERVAL COMMAND"
    	if [ -z "${1}" ] || [ -z "${2}" ]; then
    		echo -e "${USAGE}"; return 1
    	fi
    	while true; do
    		clear
    		echo -e "Every ${1}s: ${2}\t[$(date)]"
    		eval ${2}
    		sleep ${1}
    	done
    }
    Führt alle "n" Sekunden "command" aus

    Code:
    function untar() {
    	local USAGE FILE
    	USAGE="usage: untar FILE [FILE 2] ... [FILE n]"
    	if [ -z "$1" ]; then
    		echo -e "$USAGE"; return 1
    	fi
    	for FILE in $*; do
    		tar xvf $FILE
    	done
    }
    entpackt *.tar archive

    Code:
    function rot13() {
    	if [ $# = 0 ] ; then
    		tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]"
    	else
    		tr "[a-m][n-z][A-M][N-Z]" "[n-z][a-m][N-Z][A-M]" < $1
    	fi
    }
    Die gute alte rot13 verschlüsselung...

    Hab noch mehr, aber das is mal das wichtigste bzw das nützlichste.
    Sind nicht alle von mir

    mfg m.w. aus b. bei b.
    Geändert von caba (13.10.2003 um 20:17 Uhr)

  13. #12
    miis
    Registriert seit
    27.04.2003
    Ort
    CH
    Beiträge
    46
    Hier ein XML-Parser.


    Er wandelt XML-Tags und Attributte in Variablen um.
    Findet er den gesuchten Tag, so wird eine Methode ausgeführt.

    Beispiel:
    Code:
    <forums>
    	<forum type="solaris">
    		<user id="1">name</user>
    	</forum>
    
    	<forum type="linux">
    		<user id="2" name="name" />
    	</forum>
    </forums>
    Wenn ich jetzt zum Beispiel den User 1 aus dem Solaris-Forum will:
    parseXML "/forum/forum[@type=solaris]/user" "methode" "XML-File" (@type='solaris' oder attribute::type='solaris'// Es können auch mehrere Attribute angegeben werden [@atr1='1'][@atr2='2'])

    Wenn er beim User ankommt, erstellt der Pasrer folgende Varaiblen und startet dann die definierte Methode:
    user=name
    id=1

    Beim Linux-Forum würde das ganze so aussehen:
    parseXML "/forum/forum[@type=linux]/user" "methode" "XML-File"
    Folgende Vars werden erstellt:
    user=""
    id=2
    name=name

    Der Parser unterstützt auch Wildcards bei Tags:
    parseXML "/*/forum[@type=solaris]/user" "methode" "XML-File"




    Script-Methode

    Code:
    parseXML() {
    	#DESc.: XML parsing method
    	#Interpreter: sh/ksh
    	#Author: meez
    	#Version: 1.0
    	#Date: June 2003	
    	#usage: parseXML <path> <method> <file>	
    	#######################################################		
    	#set -x	
    	#trap "" 1 2 3
    	if [ $# -lt 3 ] ; then	
    		echo "XML-Parse-Error: Incorrect argument number"
    		return 1	
    	fi		
    	if [ " $3 " = "  " ] || [ ! -r $3 ] ; then	
    		echo "XML-Parse-Error: No valid input file!"
    		return 1	
    	fi	
    	SESSION_ID="`echo $$`"
    	#mkdir -p /tmp 2>/dev/null					
    	rm -f /tmp/sxp-parsed1.$SESSION_ID.tmp /tmp/sxp-parsed2.$SESSION_ID.tmp 2>/dev/null
    	if [ " $1 " != " / " ] ; then
    		#parsing path
    		FULLPATH="`echo "$1" | awk '{print substr($0,2,length())}' | sed 's/\/\//\//g' | sed 's/\[attribute::/:/g' | sed 's/\[@/:/g' | tr -d "]" | tr -d "\'" | tr -d "\""`"
    		tags="`echo "$FULLPATH" | awk -F/ '{print NF}'`"
    		LASTTAG="`echo "$FULLPATH" | awk -F/ '{print $'"$tags"'}'`"
    	fi
    	sed 's/-->/<\!-- /g' "$3" | sed 's/\"\/>/\" \/>/g' | sed 's/<\!--/<\!-->/g' | tr -d "\t" | tr -d "\n" | tr "<" "\n" | tr ">" "\n" > /tmp/sxp-parsed1.$SESSION_ID.tmp
    	n=1		
    	SET="true"
     	COMMENT="false"		
    	#sort out comment
    	while read entry ; do		
    		#sort out empty entrys
    		if [ " $entry " = "  " ] ; then				
    			continue				
    		fi			
    		#comment end					
    		if [ " $entry " = " !-- " ] && [ " $COMMENT " = " true " ] ; then			
    			SET="true"
    			COMMENT="false"						
    			continue
    		fi	
    		#comment start
    		if [ " $entry " = " !-- " ] ; then			
    			SET="false"
    			COMMENT="true"				
    			continue
    		fi	
    		if [ " $SET " = " true " ] ; then			
    			echo "$entry" >> /tmp/sxp-parsed2.$SESSION_ID.tmp				
    		fi			
    	done < /tmp/sxp-parsed1.$SESSION_ID.tmp	
    	touch /tmp/sxp-parsed2.$SESSION_ID.tmp 2>/dev/null
    	mv /tmp/sxp-parsed2.$SESSION_ID.tmp /tmp/sxp-parsed1.$SESSION_ID.tmp		
    	while (true) ; do
    		if [ " $1 " = " / " ] ; then
    			break
    		fi	
    		if [ $n -gt $tags ] ; then		
    			break			
    		fi	
    		#SET="true"
    		SET="false"
    		COMPARE="true"		
    		MAINTAGFULL="`echo "$FULLPATH" | awk -F/ '{print $'"$n"'}'`"
    		MAINTAG="`echo "$MAINTAGFULL" | awk -F: '{print $1}'`"
    		while read entry ; do
    			if [ " $MAINTAG " = " * " ] ; then
    				mv /tmp/sxp-parsed1.$SESSION_ID.tmp /tmp/sxp-parsed2.$SESSION_ID.tmp
    				break
    			fi
    			TAG="`echo "$entry" | awk '{print $1}'`"				
    			if [ " $TAG " = " $MAINTAG " ] && [ " $COMPARE " = " true " ] ; then			
    				tags2="`echo "$MAINTAGFULL" | awk -F: '{print NF}'`"					
    				i=1	
    				atr_count=0				
    				#LINE=`echo $entry | sed 's/\"//g'`					
    				LINE=`echo $entry | tr -d "\""`
    				while [ $i -le $tags2 ] ; do				
    					if [ $tags2 -eq 1 ] ; then																
    						atr_count=$tags2
    						break						
    					fi					
    					ATTRIBUTE="`echo "$MAINTAGFULL" | awk -F: '{print $'"$i"'}'`"								
    					if [ " `echo "$LINE" | grep -w "$ATTRIBUTE"` " != "  " ] ; then					
    						atr_count=`expr $atr_count + 1`						
    					fi							
    					i=`expr $i + 1`									
    				done											
    				if [ $atr_count -eq $tags2 ] ; then				
    					SET="true"
    					COMPARE="true"									
    				else 		
    					SET="false"
    					COMPARE="false"										
    				fi			
    			fi				
    			if [ " $TAG " = " /$MAINTAG " ] ; then		
    				SET="false"
    				COMPARE="true"	
    			fi				
    			if [ " $SET " = " true " ] ; then			
    				echo "$entry" >> /tmp/sxp-parsed2.$SESSION_ID.tmp				
    			fi	
    		done < /tmp/sxp-parsed1.$SESSION_ID.tmp		
    		touch /tmp/sxp-parsed2.$SESSION_ID.tmp 2>/dev/null
    		mv /tmp/sxp-parsed2.$SESSION_ID.tmp /tmp/sxp-parsed1.$SESSION_ID.tmp 2>/dev/null					
    		n=`expr $n + 1`		
    	done		
    	mv /tmp/sxp-parsed1.$SESSION_ID.tmp /tmp/sxp-parsed2.$SESSION_ID.tmp
    	n=1	
    	while read entry ; do		
    		TAG="`echo "$entry" | awk '{print $1}'`"	
    		if [ " $1 " = " / " ] ; then
    			LASTTAG="$TAG"
    		fi											
    		if [ " $TAG " = " $LASTTAG " ] ; then												
    			CLEANUPATTRIBUTES=""					
    			for ATTRIBUTE in `echo $entry` ; do												
    				#clear vars					
    				CLEANUPATTRIBUTE="`echo $ATTRIBUTE | awk -F= '{print $1}'`=\"\""
    				CLEANUPATTRIBUTES="$CLEANUPATTRIBUTES$CLEANUPATTRIBUTE;"				
    				eval "$CLEANUPATTRIBUTE" 2>/dev/null		
    				eval "$ATTRIBUTE" 2>/dev/null																
    			done			
    			i=`expr $n + 1`			
    			BUFFER="$LASTTAG=\"`awk '{if (NR=='$i') print $0}' /tmp/sxp-parsed2.$SESSION_ID.tmp 2>/dev/null`\""
    			eval "$BUFFER" 2>/dev/null						
    			#execute defined method	
    			"$2" #2>/dev/null
    			BUFFER="$LASTTAG=\"\""
    			eval "$BUFFER" 2>/dev/null	
    			eval "$CLEANUPATTRIBUTES" 2>/dev/null
    		fi		
    		n=`expr $n + 1`
    	done < /tmp/sxp-parsed2.$SESSION_ID.tmp	
    	rm -f /tmp/sxp-parsed2.$SESSION_ID.tmp 2>/dev/null
    }
    Geändert von meez (17.10.2003 um 12:19 Uhr)
    meez

  14. #13
    der-mit-dem-tux-tanzt Avatar von tr0nix
    Registriert seit
    11.07.2003
    Ort
    Schweiz, Opfikon/Glattbrugg
    Beiträge
    1.585
    Ich mag XML absolut nicht.. am schoenste waere es, wenn es keine Parameter sondern nur "Unique"-Eintraege geben wuerde. Dann koenntest du das ganze schoen in einem mehrdimensionalen Array abbilden :/
    [ ] /dev/sleep support (obsolete)
    [x] /dev/caffeine support (NEW!)

  15. #14
    miis
    Registriert seit
    27.04.2003
    Ort
    CH
    Beiträge
    46
    Nein, da die Bourne Shell keine Arrays unterstützt (Nur die ksh)....
    meez

  16. #15
    der-mit-dem-tux-tanzt Avatar von tr0nix
    Registriert seit
    11.07.2003
    Ort
    Schweiz, Opfikon/Glattbrugg
    Beiträge
    1.585
    Also die bash (jaja ich weiss, bourne again.. aber die ist unter Linux ja Standard) unterstuetzt Arrays ab Version 2. Scriptest du etwa noch mit sh?
    [ ] /dev/sleep support (obsolete)
    [x] /dev/caffeine support (NEW!)

+ Antworten

Ähnliche Themen

  1. Shell Script per Broadcast auf Nachrichtendienst ?
    Von dynamix im Forum Shell-Skripte
    Antworten: 7
    Letzter Beitrag: 12.11.2004, 19:26
  2. script endet nicht wenn X endet
    Von tomvomland im Forum Sonstige Window Manager
    Antworten: 2
    Letzter Beitrag: 20.09.2004, 14:21
  3. Antworten: 10
    Letzter Beitrag: 22.03.2004, 19:22
  4. Suse 9/USB-Netzwerkkarte/->restart
    Von mrhatch im Forum SuSE / OpenSuSE
    Antworten: 6
    Letzter Beitrag: 07.01.2004, 11:35
  5. script um apache und mysql home,db anzulegen
    Von shorty im Forum Unix Derivate & sonst. Unix Fragen
    Antworten: 1
    Letzter Beitrag: 21.10.2002, 14:21

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein