à¹à¸§à¸à¹à¸²à¸à¸±à¸ à¸à¸à¸±à¸à¸à¸´à¹à¸¨à¸©
สารบัญ:
- ตรวจสอบว่ามีไฟล์อยู่หรือไม่
- ตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่
- ตรวจสอบว่าไฟล์ไม่มีอยู่
- ตรวจสอบว่ามีหลายไฟล์อยู่หรือไม่
- ผู้ประกอบการทดสอบไฟล์
- ข้อสรุป
หลายครั้งที่คุณเขียนสคริปต์เชลล์คุณอาจพบว่าตัวเองต้องตกอยู่ในสถานการณ์ที่ต้องดำเนินการโดยพิจารณาจากไฟล์ที่มีอยู่หรือไม่
ใน Bash คุณสามารถใช้คำสั่ง test เพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่และกำหนดประเภทของไฟล์
คำสั่งทดสอบใช้หนึ่งในรูปแบบไวยากรณ์ต่อไปนี้:
ตรวจสอบว่ามีไฟล์อยู่หรือไม่
เมื่อตรวจสอบว่ามีไฟล์อยู่ตัวดำเนินการ FILE ที่ใช้บ่อยที่สุดคือ
-e
และ
-f
คนแรกจะตรวจสอบว่าไฟล์ที่มีอยู่โดยไม่คำนึงถึงประเภทในขณะที่คนที่สองจะกลับมาจริงถ้าไฟล์เป็นไฟล์ปกติ (ไม่ใช่ไดเรกทอรีหรืออุปกรณ์)
ตัวเลือกที่อ่านได้มากที่สุดเมื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่คือใช้คำสั่งทดสอบร่วมกับคำสั่ง if ตัวอย่างด้านล่างใด ๆ จะตรวจสอบว่ามีไฟล์
/etc/resolv.conf
อยู่หรือไม่:
FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if; then echo "$FILE exist" fi
FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi
ถ้าคุณต้องการที่จะทำการกระทำที่แตกต่างกันขึ้นอยู่กับว่าไฟล์นั้นมีอยู่หรือไม่เพียงแค่ใช้ if / แล้วสร้าง:
FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi
ใช้เครื่องหมายคำพูดคู่เพื่อหลีกเลี่ยงปัญหาเมื่อจัดการกับไฟล์ที่มีช่องว่างในชื่อของพวกเขา
คุณยังสามารถใช้คำสั่งทดสอบโดยไม่มีคำสั่ง if คำสั่งหลังจากผู้ประกอบการ
&&
จะถูกดำเนินการหากสถานะทางออกของคำสั่งทดสอบเป็นจริง
test -f /etc/resolv.conf && echo "$FILE exist"
&& echo "$FILE exist"
] && echo "$FILE exist"
&& { echo "$FILE exist"; cp "$FILE" /tmp/; }
ตรงข้ามกับ
&&
คำสั่งหลัง
||
ผู้ประกอบการจะได้รับการดำเนินการหากสถานะทางออกของคำสั่งทดสอบเป็น
false
&& echo "$FILE exist" || echo "$FILE does not exist"
ตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่
ตัวดำเนินการ
-d
อนุญาตให้คุณทดสอบว่าไฟล์เป็นไดเรกทอรีหรือไม่
ตัวอย่างเช่นเพื่อตรวจสอบว่ามีไดเร็กทอรี
/etc/docker
อยู่หรือไม่:
FILE=/etc/docker if; then echo "$FILE is a directory" fi
&& echo "$FILE is a directory"
คุณยังสามารถใช้วงเล็บสองตัว
, 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));
ตรวจสอบว่าไฟล์ไม่มีอยู่
คล้ายกับภาษาอื่น ๆ อีกมากมายนิพจน์ทดสอบสามารถลบล้างได้ด้วยการใช้
!
(เครื่องหมายอัศเจรีย์) ตัวดำเนินการที่ไม่ใช่ตรรกะ:
FILE=/etc/docker if; then echo "$FILE does not exist" fi
เหมือนด้านบน:
&& echo "$FILE does not exist"
ตรวจสอบว่ามีหลายไฟล์อยู่หรือไม่
แทนที่จะใช้การซ้อนกันที่ซับซ้อนหาก / else สร้างคุณสามารถใช้
-a
(หรือ
&&
ด้วย
; then echo "$FILE is a directory" fi
FILE=/etc/docker if; then echo "$FILE is a directory" fi
ชุดตัวเลือกที่เทียบเท่ากันโดยไม่ใช้คำสั่ง IF:
&& echo "both files exist"
ผู้ประกอบการทดสอบไฟล์
คำสั่งทดสอบมีตัวดำเนินการ FILE ต่อไปนี้ที่ให้คุณทดสอบไฟล์บางประเภท:
-
-b
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไฟล์พิเศษของบล็อก-c
FILE
- เป็นจริงถ้าไฟล์นั้นมีอยู่และเป็นไฟล์อักขระพิเศษ-d
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไดเรกทอรี-e
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไฟล์โดยไม่คำนึงถึงประเภท (โหนด, ไดเรกทอรี, ซ็อกเก็ต ฯลฯ)-f
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นไฟล์ปกติ (ไม่ใช่ไดเรกทอรีหรืออุปกรณ์)-G
FILE
- จริงถ้าไฟล์นั้นมีอยู่และมีกลุ่มเดียวกันกับผู้ใช้ที่รันคำสั่ง-h
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นลิงก์สัญลักษณ์-g
FILE
- เป็นจริงถ้าไฟล์นั้นมีอยู่และมีชุดแฟล็ก set-group-id (sgid)-k
FILE
- จริงถ้าไฟล์นั้นมีอยู่และมีการตั้งค่าสถานะบิตเหนียว-L
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นลิงค์สัญลักษณ์-O
FILE
- เป็นจริงถ้าไฟล์นั้นมีอยู่และเป็นของผู้ใช้ที่รันคำสั่ง-p
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเป็นท่อ-r
FILE
- จริงถ้าไฟล์นั้นมีอยู่และสามารถอ่านได้-S
FILE
- จริงถ้าไฟล์ที่มีอยู่และเป็นซ็อกเก็ต-s
FILE
- จริงถ้าไฟล์นั้นมีอยู่และมีขนาดที่ไม่ใช่ศูนย์-u
FILE
- จริงถ้ามีการตั้งค่าสถานะและ set-user-id (suid)-w
FILE
- จริงถ้าไฟล์นั้นมีอยู่และเขียนได้-x
FILE
- จริงถ้าไฟล์นั้นมีอยู่และสามารถใช้งานได้
ข้อสรุป
ในคู่มือนี้เราได้แสดงวิธีการตรวจสอบว่าไฟล์หรือไดเรกทอรีที่มีอยู่โดยใช้ Bash
bash terminal