ShellScript Variablen in Commands

Gast #5925810
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.
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 #5925987
Lesenswert?

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 #5927034
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.

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren