Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

21.08.2014, 02:22

Shell Script Problem

Hallöchen

Also im Prinzip sicher ganz einfach zu lösen aber ich sehe mich da gerade nicht so durch.

Ich habe oft ein Haufen Bilder die ich umwandeln muss von nef zu jpg oder von jpg zu gif
(Das mit den Bildern schaffe ich schon)

nun dachte ich mir ich könnte die 2 Befehle (nef2jpg und jpg2gif) in eine bash-script schreiben und da stehe ich gerade an

Quellcode

1
2
3
4
5
6
7
#!/bin/bash
if [$schalter == "n"]
then
(umwandlungs- script von nef zu jpg)
else
(umwandlungs-script von jpg zu gif)
fi


also soweit ich das hier so verstanden habe Hier kann man ja beim aufrufen was mit geben

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
(Bsp. von der Sseite: 
you@host > read vorname nachname
Jürgen Wolf
you@host > echo $vorname
Jürgen
you@host > echo $nachname
Wolf
you@host > read vorname nachname
Jürgen Wolf und noch mehr Text
you@host > echo $vorname
Jürgen
you@host > echo $nachname
Wolf und noch mehr Text)


also müsste es ja mit dem Befehl

.

Quellcode

1
/meinscript n bild1.tff
gehen oder nicht ?
müsste nicht bei "if [$schalter == "n"]" eine Auswahl dann entstehen ? sprich "$schalter == "n" führe alles nach then aus wenn nicht "n" dann alles nach else" ?

(Wäre für eine nette Hilfestellung echt sehr Dankbar damit es nicht all zu peinlich wird für mein Denkproblem ;-) )
lg
schatti
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Schattenschlag« (07.10.2014, 13:42)


2

21.08.2014, 14:45

Hier mal zur Anregung ein Script das ich verwende. Es wandelt Bilder mit convert aus media-gfx/imagemagick um. Funktioniert auch mit Verzeichnissen. Ich nutze es unter Gnome da Nautilus mit Scripten erweiterbar ist. Wenn du auch Nautilus verwendest kopiere das Script nach ~/.local/share/nautilus/scripts/Bilder_umwandeln , nenne es _convert_ und mache es ausführbar. Danach, falls du es noch nicht kennst, erscheint, wenn du mit der rechten Maustaste auf ein Bild klickst, ein Popupfester u.a. mit dem Namen Scripte und darin Bilder_umwandeln".


Quellcode

1
2
3
cd .local/share/nautilus/scripts/Bilder_umwandeln
chmod +x _convert_
bash _convert_



Quellcode

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
#!/bin/bash

## Script zum umwandeln von Bildern in ein anderes Format

IFS=$'\n' 

cd $PWD


## Erstelle Symbolische Links
if [[ "${0##*/}" == "_convert_" ]]; then
  for LinkFile in jpg tif eps2
  do
    test -L $LinkFile  || ln -s _convert_ $LinkFile
  done

  exit
fi

## Umwandeln der/des Bilder/s
for Input in $@
do
  ## erstelle Liste mit Bildern
  if [[ -d "$PWD/$Input" ]]; then
    ImageList="$PWD/$Input/*"
  else
    ImageList="${Input}"
  fi

  ## umwandeln der Bilder
  for Image in ${ImageList}
  do
    if [[ -f "$Image" ]]; then
      convert "${Image}" ${0##*/}:"${Image::-4}.${0##*/}" >> $HOME/test.temp
    fi
  done
done 
Intel Core2 Quad CPU @ 2.40GHz mit Gentoo/Gnome3

Eigenes Gentoo System auf CD oder USB

3

21.08.2014, 19:52

Danke _Dirk_ für deine Antwort... nur dürfte ich es bisschen falsch erklärt haben ...
Das umwandeln das ist kein Problem läuft so ca. ab (schreib es gerade aus dem Gedächtnis da ich nicht vor dem richtigen Rechner sitze)

Quellcode

1
2
3
4
5
6
7
8
9
10
if (ls *.nef) > /dev/null 2>&1
then
dcraw -e *.nef
#  mogrify -format jpg *.nef
rename ".thumb" "" *
for i in *.jpg; do mv "$i" "`basename $i thumb.jpg`-nef.jpg"; done
mv *.jpg \jpg
rm *.nef
fi
echo "nef ok"


Das was ich will ist das Script soweit zu erweitern das ich eine Art Auswahl bekomme, denn ich hab noch ein zweites Script (was ich jetzt nicht auswendig weiß sorry). Sollte ja irgendwie möglich sein oder nicht ?

Dachte das es entweder mit

./meinname (Schalter /hier sollte dann eben die Auswahl stattfinden) pfad-zu-bild

oder es ist mit dem read Befehl irgendwie zu lösen. (siehe Link im Vorpost von mir)

Dein Script ist auch sehr interessant aber ich verwende kein Gnome und kein Nautilus bin ein Xfce4 thunar user und so integrieren will ich das eh nicht wirklich ein Script Aufruf würde mir schon reichen.

lg
schatti
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

4

21.08.2014, 22:03

Ach so, was du suchst ist in Kapitel 3 beschrieben. Siehe hier http://openbook.galileocomputing.de/shel…4004DE91F045174. Den read Befehl nutze ich eher selten, da er nicht automatisierbar ist.

Sie dir Kapitel 3 an. Besonders die Variable $*, $@ und die $0 bis $x sowie den Befehl shift. So kannst du z.B. mit DeinScript jpg2nef Bild1 Bild2 den Parameter jpg2nef in $1 finden. Ein shift nach der Auswertung von $1 entfernt diesen Inhalt und schiebt alles eins tiefer. Blöd erklärt, im Link oben ist es besser erklärt.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
Beispiel: ./DeinScript jpg2nef Bild1 Bild2 ....

case $1 in
  jpg2nef) shift
     for jpgBild in $@
     do
       wandel ${jpgBild} in nef um
     done
     ;;
  nef2jpg) shift
     machs andersrum
     ;;
esac
Intel Core2 Quad CPU @ 2.40GHz mit Gentoo/Gnome3

Eigenes Gentoo System auf CD oder USB

5

22.08.2014, 01:55

Irgendwie kapiere ich das immer noch nicht so ganz .. keine Ahnung an was es gerade scheitert bei mir grummel ..... naja ich werde mal was zusammen zimmern so wie ich mir das denke und hier nochmal hochstellen eventuell komme ich mit der Hilfe dann auf meinem Denkfehler ....
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

6

25.08.2014, 22:04

So ich hab mal das ganze mal für mich jetzt vereinfacht (da mir zum Fehler suchen das mit den Grafiken zu stressig war) und einfach mal nur 2 Zeilen Code eingefügt die ich mal testweise ausführen will und das möchte ich gern per Auswahl schaffen .. das möchte ich per read schaffen (falls möglich).
Mein Test Code sieht mal so aus

Quellcode

1
2
3
4
5
6
7
8
#!/bin/bash
read -p " Was möchten sie tun "$1 $2

if ( test "${1}" == "B" )
   then echo @2 | perl -lpe '$_=join " ", unpack"(B8)*"' 
else
     echo @2 | perl -lape '$_=pack"(B8)*",@F' 
fi


So jeden falls läuft das nicht so wie ich gern das hätte, ich habe echt einen Knopf im Kopf was mich echt wurmt.

Ich will eigentlich nur eine Auswahl haben wenn ich mein Script aufrufe "./mein-script.sh" "B Hallo" ein tippe mein Ergebnis sehen im diesen Fall 01001000 01100001 01101100 01101100 01101111 das heißt es soll nur der erste echo Befehl ausgeführt werden. Und wenn ich "T 01001000 01100001 01101100 01101100 01101111" eintippe sollte der 2te echo Befehl nur ausgeführt werden und dann einfach Hallo rauskommen.

Ist das überhaupt möglich ? denke schon oder ?
lg
schatti
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

7

25.08.2014, 23:15

Quellcode

1
2
3
4
5
6
7
8
#!/bin/bash
read -p " Was möchten sie tun " var1 var2

if  [[  "${var1}" == "B" ]]; then
    echo @2 | perl -lpe '$_=join " ", unpack"(B8)*"' 
else
    echo @2 | perl -lape '$_=pack"(B8)*",@F' 
fi


Versuchs mal so. Die Variablen $0 bis $9 und mehr sind tabu. Der read liest zwei Werte ein. Den ersten in var1 und den zweiten in var2. Mit $var1 hast du zugriff auf den Inhalt, die Zuweisung geht ohne $. Was die perl Zeile macht! Das musst du wissen.
Intel Core2 Quad CPU @ 2.40GHz mit Gentoo/Gnome3

Eigenes Gentoo System auf CD oder USB

8

01.09.2014, 14:35

My 50 cent:

Quellcode

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
62
63
64
65
66
67
68
69
70
#!/bin/bash

# arguments
MODE=""
SRC_FILE=""
DST_FILE=""

while [ "${1}" != "" ]; do

    # deal with the options
    case "${1}" in

        -x|--krass)
            MODE="krass"
            ;;

        -h|--help)
            echo "This is here is the help/usage page."
            echo
            echo "USAGE:" $(basename ${0}) "[OPTION] SRC_FILE DST_FILE"
            echo 
            echo "with OPTION been:"
            echo "  -h|--help       this page"
            echo "  -x|--krass      real krasse option"
            echo
            echo "This program will do krass stuff with your files."
            echo
            echo "  - SRC_FILE      source file"
            echo "  - DST_FILE      destination file (existing ones will be destroyed)"
            exit 0
            ;;
            
        -*|--*)
            echo "Unknown option: ${1}"
            echo "Huh? o.O -- type '--help' for help."
            exit 1
            ;;
            
        *) 
            break
            ;;
        
    esac
    shift
done

# get the files
SRC_FILE="${1}"
DST_FILE="${2}"

# sanity checks
if [ -z "${SRC_FILE}" ]; then
    echo "No source given. Bailing out."
    echo "Type --help for help."
    exit 1
fi
if [ -z "${DST_FILE}" ]; then
    echo "No destination given. Bailing out."
    echo "Type --help for help."
    exit 1
fi

# option?
if [ "${MODE}" == "krass" ]; then
    echo "Echt krasse option activated."
    echo "PROGRAMM SUPER-OPTIONS" ${SRC_FILE} ${DST_FILE}
else
    echo "No krasse option activated - lame."
    echo "PROGRAMM LAME-OPTIONS" ${SRC_FILE} ${DST_FILE}
fi


Da kommt dann auch:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
$ ./do_krass.sh foo bar
No krasse option activated - lame.
PROGRAMM LAME-OPTIONS foo bar

$ ./do_krass.sh -x foo bar
Echt krasse option activated.
PROGRAMM SUPER-OPTIONS foo bar

$ ./do_krass.sh --krass foo bar
Echt krasse option activated.
PROGRAMM SUPER-OPTIONS foo bar
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

9

01.09.2014, 21:59

Vielen dank für eure Hilfe dachte das ginge irgendwie einfacher aber egal werde mir das ganze am Wochenende ganz genau angucken hab leider vorher zu wenig Zeit.

lg
schatti
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

10

04.09.2014, 10:40

@Dyle Danke nochmal für deine Hilfe leider dürfte ich doch noch zu wenig wissen bezüglich Shell Scripte haben ... hättest du eventuell irgendwo ein gutes Howto damit ich dein Script besser verstehen kann ?
Bis jetzt hab ich mir das hier zu Gemüte geführt aber irgendwie steige ich noch nicht so ganz durch.

Wäre echt nett wenn man mir da noch kurz auf die Sprünge hilft ... hmm

Danke schon mal im vorraus
lg
schatti
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

11

08.09.2014, 09:42

Mhm, der Link ist doch recht umfangreich und ausführlich. Der Rest kommt einfach mit learning-by-doing.

Was sind die Hacken? Grundsätzlich guck dir den test-Befehl (http://openbook.galileocomputing.de/shell_programmierung/shell_006_003.htm#RxxKap00600304004E251F012172) an. Der ist eigentlich in jedem Script zu finden. Beachte das es das Kommando "test" gibt und die öfter anzutreffende Schreibweise der eckigen (!) Klammern: "[ $x = 0 ]" wobei zwischen den Klammern und der Bedinung links und (!) rechts ein Space/Leerzeichen sein muss.

Beachte auch, dass Klammern wie "[", "]", "(" und ")" in der Shell eine sehr andere Bedeutung als üblich haben. "[" und "]" sind eine Art "shortcut" für das test Kommando und das Paar "(" - ")" startet eine Subshell! Das ist *nicht* einfach eine Klammer mit Anweisung, die zuerst auszurechnen sind.

Der Rest ist im Grunde eigentlich nicht schwer.
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

12

08.09.2014, 12:45

Danke für deine Hilfe Dyle werde mir das ganze Heute Abend nochmal genauer angucken. (naja wenn man es verstanden hat und es auch anwenden kann ist nichts schwer :D )
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''

13

07.10.2014, 13:41

Sodale hab mich jetzt mit Büchern bewaffnet und werde mal weiter die durcharbeiten um besser zu werden bei den Shell-Scripten.

Danke noch mal für die Hilfe hier Dyle
''''''''''''''''''''''''''''''''''''''''''''''''
Gentoo-Linux
der G-Punkt eines Pc´s

''''''''''''''''''''''''''''''''''''''''''''''''