mikrocontroller.net

Forum: PC-Programmierung ShellScript Variablen in Commands


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Alexander Becker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

hab ein kleines Problem auf das bestimmt viele eine Lösung haben 
könnten.

ICh möchte eine Varibale einlesen und diese dann mit einem Befehl 
ausführen.
Leider klappt das ganze nicht so wie ich es mir gedacht habe.

Hoffe das mir jemand einen Stoß in die richtige Richtung geben kann.
function process_create_database()
{
  
  echo "Create Database"
  echo "----------------------------------------"
  echo "Databasename :" 
  read -r databasename
  echo "Duration: "
  read duration
  
  
  if [ "$duration" == "" ];
  then
        
  influx -execute 'create database $databasename'
  echo "Datenbank wurde erstellt"

Hier wird folgender Fehler geworfen:

ERR: error parsing query: found $database, expected identifier at line 
1, char 17
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
  if [ "$duration" == "" ];
  then
        string="'CREATE DATABASE $databasename'"
   influx -execute $string
  
Bei dieser Variante erhlate ich:

unknown arguments: database a'
Usage of influx:
-execute 'command'
       Execute command and quit.
  if [ "$duration" == "" ];
  then
        string="'CREATE DATABASE $databasename'"
   influx -execute "$string"
  

Und hier haben wir diese tolle Meldung

ERR: error parsing query: found CREATE DATABASE a, expected SELECT, 
DELETE, SHOW, CREATE, DROP, EXPLAIN, GRANT, REVOKE, ALTER, SET, KILL at 
line 1, char 1
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".


kann mir jemand sagen wie ich die Variabele in den execute Befehl 
eingebeunden bekomme?

Freu mich schon auf Antworten

Autor: devzero (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Becker schrieb:
> Hoffe das mir jemand einen Stoß in die richtige Richtung geben kann.

man eval

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In

  influx -execute 'create database $databasename'

musst du die Apostrophe (') durch Anführungszeichen (") ersetzen, damit
$databasename expandiert wird:

  influx -execute "create database $databasename"

Sonst wird versucht, eine Datenbank namens $databasename zu kreieren,
was aber wegen des $-Zeichens kein gültiger Identifier ist.

        string="'CREATE DATABASE $databasename'"
   influx -execute "$string"

Hier wird versucht das Kommando 'CREATE statt CREATE auszuführen. Lass
die Apostrophe weg, dann funktioniert auch das:

   string="CREATE DATABASE $databasename"
   influx -execute "$string"

: Bearbeitet durch Moderator
Autor: devzero (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe da kein '' alleine - "''" ist ok und da wird auch expandiert 
(zumindestens in der Bash)

Autor: Yalu X. (yalu) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
devzero schrieb:
> Ich sehe da kein '' alleine - "''" ist ok und da wird auch expandiert

Egal, ob da das Apostroph alleine oder zu zweit oder zu dritt auftaucht:
Es stört, weil es den Influx-Interpreter verwirrt. Dieser möchte bspw.

CREATE DATABASE a

sehen, nicht aber

'CREATE DATABASE a'

Ich habe mich in meinem obigen Beitrag allerdings darin geirrt, wie
Influx diese Zeile falsch interpretiert, weil ich nicht gewusst habe,
dass auch in der Influx-Syntax die Apostrophe zur Zusammenfassung
mehrerer (durch Whitespace getrennter) Wörter zu einem Token benutzt
werden. Damit heißt das erste Token des Kommandos nicht, wie von mir
angenommen,

'CREATE

sondern

CREATE DATABASE a

was aber genauso falsch ist.

Damit ist auch die – zunächst recht komisch erscheinende – Fehlermeldung
nachvollziehbar:

ERR: error parsing query: found CREATE DATABASE a, expected SELECT, 
DELETE, SHOW, CREATE, DROP, EXPLAIN, GRANT, REVOKE, ALTER, SET, KILL at 
line 1, char 1

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.