Eigene Script-Kreationen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Cyber, 04.09.2003.

  1. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    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.
     

    Anhänge:

  2. Anzeige

    Schau dir mal diesen Ratgeber an. Viele Antworten inkl. passender Shell-Befehle!
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. chb

    chb Steirer

    Dabei seit:
    01.06.2003
    Beiträge:
    2.359
    Zustimmungen:
    0
    Ort:
    ÖSTERREICH
    Gute Idee - Ich werd des wenn das Wiki fertig iss dann auch mal dort unterbringen ..
     
  4. rup

    rup Haudegen

    Dabei seit:
    10.04.2002
    Beiträge:
    627
    Zustimmungen:
    0
    Find ich eine gute, bei mir haben sich auch ein paar Skripte angesammelt
     
  5. Wizard

    Wizard Tripel-As

    Dabei seit:
    21.01.2003
    Beiträge:
    234
    Zustimmungen:
    0
    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. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    @Wizard:
    Kling gut, kann ich auch gebrauchen.

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

    Anhänge:

  7. rup

    rup Haudegen

    Dabei seit:
    10.04.2002
    Beiträge:
    627
    Zustimmungen:
    0
    @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. Wizard

    Wizard Tripel-As

    Dabei seit:
    21.01.2003
    Beiträge:
    234
    Zustimmungen:
    0
    @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. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
  10. rup

    rup Haudegen

    Dabei seit:
    10.04.2002
    Beiträge:
    627
    Zustimmungen:
    0
    @ 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. Wizard

    Wizard Tripel-As

    Dabei seit:
    21.01.2003
    Beiträge:
    234
    Zustimmungen:
    0
    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 caba, 13.10.2003
    Zuletzt bearbeitet: 13.10.2003
    caba

    caba GESPERRT!

    Dabei seit:
    13.08.2002
    Beiträge:
    351
    Zustimmungen:
    0
    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. :)
     
  13. #12 meez, 17.10.2003
    Zuletzt bearbeitet: 17.10.2003
    meez

    meez miis

    Dabei seit:
    27.04.2003
    Beiträge:
    46
    Zustimmungen:
    0
    Ort:
    CH
    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
    }
    
     
  14. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    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 :/
     
  15. meez

    meez miis

    Dabei seit:
    27.04.2003
    Beiträge:
    46
    Zustimmungen:
    0
    Ort:
    CH
    Nein, da die Bourne Shell keine Arrays unterstützt (Nur die ksh)....
     
  16. tr0nix

    tr0nix der-mit-dem-tux-tanzt

    Dabei seit:
    11.07.2003
    Beiträge:
    1.585
    Zustimmungen:
    0
    Ort:
    Schweiz, Opfikon/Glattbrugg
    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?
     
Thema:

Eigene Script-Kreationen

Die Seite wird geladen...

Eigene Script-Kreationen - Ähnliche Themen

  1. In eigener Sache: Neue, stark verbesserte Suchfunktion

    In eigener Sache: Neue, stark verbesserte Suchfunktion: Pro-Linux läuft nun mit der erneuerten Version 1.5 des Content Management Systems NB3. Die wichtigste sichtbare Änderung ist die neue, auf der...
  2. Western Digital widmet dem Raspberry Pi eine eigene Festplatte

    Western Digital widmet dem Raspberry Pi eine eigene Festplatte: Der Festplattenhersteller Western Digital (WD) gibt die Verfügbarkeit einer 314 GByte großen Festplatte für den Raspberry Pi bekannt. Weiterlesen...
  3. Pale Moon 26 mit eigener Browser-Engine fertiggestellt

    Pale Moon 26 mit eigener Browser-Engine fertiggestellt: Die Entwickler von Pale Moon haben eine überarbeitete Version des Browsers, der von Firefox abgeleitet ist, freigegeben. Das Pale Moon-Projekt...
  4. Intel veröffentlicht eigene Linux-Distribution für die Cloud

    Intel veröffentlicht eigene Linux-Distribution für die Cloud: Intel hat kürzlich mit »Clear Linux Project for Intel Architecture« eine eigene Linux-Distribution veröffentlicht, die für die eigene...
  5. LLVM entwickelt eigenen ELF-Linker

    LLVM entwickelt eigenen ELF-Linker: Wie das LLVM-Projekt bekannt gab, steht mit »lld« ein alternativer Linker bereit, der sich vor allem durch seine gesteigerte Geschwindigkeit...