ฉันมีสถานการณ์ด้านล่างเช่น:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
ฉันมีสถานการณ์ด้านล่างเช่น:
if [file exists]; then
exit
elif
recheck if file exist (max 10 times)
if found exit else recheck again as per counter
fi
คำตอบ:
การวนซ้ำนี้ทำได้หลายวิธี
ด้วยksh93
ไวยากรณ์ (สนับสนุนโดยzsh
และbash
):
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
sleep 10
done
สำหรับเชลล์ที่มีลักษณะคล้าย POSIX:
n=0
while [ "$n" -lt 10 ] && [ ! -e filename ]; do
n=$(( n + 1 ))
sleep 10
done
ลูปทั้งคู่พัก 10 วินาทีในการวนซ้ำแต่ละครั้งก่อนทดสอบการมีอยู่ของไฟล์อีกครั้ง
หลังจากลูปเสร็จสิ้นคุณจะต้องทดสอบการมีอยู่ของไฟล์เป็นครั้งสุดท้ายเพื่อให้ทราบว่าลูปออกจากการทำงาน 10 ครั้งหรือเนื่องจากไฟล์ปรากฏขึ้น
หากคุณต้องการและหากคุณสามารถเข้าถึง inotify-tools คุณสามารถแทนที่การsleep 10
โทรด้วย
inotifywait -q -t 10 -e create ./ >/dev/null
สิ่งนี้จะรอให้เหตุการณ์การสร้างไฟล์เกิดขึ้นในไดเรกทอรีปัจจุบัน แต่จะหมดเวลาหลังจาก 10 วินาที วิธีนี้จะทำให้ลูปของคุณออกจากทันทีที่ชื่อไฟล์ที่กำหนดปรากฏขึ้น (หากปรากฏ)
รหัสเต็มด้วยinotifywait
(แทนที่ด้วยsleep 10
หากคุณไม่ต้องการ) อาจมีลักษณะเช่นนั้น
for (( i=0; i<10; ++i)); do
[ -e filename ] && break
inotifywait -q -t 10 -e create ./ >/dev/null
done
if [ -e filename ]; then
echo 'file appeared!'
else
echo 'file did not turn up in time'
fi
inotifywait
sleep
หากการนับไม่ใช่ตัวแปรคุณสามารถใช้การขยายรั้ง:
for i in {1..10} # you can also use {0..9}
do
whatever
done
หากการนับเป็นตัวแปรคุณสามารถใช้seq
คำสั่ง:
count=10
for i in $(seq $count)
do
whatever
done
$(seq $count)
n=0
until [ "$((n+=1))" -gt 10 ]
do <exists? command exit
done
echo oh noes!
แม้ว่าtest -e file && exit
จะมีความยืดหยุ่นมากกว่า
exists1
หรือเป็นเช่นนั้นก็ยังพิมพ์ข้อผิดพลาดจำนวนมากหาก / เมื่อไม่พบไฟล์ที่ตรงกัน (มันเป็นข้อผิดพลาดหากมีการแข่งขันหลายรายการ) เชลล์อื่น ๆ ที่ฉันทดสอบดูเหมือนว่าจะให้ข้อผิดพลาดในทุกกรณี ...
done 2<>/dev/null
ควรจะระงับปราบปราม ไม่bash
ไม่ว่าสคริปต์? ฉันคิดว่ามันจะทำให้เกิดขึ้นใน-i
บริบท nteractive ยังคงเป็นมากเป็นชื่อฟิลเลอร์เป็นexists?
file
แต่ใช่ฉันเกลียดอ้างในการเปลี่ยนเส้นทาง - ถ้าสกรูเพื่อให้ มากขึ้น
test -e
ทำไมผมตั้งข้อสังเกต