Vinnaren i pepparkakshustävlingen!
2017-11-29, 23:24
  #1
Medlem
Jag har en mapp sql-script i Linux som ser ut så här

xxx_1.sql
xxx_2.sql
xxx_3.sql
xxx_4.sql

Jag vill i ett batch/shell-script köra alla dessa i ordning (dom är beroende av varandra). När det första är klart vill jag köra nummer två och när det är klart nummer tre och så vidare.

Vill helst också lösa detta med någon form av loop där jag kontrollerar om det finns fler filer eftersom det kan tillkomma ex en xxx_5.sql och då vill jag inte behöva uppdatera scriptet.
Citera
2017-11-30, 00:11
  #2
Medlem
XaoqcHs avatar
Ändra och lägg följande kod i en .sh-fil i samma katalog som .sql-filerna:
Kod:
for %S in (*.sql) do mysql -u user_name -p user_password -h host_name database_name < %S
Citera
2017-11-30, 22:16
  #3
Medlem
Citat:
Ursprungligen postat av XaoqcH
Ändra och lägg följande kod i en .sh-fil i samma katalog som .sql-filerna:
Kod:
for %S in (*.sql) do mysql -u user_name -p user_password -h host_name database_name < %S

Skulle du vilja förklara lite vad varje del gör?

%S in (*.sql) = ??? Förmodar något med alla som slutar med .sql

do mysql -u user_name -p user_password -h host_name database_name = Kör detta i databasen med angivna mysqluppgifter?

< %S = ??


Ser inte var du tar dem i ordning dvs nr 1 först och sen 2 osv.
Citera
2017-11-30, 22:54
  #4
Medlem
XaoqcHs avatar
Citat:
Ursprungligen postat av help
Skulle du vilja förklara lite vad varje del gör?

%S in (*.sql) = ??? Förmodar något med alla som slutar med .sql

do mysql -u user_name -p user_password -h host_name database_name = Kör detta i databasen med angivna mysqluppgifter?

< %S = ??


Ser inte var du tar dem i ordning dvs nr 1 först och sen 2 osv.

För varje fil %S som matchar uttrycket *.sql, koppla upp mot mysql med följande uppgifter och ladda in SQL som finns i filen %S.

Bash laddar filerna efter varandra per automatik. Du kan säkert anpassa skriptet så att loopen endast utförs om mysql inte returnerat en felkod.
Citera
2017-12-02, 10:56
  #5
Medlem
Citat:
Ursprungligen postat av help
Jag har en mapp sql-script i Linux som ser ut så här

xxx_1.sql
xxx_2.sql
xxx_3.sql
xxx_4.

Tror någon ovan har postat en massa kommandon för windows CMD ?

I bash skulle jag nog skriva det som :
Kod:
#!/bin/bash
set -e # makes bash exit if a command return error
# IE if a program return <> 0 (IE: if mysql return <> 0 )

for i in $(ls *.sql|sort); do
 echo mysql -u XXX ... $i
done

Du bör kanske kolla return kod från mysql .. (som tidigare postare föreslog), och jag också gör
Om du tar bort set -e raden så kommer scriptat att köra alla filer.. även om den första ger fel.

Rekommenderar att testa scriptet med ECHO och om det ser ut att funka så ta bort ECHO, och behålla mysql kommandot.
__________________
Senast redigerad av sagonar 2017-12-02 kl. 11:01. Anledning: splitta lång rad, så det blir lättare att läsa
Citera
2017-12-02, 12:46
  #6
Avstängd
Tänk på att 10 kommer att sorteras före 2. Namnge filerna med lika många siffror, t.ex. 001, 002 osv, eller ge -V till sort om ditt system har den switchen.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback