Script funktioniert nicht unter squeeze

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tuxfuchs
Beiträge: 33
Registriert: 07.11.2009 11:03:43

Script funktioniert nicht unter squeeze

Beitrag von tuxfuchs » 24.06.2011 20:46:32

Hallo,

ich nutze ein Script aus dem linux-forum, um Fotos zu skalieren.

Code: Alles auswählen

#!/bin/bash
# Script sucht alle auf ".jpg" endende Dateien im aktuellem Verzeichnis und konvertiert sie in 16 zu 9 Format.

# hier wird das Ausgabeverzeichnis festgelegt, Verzeichnis muss existieren
OUTDIR="/home/user/export/"

#--------------------------------- Ende Konfiguration ----------------------------

typeset -i BREIT ORIENT HOCH SOLLHOCH DIFF_CUT

#Hauptschleife
for BILDFILE in *.jpg
do
        echo $BILDFILE
        BILDNAME=$(basename "$BILDFILE" ".jpg")
        FORMAT=$(identify -format '%w;%h;%[exif:orientation]' "$BILDFILE")
        BREIT=$(echo "$FORMAT" | cut -d";" -f1)
        HOCH=$(echo "$FORMAT" | cut -d";" -f2)
        ORIENT=$(echo "$FORMAT" | cut -d";" -f3)
        WINKEL=0
        if [ $ORIENT -eq 1 ]
        then
# BILD ist Breitformat
# wir schneiden oben und unten etwas weg
                SOLLHOCH=$BREIT*9/16
                DIFF_CUT=($HOCH-$SOLLHOCH)/2
                convert "$BILDFILE" -crop "$BREIT"x"$SOLLHOCH"+0+"$DIFF_CUT" +repage  -resize '1920!x1080!' -quality 99  "$OUTDIR"/"$BILDNAME".jpg
        else
# BILD ist nicht Breitformat oder gedreht,gespiegelt oder sonstiges
# wir drehen nur und passen die Bildgroesse an
# folgende Verzweigung der Orientation muss noch sauber angepasst werden
# siehe auch  http://www.imagemagick.org/Usage/photos/#orient
                case $ORIENT in
                5)  WINKEL="-90" ;;
                6)  WINKEL="90" ;;
                esac
        convert "$BILDFILE" -rotate "$WINKEL" -resize '1920x1080'  -quality 99 -orient TopLeft  "$OUTDIR"/"$BILDNAME".jpg
        fi
done
Das funktioniert unter opensuse auch ganz wunderbar, aber unter Debian squeeze erhalte ich immer die Fehlermeldung:

Code: Alles auswählen

scalierung.sh: 9: typeset: not found
scalierung.sh: 26: Syntax error: "(" unexpected (expecting "fi")
Hat jemand eine Idee?

Vielen Dank schon mal.

Benutzeravatar
mindX
Beiträge: 1541
Registriert: 27.03.2009 19:17:28
Lizenz eigener Beiträge: GNU General Public License

Re: Script funktioniert nicht unter squeeze

Beitrag von mindX » 24.06.2011 20:57:18

Ändere mal versuchsweise

Code: Alles auswählen

#! /bin/bash
zu

Code: Alles auswählen

#! /bin/sh
Ich kanns nicht mit Bestimmtheit sagen, aber ich hab irgendwas im Hinterkopf, dass die Standardshell irgendwann von bash zu dash geändert wurde.

tuxfuchs
Beiträge: 33
Registriert: 07.11.2009 11:03:43

Re: Script funktioniert nicht unter squeeze

Beitrag von tuxfuchs » 24.06.2011 21:00:19

Hab ich schon probiert - null Erfolg (die gleichen Fehlermeldungen)

Wie kann ich mir eigentlich anzeigen lassen, welchen Shell ich per default verwende? Zumindest habe ich eine .bashrc, .bash_history und .bash_logout

Grüße
tuxfuchs

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Script funktioniert nicht unter squeeze

Beitrag von newdeb » 24.06.2011 22:16:31

Code: Alles auswählen

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2011-02-05 22:14 /bin/sh -> dash
Die Shebang-Zeile weist dein Skript als Bash-Skript aus.
Aufruf entweder mit

Code: Alles auswählen

bash Skriptname
oder direkt (mit Execute-Rechten):

Code: Alles auswählen

./Skriptname
Für Integer-Arithmetik bitte die "(( ))" verwenden:

Code: Alles auswählen

SOLLHOCH=$((BREIT*9/16))
DIFF_CUT=$(( (HOCH-SOLLHOCH)/2 ))

Methusalix

Re: Script funktioniert nicht unter squeeze

Beitrag von Methusalix » 25.06.2011 00:45:41

Hallo,
tuxfuchs hat geschrieben:Wie kann ich mir eigentlich anzeigen lassen, welchen Shell ich per default verwende?

Code: Alles auswählen

echo $SHELL
Bei mir lief das Script gerade ohne Fehlermeldungen durch.
Was "typeset" angeht, so handelt es sich um ein built-in Kommando auch der bash und insofern ist die
Fehlermeldung interessant. Möglicherweise ist die Handhabung des Kommandos nicht korrekt? [1]
Rainer Krienke hat geschrieben:In der bash kann typeset nur dazu verwendet werden, Variablen Attribute zuzuordnen[...]
Welche Standartshell werkelt denn unter opensuse?

<korinthenkakerei an>Die bash kennt auch ein built-in Kommando namens "export". Dieser Name sollte nicht
als Datei / Verzeichnisname verwendet werden.</korinthenkakerei aus>

[1] Rainer Krienke: UNIX Shell-Programmierung,
Gruß M.

robi1
Beiträge: 13
Registriert: 27.12.2010 19:15:10

Re: Script funktioniert nicht unter squeeze

Beitrag von robi1 » 25.06.2011 03:44:35

Mach mal folgendes.
Das Script von hier kopieren und mit dem "vi" bei dir als neue Datei anlegen.

Ich habe jetzt mal ein bisschen mit Schmierzeichen experimentiert und bin auf verdächtig ähnliche Fehler gekommen sowohl beim Test mit "0x0d" als auch mit "0xa0" als Schmierzeichen jeweils am Beginn den beiden Zeilen die er da anmeckert.

Code: Alles auswählen

> # ../../../../script.sh1
typeset: Kommando nicht gefunden.
../../../../script.sh1: Zeile 26: Syntaxfehler beim unerwarteten Wort `('
../../../../scriDIFF_CUT=($HOCH-$SOLLHOCH)/2'
zB bei folgendem Versuch (Auszug aus hexdump -C script.sh1)
00000110 69 67 75 72 61 74 69 6f 6e 20 2d 2d 2d 2d 2d 2d |iguration ------|
00000120 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d |----------------|
00000130 2d 2d 2d 2d 2d 2d 0a 0a 0d 74 79 70 65 73 65 74 |------...typeset|
00000140 20 2d 69 20 42 52 45 49 54 20 4f 52 49 45 4e 54 | -i BREIT ORIENT|
00000150 20 48 4f 43 48 20 53 4f 4c 4c 48 4f 43 48 20 44 | HOCH SOLLHOCH D|
00000160
.............
00000340 4c 4c 48 4f 43 48 3d 24 42 52 45 49 54 2a 39 2f |LLHOCH=$BREIT*9/|
00000350 31 36 0a 0d 09 09 44 49 46 46 5f 43 55 54 3d 28 |16....DIFF_CUT=(|
00000360 24 48 4f 43 48 2d 24 53 4f 4c 4c 48 4f 43 48 29 |$HOCH-$SOLLHOCH)|
00000370 2f 32 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 |/2. |
00000380 20 20 20 63 6f 6e 76 65 72 74 20 22 24 42 49 4c | convert "$BIL|
00000390

robi-1

tuxfuchs
Beiträge: 33
Registriert: 07.11.2009 11:03:43

Re: Script funktioniert nicht unter squeeze

Beitrag von tuxfuchs » 25.06.2011 10:46:52

Hallo und danke für Eure zahlreichen Antworten.

Ich habe es mal mit der Version von newdeb probiert, und sowohl mit

Code: Alles auswählen

bash scalierung.sh 
als auch mit

Code: Alles auswählen

./scalierung.sh
klappt es.

Danke Euch allen.

Tuxfuchs

Methusalix

Re: Script funktioniert nicht unter squeeze

Beitrag von Methusalix » 26.06.2011 00:41:51

Hallo,

ich will ja nicht nörgeln, aber so richtig überzeugt mich das jetzt nicht. Der Hinweis von
newdeb auf die unkorrekte Behandlung von arithmetischen Operationen ist ja richtig (ich habe
da leider auch nicht korrekt genug gelesen), aber:

- Du verweist in Deinem letzten Post ja gar nicht darauf, sondern nur auf den Hinweis, das
Scripte auf verschiedene Arten gestartet werden können, was mit der fehlerhaften Behandlung von arithmetischen Operationen nichts zu tun hat.

- Eigentlich war das Starten des Scriptes ja nicht das Problem, denn es startete ja, so wie
Du es oben beschrieben hast und endete mit einem Abbruch inklusive Fehlermeldung.

- Es stellt sich die Frage, wieso das Ursprungsskript wunderbar unter OpenSuse funktioniert?
(wobei ich OpenSuse nicht kenne)

Gruß M.

Antworten