2017-01-24 7 views
-1

Ich möchte eine MySQL-Datenbank von einem Bash-Skript aktualisieren, indem ich den Wert auf eine Variable aus demselben Skript setze.Mysql-Wert mit einer Bash-Variablen aktualisieren

./dbup.sh 10.10.10.122 

Derzeit ist das Update setzt den Wert auf $IP:

mysql: [Warning] Using a password on the command line interface can be insecure. 
+----+----------+------------+--------------+------------+-------------+ 
| id | g_id  | dest_uri | resources | p_mode  | desc  | 
+----+----------+------------+--------------+------------+-------------+ 
| 2 |  1 | $IP  | xmpp=300  |   0 |    | 
+----+----------+------------+--------------+------------+-------------+ 

erwarte ich:

mysql: [Warning] Using a password on the command line interface can be insecure. 
+----+----------+------------+--------------+------------+-------------+ 
| id | g_id  | dest_uri | resources | p_mode  | desc  | 
+----+----------+------------+--------------+------------+-------------+ 
| 2 |  1 | xmpp:10.10.10.122:5222|xmpp=300|  0 |    | 
+----+----------+------------+--------------+------------+-------------+ 
Version

Mysql 5,7

IP=$1 
IP="xmpp:`echo $IP`:5222" 
#IP='10.10.10.122' 
echo $IP 

mysql -ulol -plol -Ae 'update cs.load_b set dest_uri="$IP" where group_id="1" limit 1;' 
mysql -ulol -plol -Ae 'select * from cs.load_b;' 

wird der Code wie folgt ausgeführt .17, CentOS 7


Antwort auf chepner:

48 # Network Address qualifier 
49 qualify_ip() { 
50  echo ".................................................." 
51  if [[ $1 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then 
52    OIFS=$IFS 
53    IFS='.' 
54    ip=($1) 
55    IFS=$OIFS 
56    [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \ 
57     && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]] 
58    echo ".................................................." 
59    echo "$1 is a valid network address" 
60    echo ".................................................." 
61  else 
62    echo ".................................................." 
63    echo "$1 is not a valid network address. Exiting." 
64    echo ".................................................." 
65    exit 1 
66  fi 
67  echo ".................................................." 
68 } 
.. 
365 qualify_ip $IP 

ich nur mit, was für die Frage notwendig war.

+0

Was ist der Wert von $ PUBLIC_IP hier? – Inian

+0

Was noch wichtiger ist, was tun Sie, um den Wert von 'PUBLIC_IP' zu validieren, bevor Sie ihn zum Erstellen einer SQL-Anweisung verwenden? – chepner

Antwort

0

Ändern Sie diese Zeile

mysql -ulol -plol -Ae 'update cs.load_b set dest_uri="$IP" where group_id="1" limit 1;' 

zu

mysql -ulol -plol -Ae "update cs.load_b set dest_uri='$IP' where group_id=1 limit 1;" 

Damit Ihre Variable IP wird von Shell erweitert. Wir nutzen auch die Tatsache, dass MySQL sowohl '' als auch "" für Zeichenfolgenliterale berücksichtigt. Auch group_id Spalten scheint eine Nummer zu sein. In diesem Fall müssen wir 1 nicht in einfache Anführungszeichen einschließen.

Schließlich könnten Sie $() (Befehl Substitution) anstelle von Backticks verwenden, während der Wert für IP Einstellung:

IP="xmpp:$(echo $PUBLIC_IP):5222" 

Sie sogar $(), da es eine einfache Variable Expansion beseitigen können:

IP="xmpp:$PUBLIC_IP:5222" 
+1

Kann man auch einen Punkt addieren, um zu vermeiden, dass '' '' die interne Einstellung der 'IP' -Variablen verwendet wird, und empfehle, Befehlsersetzung zu verwenden? – Inian

+1

@Alex: Da Sie neu hier sind, lesen Sie bitte [Was soll ich tun, wenn jemand meine Frage beantwortet] (http://stackoverflow.com/help/someone-answers) – Inian

+0

Das funktioniert! Ich habe ein paar Syntaxen ausprobiert, froh, dass es funktionierte. Danke @codeforester. Auch - danke @nian. Ich habe jetzt: 'IP = $ 1' 'mysql -ulol -plol -Ae" update cs.load_b gesetzt dest_uri = 'xmpp: $ IP: 5060' wobei group_id = 1 limit 1; " – Alex

Verwandte Themen