ShellScript Variablen in Commands

Gast #5925810
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.
1
function process_create_database()
2
{
3
  
4
  echo "Create Database"
5
  echo "----------------------------------------"
6
  echo "Databasename :" 
7
  read -r databasename
8
  echo "Duration: "
9
  read duration
10
  
11
  
12
  if [ "$duration" == "" ];
13
  then
14
        
15
  influx -execute 'create database $databasename'
16
  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>".
1
  if [ "$duration" == "" ];
2
  then
3
        string="'CREATE DATABASE $databasename'"
4
   influx -execute $string
Bei dieser Variante erhlate ich:

unknown arguments: database a'
Usage of influx:
-execute 'command'
       Execute command and quit.
1
  if [ "$duration" == "" ];
2
  then
3
        string="'CREATE DATABASE $databasename'"
4
   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
Moderator
In

1
  influx -execute 'create database $databasename'

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

1
  influx -execute "create database $databasename"

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

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

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

1
   string="CREATE DATABASE $databasename"
2
   influx -execute "$string"
Moderator
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.

1
CREATE DATABASE a

sehen, nicht aber

1
'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,

1
'CREATE

sondern

1
CREATE DATABASE a

was aber genauso falsch ist.

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

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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.