ฉันต้องการรวมหลายเงื่อนไขในเชลล์ถ้าคำสั่งและปฏิเสธการรวมกัน ฉันมีรหัสการทำงานต่อไปนี้สำหรับการรวมกันของเงื่อนไขง่าย ๆ :
if [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ; then
# do stuff with the files
fi
มันใช้งานได้ดี ถ้าฉันต้องการที่จะปฏิเสธฉันสามารถใช้รหัสการทำงานต่อไปนี้:
if ! ( [ -f file1 ] && [ -f file2 ] && [ -f file3 ] ) ; then
echo "Error: You done goofed."
exit 1
fi
# do stuff with the files
ยังใช้งานได้ตามที่คาดไว้ อย่างไรก็ตามมันเกิดขึ้นกับฉันว่าฉันไม่ทราบว่าวงเล็บกำลังทำอะไรอยู่ ฉันต้องการใช้พวกมันสำหรับการจัดกลุ่ม แต่จริงๆแล้วมันวางไข่กับเชลล์หรือไม่ (ฉันจะบอกได้อย่างไร) ถ้าเป็นเช่นนั้นมีวิธีจัดกลุ่มเงื่อนไขโดยไม่วางไข่ subshell หรือไม่
if [[ ! -f file1 ]] && [[ ! -f file2 ]]; then
if [ ! 1 -eq 2 ] && [ ! 2 -eq 3 ]; then echo yep; fi
และใช้งานได้ ฉันมักจะเขียนการทดสอบด้วยเครื่องหมายวงเล็บปีกกาเป็นเรื่องของนิสัย นอกจากนี้เพื่อให้แน่ใจว่าไม่ได้bash
ฉันทำการทดสอบต่อไปif /bin/test ! 1 -eq 2 && /bin/test ! 2 -eq 3 ; then echo yep; fi
และใช้งานได้เช่นกัน
[ ! -e file/. ] && [ -r file ]
จะวางไดเรกทอรี ลบล้างมันตามที่คุณต้องการ แน่นอนว่าเป็นสิ่งที่-d
ทำ
if ! [ -f file1 ] || ! [ -f file 2 ] || ! [ -f file3 ] ; then
แต่ฉันต้องการคำตอบทั่วไป