<ก่อนหน้านี้ | Contents | ถัดไป>
นิพจน์ไฟล์
นิพจน์ต่อไปนี้ใช้เพื่อประเมินสถานะของไฟล์:
ตาราง 27-1: ทดสอบนิพจน์ไฟล์
นิพจน์เป็นจริงถ้า:
นิพจน์เป็นจริงถ้า:
file1 -เอฟ file2 file1 และ file2 มีหมายเลขไอโหนดเหมือนกัน (สอง
ชื่อไฟล์อ้างอิงถึงไฟล์เดียวกันโดยฮาร์ดลิงก์)
file1 -nt file2 file1 ใหม่กว่า file2
file1 -อต file2 file1 เก่ากว่า file2
-b ไฟล์ ไฟล์ มีอยู่และเป็นไฟล์บล็อกพิเศษ (อุปกรณ์)
-c ไฟล์ ไฟล์ มีอยู่และเป็นไฟล์อักขระพิเศษ (อุปกรณ์)
-d ไฟล์ ไฟล์ มีอยู่และเป็นไดเร็กทอรี
-e ไฟล์ ไฟล์ ที่มีอยู่
-f ไฟล์ ไฟล์ มีอยู่และเป็นไฟล์ปกติ
-g ไฟล์ ไฟล์ มีอยู่และเป็น set-group-ID
-G ไฟล์ ไฟล์ มีอยู่และเป็นเจ้าของโดย ID กลุ่มที่มีประสิทธิภาพ
-k ไฟล์ ไฟล์ มีอยู่และมีชุด "เหนียว"
-L ไฟล์ ไฟล์ มีอยู่และเป็นลิงค์สัญลักษณ์
-O ไฟล์ ไฟล์ มีอยู่และเป็นเจ้าของโดย ID ผู้ใช้ที่มีประสิทธิภาพ
-p ไฟล์ ไฟล์ มีอยู่และเป็นไปป์ที่มีชื่อ
-r ไฟล์ ไฟล์ มีอยู่และสามารถอ่านได้ (มีสิทธิ์อ่านได้สำหรับผู้ใช้ที่มีประสิทธิภาพ)
-s ไฟล์ ไฟล์ มีอยู่และมีความยาวมากกว่าศูนย์
-S ไฟล์ ไฟล์ มีอยู่และเป็นซ็อกเก็ตเครือข่าย
-t fd fd เป็นตัวอธิบายไฟล์ที่ส่งไปยัง/จากเทอร์มินัล สามารถใช้เพื่อกำหนดว่าอินพุต/เอาต์พุต/ข้อผิดพลาดมาตรฐานกำลังถูกเปลี่ยนเส้นทางหรือไม่
-u ไฟล์ ไฟล์ มีอยู่และเป็น setuid
-w ไฟล์ ไฟล์ มีอยู่และสามารถเขียนได้ (มีสิทธิ์เขียนสำหรับผู้ใช้ที่มีประสิทธิภาพ)
-x ไฟล์ ไฟล์ มีอยู่และสามารถเรียกใช้งานได้ (มีสิทธิ์ดำเนินการ/ค้นหาสำหรับผู้ใช้ที่มีประสิทธิภาพ)
เรามีสคริปต์ที่แสดงนิพจน์ไฟล์บางส่วน:
#! / bin / ทุบตี
# ไฟล์ทดสอบ: ประเมินสถานะของไฟล์ FILE=~/.bashrc
ถ้า [ -e "$FILE" ]; แล้ว
ถ้า [ -f "$FILE" ]; แล้ว
echo "$FILE เป็นไฟล์ปกติ"
fi
ถ้า [ -d "$FILE" ]; แล้ว
echo "$FILE เป็นไดเร็กทอรี"
fi
ถ้า [ -r "$FILE" ]; แล้ว
echo "$FILE สามารถอ่านได้"
fi
ถ้า [ -w "$FILE" ]; แล้ว
echo "$FILE เขียนได้"
fi
ถ้า [ -x "$FILE" ]; แล้ว
echo "$FILE สามารถเรียกใช้งานได้/ค้นหาได้"
#! / bin / ทุบตี
# ไฟล์ทดสอบ: ประเมินสถานะของไฟล์ FILE=~/.bashrc
ถ้า [ -e "$FILE" ]; แล้ว
ถ้า [ -f "$FILE" ]; แล้ว
echo "$FILE เป็นไฟล์ปกติ"
fi
ถ้า [ -d "$FILE" ]; แล้ว
echo "$FILE เป็นไดเร็กทอรี"
fi
ถ้า [ -r "$FILE" ]; แล้ว
echo "$FILE สามารถอ่านได้"
fi
ถ้า [ -w "$FILE" ]; แล้ว
echo "$FILE เขียนได้"
fi
ถ้า [ -x "$FILE" ]; แล้ว
echo "$FILE สามารถเรียกใช้งานได้/ค้นหาได้"
fi อื่น
echo "$FILE ไม่มีอยู่" ออก 1
fi
ทางออก
fi อื่น
echo "$FILE ไม่มีอยู่" ออก 1
fi
ทางออก
สคริปต์ประเมินไฟล์ที่กำหนดให้กับค่าคงที่ ไฟล์ และแสดงผลเมื่อทำการประเมิน มีสองสิ่งที่น่าสนใจที่ควรทราบเกี่ยวกับสคริปต์นี้ ก่อนอื่นให้สังเกตว่าพารามิเตอร์ $ไฟล์ ถูกยกมาในนิพจน์ ไม่จำเป็นต้องกรอกนิพจน์ทางวากยสัมพันธ์ แต่เป็นการป้องกันพารามิเตอร์ที่ว่างเปล่า หากการขยายพารามิเตอร์ของ $ไฟล์ ได้ผลลัพธ์เป็นค่าว่าง มันจะทำให้เกิดข้อผิดพลาด (ตัวดำเนินการจะถูกตีความว่าเป็นสตริงที่ไม่ใช่ค่าว่างมากกว่าตัวดำเนินการ) การใช้เครื่องหมายคำพูดรอบๆ พารามิเตอร์ช่วยให้แน่ใจว่าตัวดำเนินการจะตามด้วยสตริงเสมอ แม้ว่าสตริงจะว่างเปล่าก็ตาม ประการที่สอง สังเกตการปรากฏตัวของ ทางออก คำสั่งใกล้ส่วนท้ายของสคริปต์ NS ทางออก คำสั่งยอมรับอาร์กิวเมนต์ทางเลือกเดียว ซึ่งจะกลายเป็นสถานะการออกของสคริปต์ เมื่อไม่มีการส่งผ่านอาร์กิวเมนต์ สถานะการออกจะปรับสถานะการออกของคำสั่งสุดท้ายที่ดำเนินการผิดไป โดยใช้ ทางออก วิธีนี้ทำให้สคริปต์สามารถระบุความล้มเหลวได้ if $ไฟล์ ขยายเป็นชื่อไฟล์ที่ไม่มีอยู่ NS ทางออก คำสั่งที่ปรากฏบนบรรทัดสุดท้ายของสคริปต์มีแบบแผน เมื่อสคริปต์ “หมดเวลาสิ้นสุด” (ถึงจุดสิ้นสุดของไฟล์) สคริปต์จะสิ้นสุดลงด้วยสถานะการออกของคำสั่งสุดท้ายที่ดำเนินการ
ในทำนองเดียวกัน ฟังก์ชันเชลล์สามารถส่งคืนสถานะการออกโดยใส่อาร์กิวเมนต์จำนวนเต็มไปที่ กลับ สั่งการ. หากเราต้องแปลงสคริปต์ด้านบนเป็นฟังก์ชันเชลล์เพื่อรวมไว้ในโปรแกรมที่ใหญ่กว่า เราสามารถแทนที่ ทางออก คำสั่งกับ กลับ คำสั่งและรับพฤติกรรมที่ต้องการ:
ไฟล์ทดสอบ () {
# ไฟล์ทดสอบ: ประเมินสถานะของไฟล์ FILE=~/.bashrc
ถ้า [ -e "$FILE" ]; แล้ว
ถ้า [ -f "$FILE" ]; แล้ว
echo "$FILE เป็นไฟล์ปกติ"
fi
ถ้า [ -d "$FILE" ]; แล้ว
echo "$FILE เป็นไดเร็กทอรี"
fi
ถ้า [ -r "$FILE" ]; แล้ว
ไฟล์ทดสอบ () {
# ไฟล์ทดสอบ: ประเมินสถานะของไฟล์ FILE=~/.bashrc
ถ้า [ -e "$FILE" ]; แล้ว
ถ้า [ -f "$FILE" ]; แล้ว
echo "$FILE เป็นไฟล์ปกติ"
fi
ถ้า [ -d "$FILE" ]; แล้ว
echo "$FILE เป็นไดเร็กทอรี"
fi
ถ้า [ -r "$FILE" ]; แล้ว
echo "$FILE สามารถอ่านได้"
fi
ถ้า [ -w "$FILE" ]; แล้ว
echo "$FILE เขียนได้"
fi
ถ้า [ -x "$FILE" ]; แล้ว
echo "$FILE สามารถเรียกใช้งานได้/ค้นหาได้"
fi
อื่น
echo "$FILE ไม่มีอยู่" คืนค่า 1
fi
}
echo "$FILE สามารถอ่านได้"
fi
ถ้า [ -w "$FILE" ]; แล้ว
echo "$FILE เขียนได้"
fi
ถ้า [ -x "$FILE" ]; แล้ว
echo "$FILE สามารถเรียกใช้งานได้/ค้นหาได้"
fi
อื่น
echo "$FILE ไม่มีอยู่" คืนค่า 1
fi
}