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

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

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

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

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

answer

มีสองวิธี

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

#!/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สำหรับข้อมูลเพิ่มเติม

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

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

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

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

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

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

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

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

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

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

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

  • ความคิดเห็นเริ่มต้นด้วย#ไม่ใช่rem.

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