วิธีดำเนินการคำสั่ง MySQL จากเชลล์สคริปต์


134

ฉันจะเรียกใช้คำสั่ง SQL ผ่านเชลล์สคริปต์เพื่อให้เป็นแบบอัตโนมัติได้อย่างไร

ฉันต้องการกู้คืนข้อมูลที่รวบรวมไว้ในไฟล์ SQL โดยใช้เชลล์สคริปต์ ฉันต้องการเชื่อมต่อกับเซิร์ฟเวอร์และกู้คืนข้อมูล คำสั่งจะทำงานเมื่อดำเนินการแยกกันผ่านบรรทัดคำสั่ง SSH

นี่คือคำสั่งที่ฉันใช้:

mysql -h "server-name" -u root "password" "database-name" < "filename.sql"

นี่คือโค้ดเชลล์สคริปต์ที่สร้างไฟล์ds_fbids.sqlและไพพ์ไปยัง mysql

perl fb_apps_frm_fb.pl
perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql
mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql

วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

คำตอบ:


178

คุณต้องใช้-pแฟล็กเพื่อส่งรหัสผ่าน และเป็นเรื่องยุ่งยากเพราะคุณต้องไม่มีช่องว่างระหว่าง-pและรหัสผ่าน

$ mysql -h "server-name" -u "root" "-pXXXXXXXX" "database-name" < "filename.sql"

หากคุณใช้ช่องว่างหลังจาก-pนั้นทำให้ไคลเอนต์ mysql พร้อมต์คุณโต้ตอบสำหรับรหัสผ่านจากนั้นจะตีความอาร์กิวเมนต์คำสั่งถัดไปเป็นชื่อฐานข้อมูล:

$ mysql -h "server-name" -u "root" -p "XXXXXXXX" "database-name" < "filename.sql"
Enter password: <you type it in here>
ERROR 1049 (42000): Unknown database 'XXXXXXXX'

จริงๆแล้วฉันชอบเก็บผู้ใช้และรหัสผ่านไว้ใน ~ / .my.cnf ดังนั้นฉันจึงไม่ต้องวางไว้ในบรรทัดคำสั่งเลย:

[client]
user = root
password = XXXXXXXX

จากนั้น:

$ mysql -h "server-name" "database-name" < "filename.sql"

แสดงความคิดเห็นของคุณ:

ฉันเรียกใช้คำสั่ง mysql ในโหมดแบทช์เช่นข้างต้นบนบรรทัดคำสั่งและในเชลล์สคริปต์ตลอดเวลา ยากที่จะวินิจฉัยว่าเกิดอะไรขึ้นกับเชลล์สคริปต์ของคุณเนื่องจากคุณไม่ได้แชร์สคริปต์ที่แน่นอนหรือเอาต์พุตข้อผิดพลาดใด ๆ ฉันขอแนะนำให้คุณแก้ไขคำถามเดิมของคุณด้านบนและให้ตัวอย่างสิ่งที่ผิดพลาด

นอกจากนี้เมื่อฉันแก้ไขปัญหาเชลล์สคริปต์ฉันใช้-xแฟล็กดังนั้นฉันจึงสามารถดูว่ามันทำงานอย่างไรแต่ละคำสั่ง:

$ bash -x myscript.sh

ขอบคุณสำหรับการตอบกลับอย่างรวดเร็ว ฉันเหนื่อยกับการใส่รหัสผ่านในบรรทัดคำสั่งเอง ปัญหาที่แท้จริงคือฉันใส่คำสั่งนี้ในไฟล์. sh จากนั้นเรียกใช้เชลล์สคริปต์นี้ คำสั่งในไฟล์ไม่ได้ดำเนินการในบรรทัดคำสั่ง แต่คำสั่งเดียวกันทำงานได้ดีอย่างสมบูรณ์เมื่อฉันดำเนินการเฉพาะคำสั่งในบรรทัดคำสั่ง
MUFC

+ mysql -h dbservername -u user-name -ppassword dbname</br> : No such file or directoryids.sql</br> + $'\r' : command not found2:นี่คือข้อความแสดงข้อผิดพลาดที่ฉันได้รับ
MUFC

ตกลงฉันจะอนุมานว่าไดเร็กทอรีการทำงานปัจจุบันของคุณไม่ใช่ที่ตั้งของไฟล์ ids.sql นอกจากนี้คุณอาจฝังบรรทัดใหม่ในสคริปต์ของคุณ
Bill Karwin

ฉันมีบรรทัดใหม่ที่ฝังอยู่ในเชลล์สคริปต์ของฉันหลังจากทุกคำสั่ง ทั้งหมดที่เชลล์สคริปต์ของฉันมีคือ 3 คำสั่งบรรทัดคำสั่งซึ่งฉันไม่ต้องการรันแยกกันดังนั้นฉันจึงสร้างเชลล์สคริปต์เพื่อให้มันทำงานโดยไม่มีการแทรกแซงของฉันและฉันใส่ newline afetr ทุก commmand นั่นคือสาเหตุของปัญหา?
MUFC

ที่ดีที่สุดเพื่อหลีกเลี่ยง-pหากรหัสผ่านเป็นโมฆะหรือสตริงว่างคุณอาจอัปเดตโพสต์ :)
James Oravec

122

ใช้ไวยากรณ์นี้:

mysql -u $user -p$passsword -Bse "command1;command2;....;commandn"

10
ฉันเข้าสู่หน้านี้จาก google และนี่คือวิธีแก้ปัญหาที่ฉันคาดไว้ (ตรงกับชื่อของคำถาม)
Janaka R Rajapaksha

17
รายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกจากคู่มือ: -B ใช้สำหรับชุดงานพิมพ์ผลงานโดยใช้แท็บเป็นตัวคั่นคอลัมน์โดยแต่ละแถวจะขึ้นบรรทัดใหม่ ด้วยตัวเลือกนี้ mysql จะไม่ใช้ไฟล์ประวัติ โหมดแบตช์ส่งผลให้เกิดรูปแบบเอาต์พุตที่ไม่เป็นตารางและการหลบหนีของอักขระพิเศษ -sคือโหมดเงียบ ให้ผลผลิตน้อยลง -eคือดำเนินการตามคำสั่งและออก
wranvaud

ขอบคุณสำหรับความช่วยเหลือของคุณ! :)
haotang

มันสามารถทำงานร่วมกับพันธุกรรมได้หรือไม่?
zx1986

1
@ zx1986 ใช่และไม่ใช่เพื่อ HEREDOC ขึ้นอยู่กับว่าคุณต้องการใช้มันอย่างไร การใช้เพื่อแทนที่"command1;command2;....;commandn"ส่วนของคำตอบนี้จะไม่ได้ผล การใช้เพื่อแทนที่การใช้ไฟล์เปลี่ยนเส้นทางในไวยากรณ์ของ OP สามารถทำงานได้ ฉันได้แก้ไขปัญหานั้นแล้วในคำตอบสำหรับคำถามนี้
Chindraba

45

คำตอบทั้งหมดที่ผ่านมาดีมาก หากเป็นคำสั่ง sql ง่ายๆเพียงบรรทัดเดียวที่คุณต้องการเรียกใช้คุณสามารถใช้ตัวเลือก -e ได้

mysql -h <host> -u<user> -p<password> database -e \
  "SELECT * FROM blah WHERE foo='bar';"

การค้นหาภายในเครื่องหมายคำพูด ("") เป็นสิ่งที่ฉันต้องทำ ขอบคุณ
user3132107

ฉันเห็นและฉันเข้าใจว่าคุณจำเป็นต้องใส่อัฒภาคที่ส่วนท้ายของแบบสอบถามหรือไม่
Lori

19

วิธีเรียกใช้สคริปต์ SQL ใช้ไวยากรณ์นี้:

mysql --host= localhost --user=root --password=xxxxxx  -e "source dbscript.sql"

หากคุณใช้โฮสต์เป็น localhost คุณไม่จำเป็นต้องพูดถึงมัน คุณสามารถใช้สิ่งนี้:

mysql --user=root --password=xxxxxx  -e "source dbscript.sql"

สิ่งนี้ควรใช้ได้กับ Windows และ Linux

หากเนื้อหารหัสผ่านมี!(เครื่องหมายอัศเจรีย์) คุณควรเพิ่ม\(แบ็กสแลช) ไว้ข้างหน้า


1
จะระบุฐานข้อมูลได้อย่างไร? ควรอยู่ภายใน -e เช่น -e "use abc; source dbscript.sql"?
Abdul Muneer

9

แกนหลักของคำถามได้รับคำตอบหลายครั้งแล้วฉันแค่คิดว่าฉันจะเพิ่มว่า backticks (s) มีการรบกวนทั้งในเชลล์สคริปต์และ SQL หากคุณจำเป็นต้องใช้ใน SQL เพื่อระบุชื่อตารางหรือฐานข้อมูลคุณจะต้องหลบหนีในเชลล์สคริปต์ดังนี้:

mysql -p=password -u "root" -Bse "CREATE DATABASE \`${1}_database\`;
CREATE USER '$1'@'%' IDENTIFIED BY '$2';
GRANT ALL PRIVILEGES ON `${1}_database`.* TO '$1'@'%' WITH GRANT OPTION;"

แน่นอนว่าการสร้าง SQL ผ่านการป้อนข้อมูลของผู้ใช้แบบต่อกัน (ส่งผ่านอาร์กิวเมนต์) ไม่ควรทำเว้นแต่คุณจะเชื่อถืออินพุตของผู้ใช้การใส่ไว้ในภาษาสคริปต์อื่นจะปลอดภัยกว่ามากโดยรองรับพารามิเตอร์ / การหลีกเลี่ยงสตริงสำหรับการแทรกอย่างถูกต้อง ลงใน MySQL


5
mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file

(ใช้เส้นทางแบบเต็มsql_script_fileหากจำเป็น)

หากคุณต้องการเปลี่ยนเส้นทาง out put ไปยังไฟล์

mysql -h "hostname" -u usr_name -pPASSWD "db_name" < sql_script_file > out_file

@ กัสก่อนอื่นขอขอบคุณสำหรับความคิดเห็นที่มีค่า มันเป็นเสน่ห์สำหรับฉัน ฉันต้องการให้ผลลัพธ์เป็นไฟล์ excel หรือ. csv ฉันจะบรรลุเป้าหมายนั้นได้อย่างไร ขอบคุณล่วงหน้า.
Ash_and_Perl

@Ash_and_Perl ฉันแก้ไขคำตอบนี้เท่านั้นขอบคุณเถาวัลย์ไม่ใช่ฉันมันเป็นคำตอบของเขา หากคุณมีคำถามของคุณเองและคุณได้พยายามหาวิธีแก้ปัญหาด้วยตัวเองแล้วฉันขอแนะนำให้คุณสร้างคำถาม ด้วยวิธีนี้คุณจะสามารถระบุรายละเอียดสิ่งที่คุณพยายามล้มเหลวและผู้คนสามารถให้คำตอบที่ครบถ้วนสมบูรณ์แก่คุณ (และรับคะแนนได้!)
กัส

5

คุณลืม-pหรือ--password=(อ่านได้ดีกว่า):

mysql -h "$server_name" "--user=$user" "--password=$password" "--database=$database_name" < "filename.sql"

(เครื่องหมายคำพูดไม่จำเป็นหากคุณแน่ใจว่าข้อมูลประจำตัว / ชื่อของคุณไม่มีช่องว่างหรืออักขระพิเศษเชลล์)

โปรดทราบว่า manpage ก็บอกเช่นกันว่าการให้ข้อมูลประจำตัวในบรรทัดคำสั่งนั้นไม่ปลอดภัย ดังนั้นทำตามคำแนะนำของ Bill เกี่ยวกับ my.cnf


4

ตามที่ระบุไว้ก่อนที่คุณจะสามารถใช้ -p เพื่อส่งรหัสผ่านไปยังเซิร์ฟเวอร์

แต่ฉันแนะนำสิ่งนี้:

mysql -h "hostaddress" -u "username" -p "database-name" < "sqlfile.sql"

สังเกตว่าไม่มีรหัสผ่าน จากนั้นจะแจ้งให้คุณป้อนรหัสผ่าน ฉันจะพิมพ์รหัสผ่านเพื่อไม่ให้รหัสผ่านของคุณเข้าสู่ระบบประวัติบรรทัดคำสั่งของเซิร์ฟเวอร์

นี่เป็นมาตรการรักษาความปลอดภัยขั้นพื้นฐาน

หากความปลอดภัยไม่เป็นปัญหาฉันจะลบรหัสผ่านออกจากผู้ใช้ฐานข้อมูลชั่วคราว จากนั้นหลังจากนำเข้า - เพิ่มใหม่

ด้วยวิธีนี้บัญชีอื่น ๆ ที่คุณอาจมีซึ่งใช้รหัสผ่านเดียวกันจะไม่ถูกบุกรุก

ดูเหมือนว่าในเชลล์สคริปต์ของคุณคุณไม่ได้รอ / ตรวจสอบเพื่อดูว่าไฟล์ที่คุณพยายามจะนำเข้านั้นมีอยู่จริงหรือไม่ สคริปต์ perl อาจยังไม่เสร็จสิ้น


1
คุณพลาดส่วน "อัตโนมัติ" ของคำถามและการนำรหัสผ่านออกชั่วคราวถือเป็นความคิดที่ไม่ดีจริงๆ
PointedEars

ฉันอ่านว่า "คืนค่า" และ "อัตโนมัติ" ซึ่งหมายถึง "อัตโนมัติ แต่ไม่ใช่ตลอดไป" แต่อย่างที่บอกว่า "ถ้าความปลอดภัยไม่น่ากังวล". ฉันเห็นด้วย - มันเป็นความคิดที่ไม่ดีจริงๆ
Sterling Hamilton

ฉันขอโทษถ้าฉันสร้างความสับสน สิ่งที่ฉันหมายถึงโดย Automated คือฉันมีสคริปต์ perl สองตัวที่ใช้ในการสร้างไฟล์. sql แต่คำสั่งในการถ่ายโอนไฟล์นั้นไปยัง DB ไม่ได้ถูกรันโดยเชลล์สคริปต์ แต่จะใช้งานไฟล์ได้อย่างสมบูรณ์หากฉันรันคำสั่งนั้น บนบรรทัดคำสั่ง ฉันต้องการเพิ่มความพยายามในการรันคำสั่งนั้นบนบรรทัดคำสั่งและเรียกใช้ผ่านเชลล์สคริปต์เอง
MUFC

1
Vaibav: หากคุณสามารถใส่เชลล์สคริปต์จริงในคำถามของคุณฉันอาจจะช่วยเพิ่มเติมได้
Sterling Hamilton

perl fb_apps_frm_fb.pl</br> perl fb_new_spider.pl ds_fbids.txt ds_fbids.sql` </br>mysql -h dbservername -u username -ppassword dbname < ds_fbids.sql
MUFC


3

ในการ "ทำให้" ดำเนินการตามขั้นตอนการนำเข้า.sqlไฟล์ที่สร้างขึ้นโดยอัตโนมัติในขณะที่หลีกเลี่ยงกับดักทั้งหมดที่สามารถซ่อนอยู่ในการพยายามส่งผ่านไฟล์stdinและstdoutบอกให้ MySQL เรียก.sqlใช้ไฟล์ที่สร้างขึ้นโดยใช้SOURCEคำสั่งใน MySQL

ไวยากรณ์ในคำตอบสั้น ๆ แต่ยอดเยี่ยมจากKshitij Soodให้จุดเริ่มต้นที่ดีที่สุด กล่าวโดยย่อให้แก้ไขคำสั่งของ OP ตามไวยากรณ์ของ Kshitij Sood และแทนที่คำสั่งในนั้นด้วยSOURCEคำสั่ง:

#!/bin/bash
mysql -u$user -p$password $dbname -Bse "SOURCE ds_fbids.sql
SOURCE ds_fbidx.sql"

ถ้าชื่อฐานข้อมูลรวมอยู่ใน.sqlไฟล์ที่สร้างขึ้นชื่อฐานข้อมูลสามารถหลุดออกจากคำสั่งได้

ข้อสันนิษฐานคือไฟล์ที่สร้างขึ้นนั้นถูกต้องเป็น.sqlไฟล์ในตัวเอง การที่ไม่มีการเปลี่ยนทิศทางไฟล์ไปป์หรือในลักษณะอื่นใดที่จัดการโดยเชลล์จึงไม่มีปัญหาที่จะต้องหลีกเลี่ยงอักขระใด ๆ ในเอาต์พุตที่สร้างขึ้นเนื่องจากเชลล์ แน่นอนว่ากฎที่เกี่ยวข้องกับสิ่งที่ต้องหลีกเลี่ยงใน.sqlไฟล์ยังคงมีผลบังคับใช้

วิธีจัดการกับปัญหาด้านความปลอดภัยเกี่ยวกับรหัสผ่านในบรรทัดคำสั่งหรือในmy.cnfไฟล์ ฯลฯ ได้รับการแก้ไขอย่างดีในคำตอบอื่น ๆ พร้อมคำแนะนำที่ดีเยี่ยม คำตอบที่ฉันชอบจากDannyครอบคลุมถึงเรื่องนี้รวมถึงวิธีจัดการปัญหาเมื่อจัดการกับcronงานหรืออย่างอื่น


เพื่อตอบความคิดเห็น (คำถาม?) เกี่ยวกับคำตอบสั้น ๆ ที่ฉันพูดถึง: ไม่ไม่สามารถใช้กับไวยากรณ์ของ HEREDOC ได้เนื่องจากคำสั่งเชลล์นั้นได้รับ HEREDOC สามารถใช้ในไวยากรณ์เวอร์ชันการเปลี่ยนเส้นทาง (โดยไม่มี-Bseตัวเลือก) เนื่องจากการเปลี่ยนเส้นทาง I / O เป็นสิ่งที่ HEREDOC สร้างขึ้น หากคุณต้องการฟังก์ชันของ HEREDOC จะเป็นการดีกว่าถ้าใช้ในการสร้าง.sqlไฟล์แม้ว่าจะเป็นไฟล์ชั่วคราวก็ตามและใช้ไฟล์นั้นเป็น "คำสั่ง" เพื่อดำเนินการกับบรรทัดแบตช์ MySQL

#!/bin/bash
cat >temp.sql <<SQL_STATEMENTS
...
SELECT \`column_name\` FROM \`table_name\` WHERE \`column_name\`='$shell_variable';
...
SQL_STATEMENTS
mysql -u $user -p$password $db_name -Be "SOURCE temp.sql"
rm -f temp.sql

โปรดทราบว่าเนื่องจากการขยายเชลล์คุณสามารถใช้ตัวแปรเชลล์และสภาพแวดล้อมภายใน HEREDOC ลงด้านคือการที่คุณต้องหนีแต่ละคนและทุก backtick MySQL ใช้เป็นตัวคั่นสำหรับตัวระบุ แต่เชลล์ซึ่งได้รับสตริงก่อนใช้เป็นตัวคั่นคำสั่งที่ปฏิบัติการได้ พลาดการหลบหนีด้วยการแบ็คทิคคำสั่ง MySQL เพียงครั้งเดียวและสิ่งทั้งหมดก็ระเบิดด้วยข้อผิดพลาด ปัญหาทั้งหมดสามารถแก้ไขได้โดยใช้ LimitString ที่ยกมาสำหรับ HEREDOC:

#!/bin/bash
cat >temp.sql <<'SQL_STATEMENTS'
...
SELECT `column_name` FROM `table_name` WHERE `column_name`='constant_value';
...
SQL_STATEMENTS
mysql -u $user -p$password $db_name -Be "SOURCE temp.sql"
rm -f temp.sql

การลบส่วนขยายเชลล์ด้วยวิธีนี้จะช่วยลดความจำเป็นในการหลีกเลี่ยงแบ็กติกและอักขระพิเศษเชลล์อื่น ๆ นอกจากนี้ยังลบความสามารถในการใช้ตัวแปรเชลล์และสภาพแวดล้อมภายใน นั่นเป็นการลบประโยชน์ของการใช้ HEREDOC ภายในเชลล์สคริปต์เพื่อเริ่มต้นด้วย

อีกทางเลือกหนึ่งคือการใช้สตริงที่ยกมาหลายบรรทัดที่อนุญาตใน Bash กับเวอร์ชันไวยากรณ์ของแบตช์ (ที่มี-Bse) ฉันไม่รู้จักเปลือกหอยชนิดอื่นดังนั้นฉันจึงไม่สามารถพูดได้ว่ามันทำงานในนั้นด้วยหรือไม่ คุณจะต้องใช้สิ่งนี้สำหรับการเรียกใช้.sqlไฟล์มากกว่าหนึ่งไฟล์ด้วยSOURCEคำสั่งอยู่ดีเนื่องจากคำสั่งนั้นไม่ได้ถูกยกเลิกโดย;คำสั่ง MySQL อื่น ๆ และอนุญาตให้ใช้เพียงหนึ่งไฟล์ต่อบรรทัด สตริงแบบหลายบรรทัดสามารถเป็นได้ทั้งแบบเดี่ยวหรือแบบคู่โดยมีเอฟเฟกต์ปกติในการขยายเชลล์ นอกจากนี้ยังมีข้อแม้เช่นเดียวกับการใช้ไวยากรณ์ของ HEREDOC สำหรับ backticks เป็นต้น

วิธีแก้ปัญหาที่ดีกว่าคือการใช้ภาษาสคริปต์ Perl, Python ฯลฯ เพื่อสร้าง.sqlไฟล์ตามที่ OP ทำและSOURCEไฟล์นั้นโดยใช้ไวยากรณ์คำสั่งง่ายๆที่ด้านบน ภาษาสคริปต์ดีกว่าในการจัดการสตริงมากกว่าเชลล์และส่วนใหญ่มีโพรซีเดอร์ในตัวเพื่อจัดการการอ้างสิทธิ์และการหลบหนีที่จำเป็นเมื่อจัดการกับ MySQL


2

ข้อพิจารณาที่สำคัญสำหรับการเข้าถึง mysql จากเชลล์สคริปต์ที่ใช้ใน cron คือ mysql จะดูผู้ใช้ที่ล็อกอินเพื่อพิจารณาว่าจะโหลด. my.cnf

นั่นใช้ไม่ได้กับ cron นอกจากนี้ยังอาจทำให้เกิดความสับสนหากคุณใช้ su / sudo เนื่องจากผู้ใช้ที่ลงชื่อเข้าใช้อาจไม่ใช่ผู้ใช้ที่คุณใช้งานอยู่

ฉันใช้สิ่งที่ชอบ:

mysql --defaults-extra-file=/path/to/specific/.my.cnf -e 'SELECT something FROM sometable'

เพียงตรวจสอบให้แน่ใจว่าได้ตั้งค่าความเป็นเจ้าของและสิทธิ์ของผู้ใช้และกลุ่มอย่างเหมาะสมและแน่นหนาในไฟล์. my.cnf


1
#!/bin/sh
#Procedures = update
#Scheduled at : Every 00.05 

v_path=/etc/database_jobs
v_cnt=0

MAILTO="indd@abc.in joanson@abc.in sturt@abc.in"
touch "$v_path/db_db_log.log"

#test
mysql -uusername -ppassword -h111.111.111.111 db_name -e "CALL functionName()" > $v_path/db_db_log.log 2>&1
if [ "$?" -eq 0 ]
  then
   v_cnt=`expr $v_cnt + 1`
  mail -s "db Attendance Update has been run successfully" $MAILTO < $v_path/db_db_log.log
 else
   mail -s "Alert : db Attendance Update has been failed" $MAILTO < $v_path/db_db_log.log
   exit
fi

0
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

ฉันจะรันบรรทัดคำสั่งด้วยรหัสผ่านที่ปลอดภัยได้อย่างไร? ใช้ config editor !!!

ใน mysql 5.6.6 คุณสามารถเก็บรหัสผ่านไว้ในไฟล์ config จากนั้นรันคำสั่ง cli เช่นนี้ ...

mysql --login-path=storedPasswordKey ....

--login-path แทนที่ตัวแปร ... โฮสต์ผู้ใช้และรหัสผ่าน ดีเลิศ!



0

ฉันได้เขียนเชลล์สคริปต์ซึ่งจะอ่านข้อมูลจากไฟล์คุณสมบัติจากนั้นเรียกใช้สคริปต์ mysql บนเชลล์สคริปต์ การแบ่งปันสิ่งนี้อาจช่วยผู้อื่นได้

#!/bin/bash
    PROPERTY_FILE=filename.properties

    function getProperty {
       PROP_KEY=$1
       PROP_VALUE=`cat $PROPERTY_FILE | grep "$PROP_KEY" | cut -d'=' -f2`
       echo $PROP_VALUE
    }

    echo "# Reading property from $PROPERTY_FILE"
    DB_USER=$(getProperty "db.username")
    DB_PASS=$(getProperty "db.password")
    ROOT_LOC=$(getProperty "root.location")
    echo $DB_USER
    echo $DB_PASS
    echo $ROOT_LOC
    echo "Writing on DB ... "
    mysql -u$DB_USER -p$DB_PASS dbname<<EOFMYSQL

    update tablename set tablename.value_ = "$ROOT_LOC" where tablename.name_="Root directory location";
    EOFMYSQL
    echo "Writing root location($ROOT_LOC) is done ... "
    counter=`mysql -u${DB_USER} -p${DB_PASS} dbname -e "select count(*) from tablename where tablename.name_='Root directory location' and tablename.value_ = '$ROOT_LOC';" | grep -v "count"`;

    if [ "$counter" = "1" ]
    then
    echo "ROOT location updated"
    fi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.