2016-06-13 19 views
-2

Ich habe eine Funktion mit einer Parameterdatei. Und ich möchte es Zeile für Zeile lesen.Zeile für Zeile aus der Parameterdatei in Funktion lesen

Zustand

Wenn die Linien zwischen <?bash und ?> dann mache ich bash -c '$line' sonst ich die Linie anzuzeigen.

Hier ist meine Datei (Datei):

<html><head></head><body><p>Hello 
<?bash 
echo "world !" 
?> 
</p></body></html> 

Hier meine Bash-Skript (bashtml):

#!/bin/bash 

function generation() 
{ 
    while read line 
    do 
    if [ $line = '<?bash' ] 
    then 
     while [ $line != '?>' ] 
     do 
     bash -c '$line' 
     done 
    else 
    echo $line 
    fi 
    done 
} 

generation $file 

ich dieses Skript auszuführen:

./bashhtml 

I bin Anfänger in Bash Script und ich bin verloren

+2

Ich sehe keine Frage. –

+2

Nach Biffens Kommentar, auch wenn Sie die Funktion korrekt deklariert und aufgerufen haben, würde es sowieso nicht funktionieren, da Sie die neue Zeile nicht erhalten, nachdem Sie ' 123

+1

... abgesehen von der Tatsache, dass Sie die Datei nirgends wirklich lesen – cdarke

Antwort

1

Ich denke, das ist was du meinst. Dieser Code ist jedoch sehr gefährlich! Jeder Befehl, der in diese Bash-Tags eingefügt wird, wird unter Ihrer Benutzer-ID ausgeführt. Es könnte Ihr Passwort ändern, alle Ihre Dateien löschen, Daten lesen oder ändern, und so weiter. Tu es nicht!

#!/bin/bash 

function generation 
{ 
    # If you don't use local (or declare) then variables are global 
    local file="$1"    # Parameter passed to function, in a local variable 
    local start=False   # A flag to indicate tags 
    local line 

    while read -r line 
    do 
    if [[ $line == '<?bash' ]] 
    then 
     start=True 
    elif [[ $line == '?>' ]] 
    then 
     start=False 
    elif "$start" 
    then 
     bash -c "$line"  # Double quotes needed here 
    else 
     echo "$line" 
    fi 
    done < "$file"    # Notice how the filename is redirected into read 
} 

infile="$1"     # This gets the filename from the command-line 
generation "$infile"   # This calls the function 
+0

Ich habe mein Skript mit deinem überarbeitet und jetzt verstehe ich besser, wie ich meine Funktion implementiere. Danke :) – XZKS

+1

@XZKS: Beachten Sie, dass ich doppelt '[[' statt Single. In diesem Fall bedeuten sie, dass der Variablenwert $ line nicht in Anführungszeichen gesetzt werden muss, aber es gibt andere Unterschiede. Fühlen Sie sich frei, weitere Fragen zu diesem Code zu stellen, wenn Sie sich nicht sicher sind. – cdarke

Verwandte Themen