ฉันสงสัยว่าฉันจะใช้หลายคำสั่งผ่าน shell script ได้อย่างไร
ตัวอย่างเช่นเพียงลองใช้ฉันต้องการเชื่อมต่อ .desktop กับ. sh ที่จะเรียกใช้รหัสอัปเดตทั้งหมดดังนั้นฉันจึงไม่ต้องพิมพ์ออกมา ฉันรู้วิธีรันคำสั่งเดียวผ่าน. sh ไม่ใช่หลายคำสั่ง
อย่างไรก็ตาม?
ฉันสงสัยว่าฉันจะใช้หลายคำสั่งผ่าน shell script ได้อย่างไร
ตัวอย่างเช่นเพียงลองใช้ฉันต้องการเชื่อมต่อ .desktop กับ. sh ที่จะเรียกใช้รหัสอัปเดตทั้งหมดดังนั้นฉันจึงไม่ต้องพิมพ์ออกมา ฉันรู้วิธีรันคำสั่งเดียวผ่าน. sh ไม่ใช่หลายคำสั่ง
อย่างไรก็ตาม?
คำตอบ:
ง่ายมาก - คุณต้องแยกคำสั่ง เช่นนี้
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade
จะอัปเดตรายการแพคเกจแล้วแพ็คเกจ ความเป็นไปได้อีกอย่างคือสิ่งนี้(น่าจะดีกว่าเนื่องจาก && จะอนุญาตเฉพาะupgradeคำสั่งให้ทำงานหากการupdateออกสำเร็จ) :
#!/bin/bash
sudo apt-get update && sudo apt-get upgrade
สิ่งนี้ควรรันคำสั่งเพื่ออัพเดตรายการแพ็กเกจจากนั้นแพ็กเกจเอง จะต้องมีการบันทึกลงในไฟล์ข้อความ (เช่นupdatescriptในโฮมไดเร็กตอรี่) จากนั้นคุณสามารถทำให้มันใช้งานได้โดยการเรียกใช้:
chmod +x ./updatescript
หรือโดยการคลิกขวาที่ไฟล์และทำให้มันสามารถทำงานได้ในคุณสมบัติ:

และรันด้วยสิ่งนี้ในเทอร์มินัล:
./updatescript
หมายเหตุ (s):
มีตัวเลือก ( -y) พร้อมใช้งานที่สามารถใช้กับupgradeคำสั่งได้ดังนั้นจึงไม่แสดงพร้อมท์ก่อนอัพเกรดแพ็คเกจ เป็นความคิดที่ดีที่จะตรวจสอบสิ่งที่apt-getกำลังทำอยู่ก่อนที่จะทำการอัพเกรดแพ็คเกจเนื่องจากอาจ / จะทำบางสิ่งที่โง่หรือสิ่งที่คุณไม่ต้องการ man apt-getข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกเช่นนี้สามารถพบได้โดยการทำงาน
นอกจากนี้ยังหมายความว่าเป็นการดียิ่งกว่าที่จะใช้เทอร์มินัลเพื่อเรียกใช้สคริปต์เนื่องจากคุณสามารถตรวจสอบสิ่งที่กำลังอัปเดตแล้วเรียกใช้ หากคุณต้องการวิธี GUI ในการเรียกใช้การอัปเดตให้ใช้ศูนย์ซอฟต์แวร์ตามที่เป็นอยู่
เพียงเพิ่มคะแนนไปยังคำตอบที่ดีเยี่ยมโดย @Wilf
คุณสามารถรันคำสั่งเป็นแบบ Paralell ได้หากคุณต้องการด้วยเหตุผลใดก็ตามตัวอย่างเช่นautostartสคริปต์สำหรับ OpenBox อาจมีลักษณะเช่นนี้:
#!/bin/bash
nitrogen --restore &
tint2 &
tilda
สิ่งนี้จะตั้งค่าภาพพื้นหลังโดยใช้nitrogenเริ่มแผงควบคุมtint2และเริ่มคอนโซลดร็อปดาวน์สไตล์ Quake3 tildaทั้งหมดพร้อมกัน สิ่งนี้มีประโยชน์หากคุณไม่ต้องการให้โปรแกรมเสร็จสิ้นก่อนที่จะเรียกใช้งานโปรแกรมถัดไป ไม่ใช่กรณีapt-get updateและapt-get upgradeแม้ว่า!
สังเกตุ&เครื่องหมายที่ท้ายแต่ละบรรทัด สิ่งนี้จะทำให้เชลล์แยกกระบวนการนั้นเป็นพื้นหลังและดำเนินการต่อ สังเกตว่ามันแตกต่างจาก&&ซึ่งเป็นandสัญญาณโดยทั่วไปcommand_1 && command_2จะดำเนินการcommand_1และถ้าออกจากความสำเร็จเพียงแค่เรียกใช้แล้วcommand_2ในขณะที่command_1 & command_2จะเริ่มต้นที่สองทันทีหลังจากครั้งแรก
นอกจากนี้คุณยังสามารถสแต็กคำสั่งเพื่อให้พวกเขาดำเนินการตามลำดับเช่น:
#!/bin/bash
apt-get update
apt-get upgrade
นี้จะทำงานapt-get upgradeหลังจากที่apt-get updateมีการดำเนินการเสร็จสิ้นแต่ไม่คำนึงถึงผลที่ตามมา ดังนั้นแม้ว่าการอัปเดตจะจบลงด้วยข้อผิดพลาดของเครือข่ายการอัปเกรดจะยังคงทำงานอยู่
นอกจากนี้คุณยังสามารถทำเช่นนี้ในหนึ่งบรรทัดโดยใช้เครื่องหมาย:; apt-get update ; apt-get upgradeอีกครั้งโซลูชันนี้ไม่เหมาะสำหรับคำสั่งเฉพาะเหล่านี้ แต่อาจมีประโยชน์ในสถานการณ์อื่น ๆ
หนึ่งจุดสุดท้ายอย่างรวดเร็วคุณยังสามารถแยกบรรทัดที่มี&&เช่น:
command_1 &&
command_2
command_1 && command_2นี้จะเป็นเช่นเดียวกับ