Android

วิธีการตรวจสอบว่าไฟล์หรือไดเรกทอรีอยู่ในทุบตี

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

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

ใน Bash คุณสามารถใช้คำสั่ง test เพื่อตรวจสอบว่ามีไฟล์อยู่หรือไม่และกำหนดประเภทของไฟล์

คำสั่งทดสอบใช้หนึ่งในรูปแบบไวยากรณ์ต่อไปนี้:

test EXPRESSION]

ตรวจสอบว่ามีไฟล์อยู่หรือไม่

เมื่อตรวจสอบว่ามีไฟล์อยู่ตัวดำเนินการ 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"

] && 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