ทุบตีถ้าคำสั่ง


0

ในขณะที่ทุกคนรู้ว่าifคำสั่งง่ายๆเป็นเช่นนั้น:

ถ้าคำสั่งการทดสอบ; จากนั้นคำสั่งที่เป็นผลต่อเนื่อง; Fi

จากนั้นหมอพูดว่า:

รายการ TEST-COMMAND จะถูกดำเนินการและหากสถานะการส่งคืนเป็นศูนย์รายการ CONSEQUENT-COMMANDS จะถูกดำเนินการ

หมายความว่าสถานะการส่งคืนของคำสั่งทดสอบถูกแปลงเป็นบูลีนจริง / เท็จโดยใช้กฎ:

return status - 0 ->
สถานะ return return - 1 -> false

จากนั้นใช้คำสั่ง if เพื่อพิจารณาว่าจะดำเนินการอย่างไร


1
นั่นคือสิ่งที่มันหมายถึง: ความยากลำบากของที่ไหน?
AFH

คำตอบ:


1

ใช่. ตัวอย่างเช่น:

$ exitwith() { return $1; }
$ for stat in {0..10}; do
> if exitwith $stat; then
> echo "An exit status of $stat is considered true"
> else
> echo "An exit status of $stat is considered false"
> fi
> done
An exit status of 0 is considered true
An exit status of 1 is considered false
An exit status of 2 is considered false
An exit status of 3 is considered false
An exit status of 4 is considered false
An exit status of 5 is considered false
An exit status of 6 is considered false
An exit status of 7 is considered false
An exit status of 8 is considered false
An exit status of 9 is considered false
An exit status of 10 is considered false

แต่จริงๆแล้วมันซับซ้อนกว่านั้นเล็กน้อยเนื่องจากสถานะทางออกเป็นจำนวนเต็มแบบไม่ได้ลงนาม 8 บิตจะสามารถอยู่ในช่วงตั้งแต่ 0 ถึง 255 เท่านั้น ค่านอกช่วงนั้นจะลดโมดูโล 256 ลงในช่วงนั้น:

$ for stat in -2 -1 255 256 257; do
> if exitwith $stat; then
> echo "An exit status of $stat (actually $?) is considered true"
> else
> echo "An exit status of $stat (actually $?) is considered false"
> fi
> done
An exit status of -2 (actually 254) is considered false
An exit status of -1 (actually 255) is considered false
An exit status of 255 (actually 255) is considered false
An exit status of 256 (actually 0) is considered true
An exit status of 257 (actually 1) is considered false

2
... โดยเฉพาะอย่างยิ่งมันเป็นจำนวนเต็ม8 บิตที่ไม่ได้ลงชื่อ ดูtldp.org/LDP/abs/html/exitcodes.htmlสำหรับความหมายเฉพาะ
quixotic

@quixotic: จุดดี; ฉันแก้ไขมันแล้ว
Gordon Davisson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.