ฉันจะสร้างไฟล์สคริปต์สำหรับคำสั่งเทอร์มินัลได้อย่างไร


114

ใน Windows ฉันสามารถเขียนไฟล์ที่มีคำสั่งสำหรับ cmd (โดยปกติ.cmdหรือ.batไฟล์) เมื่อฉันคลิกไฟล์เหล่านั้นมันจะเปิดขึ้นมาcmd.exeและรันคำสั่งที่ไฟล์นั้นบรรจุ

ฉันจะทำสิ่งนี้ใน Ubuntu ได้อย่างไร

ฉันแน่ใจว่านี่เป็นสิ่งที่ซ้ำกัน แต่ฉันไม่พบคำตอบของฉัน
มันคล้ายกับคำถามเหล่านี้ แต่พวกเขาไม่ตอบคำถาม:

เก็บคำสั่งเทอร์มินัลที่ใช้บ่อยในไฟล์

CMD.exe Emulator ใน Ubuntu เพื่อเรียกใช้ไฟล์. cmd / .bat

คำตอบ:


150

มีสองวิธี

ก่อนอื่นที่พบมากที่สุดคือการเขียนไฟล์ตรวจสอบให้แน่ใจว่าบรรทัดแรกคือ

#!/bin/bash

จากนั้นบันทึกไฟล์ ทำเครื่องหมายถัดไปว่าปฏิบัติการได้โดยใช้chmod +x file

จากนั้นเมื่อคุณคลิก (หรือเรียกใช้ไฟล์จากเทอร์มินัล) คำสั่งจะถูกดำเนินการ โดยทั่วไปแล้วไฟล์เหล่านี้จะไม่มีนามสกุลอย่างไรก็ตามคุณสามารถทำให้มันสิ้นสุด.shหรือด้วยวิธีอื่นได้

หมายเหตุเล็กน้อย:

  • ไฟล์ใด ๆ (และฉันหมายถึงใด ๆ ) สามารถดำเนินการใน Linux โดยที่บรรทัดแรกคือเส้นทางไปยังโปรแกรมที่ควรตีความไฟล์ ตัวอย่างที่พบบ่อย ได้แก่/bin/python, /bin/sh, /bin/dashแต่แม้สิ่งที่ลูกแปลกทำงานเช่น/bin/mysql
  • Bash เป็นภาษาเต็ม มันซับซ้อนกว่า cmd.exe ใน windows อย่างมากมาย มันมีภาษาการเขียนโปรแกรมที่แข็งแกร่งที่รองรับฟังก์ชั่น, ลูป, เงื่อนไขการดำเนินงานสตริง ฯลฯ
  • เอกสารเหล่านี้อาจช่วยได้หากคุณประสบปัญหา
  • หากคุณไม่ต้องการให้ไฟล์ที่ปฏิบัติการนั้นคุณสามารถเรียกใช้โดยผ่านมันเป็นอาร์กิวเมนต์เพื่อทุบตี: bash file/to/run.sh

ตัวอย่างทุบตีง่าย

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

scriptวิธีที่สองคือคำสั่งบันทึกโดยใช้ เรียกใช้scriptแล้วทำสิ่งต่างๆ เมื่อคุณทำสิ่งประเภทexitและสคริปต์จะสร้างไฟล์สำหรับคุณกับ "สิ่ง" ทั้งหมดที่คุณทำ มันใช้น้อยกว่า แต่ใช้งานได้ดีในการทำสิ่งต่าง ๆ เช่นมาโคร man scriptสำหรับข้อมูลเพิ่มเติม


คุณอาจต้องการการเปลี่ยนแปลงที่/bin/bashจะ/bin/shทุบตีไม่ได้เริ่มต้นสำหรับอูบุนตู
TC1

@ TC1 ถูกติดตั้งตามค่าเริ่มต้นดังนั้นจึงไม่สำคัญว่าจะเป็นค่าเริ่มต้นหรือไม่
Carlos Campderrós

1
ฉันต้องการชี้ให้เห็นว่า/bin/dash(ซึ่ง/bin/shมักจะเชื่อมโยงไปถึง) นั้นเร็วกว่าทุบตีมาก (ฉันวัดได้เร็วขึ้นประมาณ 15 เท่า) ถ้าเป็นไปได้ทั้งหมดใช้/bin/dashสำหรับเชลล์สคริปต์ :)
MiJyn

4
หากคุณอยู่ในโฟลเดอร์เดียวกันกับไฟล์ตรวจสอบให้แน่ใจว่า. /file.sh
coteyr

1
ฉันลองทั้งสองวิธีแล้ว แต่ถ้าฉันพยายามดับเบิ้ลคลิกไฟล์ bash script มันแค่เปิดไฟล์ข้อความใน geany / gedit พร้อมสำหรับการแก้ไข ฉันต้องการให้สคริปต์ทำงานเมื่อดับเบิลคลิก คำถามนี้เก็บรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่ฉันต้องการจะทำ
thymaro

15

คุณหมายถึงการเขียนไฟล์โดยใช้เชลล์สคริปต์หรือไม่? นี่คือบางวิธี:

touch file

เมธอดนี้จะสร้างไฟล์ แต่ถ้าไฟล์มีอยู่แล้วมันจะเปลี่ยนวันที่แก้ไขเป็นเวลาที่คุณใช้คำสั่งนั้น

echo "text" > file

วิธีการที่จะเขียนทับเนื้อหาของการfile textหากคุณต้องการล้างไฟล์คุณสามารถทำได้ดังนี้:

echo "" > file

สมมติว่าคุณต้องการเขียนมากกว่าหนึ่งบรรทัดและคุณไม่ต้องการใช้echoคำสั่งหลายพันคำคุณจะใช้คำสั่งนี้:

cat << EOF > file
test
test1
foo
bar
EOF

ที่ช่วยให้คุณเขียนหลายบรรทัดในหนึ่งคำสั่ง เนื้อหาของfileสิ่งนี้จะเป็น:

test
test1
foo
bar

หากคุณต้องการที่จะผนวกกับไฟล์ที่เปลี่ยนไป>>>

หวังว่านี่จะช่วยได้!


แก้ไข : โอ้ฉันเข้าใจแล้วคุณจะเขียนไฟล์เป็น gedit โดยใช้.shนามสกุล (เป็นทางเลือก แต่เป็นความคิดที่ดี) จากนั้นในตัวจัดการไฟล์คลิกขวาที่ไฟล์เลือก Properties-> Permissions และตรวจสอบAllow executing file as program. จากนั้นคุณสามารถคลิกสองครั้งที่มันและมันจะทำงาน :) นอกจากนี้หากคุณต้องการทำเช่นนั้นในเทอร์มินัลคุณสามารถเรียกใช้คำสั่งนี้เพื่อให้สามารถเรียกใช้งานได้ (คุณอาจต้องการผนวกsudoถ้ามันไม่ได้เป็นของคุณ):

chmod +x file

และเพื่อให้ทำงาน:

./file

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

คำตอบที่ดีการปรับปรุงที่นึกถึง ในการสร้างไฟล์เพียงแค่ฉันใช้เสมอtouch filename
TryTryAgain

@TryTryAgain echo "" > fileครับว่าเป็นวิธีการที่ง่ายอาจจะเร็วกว่า ตกลงหรือไม่ถ้าฉันรวมวิธีการนั้นไว้ในคำตอบ?
มิจิน

@MiJyn รวมไว้อย่างแน่นอนรู้สึกฟรี ขอบคุณ
TryTryAgain

ฉันจะทำให้มันรันที่ใดในเทอร์มินัล ... เหมือนคำสั่งโกลบอล?
Omer

14

เทียบเท่ากับไฟล์ชุด Windows เป็นเชลล์สคริปต์และดีคู่มือการเริ่มต้นเป็นทุบตีการเขียนสคริปต์

ส่วนใหญ่คำสั่งที่คุณสามารถป้อนในบรรทัดคำสั่งสามารถวางไว้ในเชลล์สคริปต์

สองสิ่งที่แตกต่างจากชุดไฟล์ Windows:

  • มีตัวแปลคำสั่งต่าง ๆ ที่เรียกว่าเชลล์ ค่าเริ่มต้นคือทุบตี แต่ถ้าคุณสนใจมีคนอื่น ๆ เช่น zsh, ksh, ประ, perl, หลาม, ฯลฯ

  • ในการรันเชลล์สคริปต์คุณต้องทำให้ไฟล์นั้นทำงานได้ซึ่งคุณสามารถทำได้ chmod +x <filename>

  • ใน Ubuntu ไดเรกทอรีปัจจุบันไม่ใช่เส้นทางการค้นหาของโปรแกรมดังนั้นคุณต้องเรียกใช้./<filename>ไม่ใช่<filename>

  • ชื่อตัวแปร$<varname>ไม่ใช่%<varname>%

  • คำสั่งในเชลล์สคริปต์จะไม่ถูกพิมพ์ตามค่าเริ่มต้นเช่นเดียวกับในไฟล์แบตช์

  • นามสกุลของชื่อไฟล์อาจเป็น.shหรือ (เป็นจารีตเพิ่มเติม) ที่คุณไม่จำเป็นต้องใช้ส่วนขยาย ใส่#!/bin/bashบรรทัดแรกของไฟล์ซึ่งบอก Ubuntu ว่าจะใช้โปรแกรมใดเพื่อเรียกใช้ไฟล์

  • ความคิดเห็นที่เริ่มต้นด้วยไม่ได้#rem

หวังว่าสิ่งนี้จะช่วยและมีความสนุกสนานในการเขียนสคริปต์!

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