การรัน. sh เพื่อเรียกใช้งานหลายคำสั่ง


9

ฉันสงสัยว่าฉันจะใช้หลายคำสั่งผ่าน shell script ได้อย่างไร

ตัวอย่างเช่นเพียงลองใช้ฉันต้องการเชื่อมต่อ .desktop กับ. sh ที่จะเรียกใช้รหัสอัปเดตทั้งหมดดังนั้นฉันจึงไม่ต้องพิมพ์ออกมา ฉันรู้วิธีรันคำสั่งเดียวผ่าน. sh ไม่ใช่หลายคำสั่ง

อย่างไรก็ตาม?

คำตอบ:


10

ง่ายมาก - คุณต้องแยกคำสั่ง เช่นนี้

#!/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 ในการเรียกใช้การอัปเดตให้ใช้ศูนย์ซอฟต์แวร์ตามที่เป็นอยู่


5

เพียงเพิ่มคะแนนไปยังคำตอบที่ดีเยี่ยมโดย @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นี้จะเป็นเช่นเดียวกับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.