คุณไม่ได้พูดถึงว่าคุณวางแผนที่จะใช้เชลล์อย่างไรดังนั้นฉันจะถือว่าทุบตีแม้ว่าสิ่งเหล่านี้จะเป็นมาตรฐานธรรมดาในทุกเชลล์
อาร์กิวเมนต์ไฟล์
อาร์กิวเมนต์สามารถเข้าถึงได้ผ่านตัวแปร$1
- $n
( $0
ส่งคืนคำสั่งที่ใช้เพื่อรันโปรแกรม) ว่าฉันมีสคริปต์ที่เพิ่งcat
ออกจำนวนไฟล์ที่มีตัวคั่นระหว่างพวกเขา:
#!/usr/bin/env bash
#
# Parameters:
# 1: string delimiter between arguments 2-n
# 2-n: file(s) to cat out
for arg in ${@:2} # $@ is the array of arguments, ${@:2} slices it starting at 2.
do
cat $arg
echo $1
done
ในกรณีนี้เรากำลังส่งชื่อไฟล์ให้ cat อย่างไรก็ตามหากคุณต้องการแปลงข้อมูลในไฟล์ (โดยไม่ต้องเขียนและเขียนใหม่อย่างชัดเจน) คุณสามารถจัดเก็บเนื้อหาไฟล์ในตัวแปร:
file_contents=$(cat $filename)
[...do some stuff...]
echo $file_contents >> $new_filename
อ่านจาก stdin
เท่าที่อ่านจาก stdin เชลล์ส่วนใหญ่มีread
builtin มาตรฐานที่สวยงามแม้ว่าจะมีความแตกต่างในวิธีการระบุพรอมต์ (อย่างน้อยที่สุด)
ทุบตี builtins หน้าคนมีคำอธิบายที่กระชับสวยread
แต่ฉันชอบทุบตีแฮกเกอร์หน้า
เพียง:
read var_name
หลายตัวแปร
หากต้องการตั้งค่าตัวแปรหลายตัวเพียงระบุชื่อพารามิเตอร์หลายตัวเป็นread
:
read var1 var2 var3
read
จากนั้นจะวางคำหนึ่งคำจาก stdin ลงในแต่ละตัวแปรทิ้งคำที่เหลือทั้งหมดลงในตัวแปรสุดท้าย
λ read var1 var2 var3
thing1 thing2 thing3 thing4 thing5
λ echo $var1; echo $var2; echo $var3
thing1
thing2
thing3 thing4 thing5
หากป้อนคำน้อยกว่าตัวแปรตัวแปรที่เหลือจะว่างเปล่า (แม้ว่าจะตั้งไว้ก่อนหน้านี้):
λ read var1 var2 var3
thing1 thing2
λ echo $var1; echo $var2; echo $var3
thing1
thing2
# Empty line
แจ้ง
ฉันใช้การ-p
ตั้งค่าสถานะบ่อยครั้งเพื่อแจ้งให้:
read -p "Enter filename: " filename
หมายเหตุ: ZSH และ KSH (และอื่น ๆ ) ใช้ไวยากรณ์ที่แตกต่างกันสำหรับการแจ้งเตือน:
read "filename?Enter filename: " # Everything following the '?' is the prompt
ค่าเริ่มต้น
นี้ไม่ได้จริงๆread
เคล็ดลับ read
แต่ฉันจะใช้มันมากร่วมกับ ตัวอย่างเช่น:
read -p "Y/[N]: " reply
reply=${reply:-N}
โดยทั่วไปหากตัวแปร (ตอบกลับ) มีอยู่ให้ส่งคืนตัวเอง แต่ถ้าว่างเปล่าให้ส่งคืนพารามิเตอร์ต่อไปนี้ ("N")