Shell Scripting - Introduction & Shebang
สารบัญ:
ลำดับของอักขระ (
#!
) นี้เรียกว่า shebang และใช้เพื่อบอกระบบปฏิบัติการว่าตัวแปลใดที่จะใช้ในการแยกวิเคราะห์ส่วนที่เหลือของไฟล์
Shebang Interpreter Directive
คำสั่งล่าม Shebang ใช้แบบฟอร์มต่อไปนี้:
#!interpreter
- คำสั่งจะต้องเป็นบรรทัดแรกในสคริปต์คำสั่งจะต้องเริ่มต้นด้วย shebang
#!
พื้นที่สีขาวหลังจากอักขระ shebang เป็นทางเลือกตัวแปลภาษาเป็นพา ธ แบบเต็มไปยังไฟล์ไบนารี (เช่น:/bin/sh
/bin/bash
) อาร์กิวเมนต์ตัวเลือกเหล่านี้เป็นตัวเลือก
ตัวอย่าง:
-
#!/bin/bash
- ใช้bash
เพื่อวิเคราะห์ไฟล์#!/usr/bin/env perl
- ใช้คำสั่งenv
เพื่อค้นหาพา ธ ไปยัง executableperl
#!/usr/bin/python
ดำเนินการไฟล์โดยใช้python
ธ อน
ใช้ Shebang ใน Bash Scripts
หากไม่ได้ระบุ Shebang และผู้ใช้ที่กำลังเรียกใช้สคริปต์ Bash กำลังใช้เชลล์ตัวอื่นสคริปต์จะถูกแยกวิเคราะห์โดยค่าเริ่มต้นที่เชลล์ใช้ ตัวอย่างเช่นตัวแปลดีฟอลต์สำหรับ
bash
คือ
bash
และสำหรับ
zsh
คือ
sh
เพื่อให้แน่ใจว่าสคริปต์ของคุณจะถูกตีความด้วย Bash คุณจะต้องระบุเส้นทางที่ใช้งานได้โดยใช้ shebang
มีสองวิธีในการใช้คำสั่ง Shebang และตั้งล่าม
-
การใช้พา ธ สัมบูรณ์ไปยังไบนารี bash:
#!/bin/bash
การใช้ยูทิลิตี
env
:#!/usr/bin/env bash
ข้อดีของการใช้วิธีที่สองคือมันจะค้นหา
bash
executable ในตัวแปรสภาพแวดล้อม
$PATH
ของผู้ใช้ หากมีมากกว่าหนึ่งเส้นทางในการ
bash
เส้นทางแรกจะถูกใช้โดยสคริปต์
เมื่อใช้ตัวเลือกแรกเพื่อเพิ่มตัวเลือกในการส่งเชลล์ Bash ให้กับล่าม ตัวอย่างเช่นหากต้องการรันสคริปต์ในโหมดแก้ไขข้อบกพร่องคุณต้องใช้
#!/bin/bash -x
หากคุณใช้วิธี
env
คุณต้องใช้
set
เพื่อประกาศตัวเลือก หากต้องการเปิดใช้งานโหมดแก้ไขข้อบกพร่องคุณจะต้องเพิ่ม
set -x
หลังบรรทัด shebang
ตัวอย่างสคริปต์
มาสร้างสคริปต์ง่ายๆโดยใช้ shebang ที่จะพิมพ์“ Hello, World” เปิดโปรแกรมแก้ไขข้อความของคุณและวางบรรทัดต่อไปนี้:
nano hello_world
สวัสดีชาวโลก
#!/bin/bash echo "Hello, World"
เพื่อให้สามารถเรียกใช้สคริปต์โดยไม่ต้องระบุล่ามจากบรรทัดคำสั่งคุณจะต้องทำให้ไฟล์ปฏิบัติการ:
chmod +x hello_world
ตอนนี้ถ้าคุณสามารถเรียกใช้สคริปต์โดยพิมพ์
./
ตามด้วยชื่อสคริปต์:
./hello_world
การเอาชนะ Shebang
หากมีเหตุผลบางอย่างที่คุณต้องการแทนที่ชุดล่ามในบรรทัด Shebang คุณจำเป็นต้องเรียกใช้สคริปต์โดยระบุเชลล์ที่ต้องการอย่างชัดเจน
ตัวอย่างเช่นการเรียกใช้สคริปต์ที่มีการระบุ
#!/bin/sh
ในบรรทัด Shebang โดยใช้
bash
shell ที่คุณพิมพ์:
bash hello_world
โปรดทราบว่าไม่ใช่ความคิดที่ดีที่จะแทนที่ตัวแปลเชลล์เนื่องจากอาจนำไปสู่พฤติกรรมที่ไม่คาดคิดของสคริปต์
ข้อสรุป
ตอนนี้คุณควรมีความเข้าใจที่ดีเกี่ยวกับ Shebang คืออะไรและจะใช้งานอย่างไรในสคริปต์ Bash ของคุณ
bash terminalทุบตี heredoc

เมื่อเขียนเชลล์สคริปต์คุณอาจอยู่ในสถานการณ์ที่คุณต้องส่งหลายบรรทัดของข้อความหรือรหัสไปยังคำสั่งแบบโต้ตอบ ใน Bash และเชลล์อื่น ๆ เช่น Zsh a Here document (Heredoc) เป็นประเภทของการเปลี่ยนเส้นทางที่ให้คุณส่งผ่านอินพุตหลายบรรทัดไปยังคำสั่ง