เวิร์กสเตชันออนไลน์ของ OnWorks Linux และ Windows

โลโก้

ฟรีโฮสติ้งออนไลน์สำหรับเวิร์กสเตชัน

<ก่อนหน้านี้ | Contents | ถัดไป>

การมอบหมาย

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



[me@linuxbox ~]$ ฟู=

[me@linuxbox ~]$ เสียงสะท้อน $foo


[me@linuxbox ~]$ ถ้า (( foo = 5 )); แล้วก้อสะท้อนว่า "จริงอยู่" ; fi

มันเป็นความจริง

[me@linuxbox ~]$ เสียงสะท้อน $foo

5

[me@linuxbox ~]$ ฟู=

[me@linuxbox ~]$ เสียงสะท้อน $foo


[me@linuxbox ~]$ ถ้า (( foo = 5 )); แล้วก้อสะท้อนว่า "จริงอยู่" ; fi

มันเป็นความจริง

[me@linuxbox ~]$ เสียงสะท้อน $foo

5


ในตัวอย่างข้างต้น ก่อนอื่นเรากำหนดค่าว่างให้กับตัวแปร foo และตรวจสอบว่าว่างจริง ต่อไป เราดำเนินการ an if ด้วยคำสั่งประสม (( ฟู = 5

)). กระบวนการนี้ทำสองสิ่งที่น่าสนใจ: 1) กำหนดค่า 5 ให้กับตัวแปร

foo และ 2) ประเมินว่าเป็นจริงเนื่องจาก foo ถูกกำหนดให้เป็นค่าที่ไม่ใช่ศูนย์


ภาพ

หมายเหตุ สิ่งสำคัญคือต้องจำความหมายที่แน่นอนของ = ในนิพจน์ข้างต้น โสด = ดำเนินการมอบหมาย ฟู = 5 บอกว่า “ทำ foo เท่ากับ 5” ในขณะที่ == ประเมินความเท่าเทียมกัน ฟู == 5 พูดว่า “ไม่ foo เท่ากับ 5?” นี่เป็นคุณสมบัติทั่วไปในภาษาการเขียนโปรแกรมหลายภาษา ในเปลือกนี้อาจทำให้สับสนเล็กน้อยเนื่องจาก ทดสอบ คำสั่งยอมรับเดียว = เพื่อความเท่าเทียมกันของสตริง เป็นอีกเหตุผลหนึ่งที่ใช้ความทันสมัยมากขึ้น [[]] และ - คำสั่งประสมแทน ทดสอบ.


ภาพ

นอกจากนี้ยังมี =, เชลล์ยังมีสัญกรณ์ที่ทำหน้าที่บางอย่างที่เป็นประโยชน์มาก:


ตารางที่ 34-4: ผู้ดำเนินการมอบหมาย


คำอธิบายสัญกรณ์

คำอธิบายสัญกรณ์


ภาพ

พารามิเตอร์ = ความคุ้มค่า งานง่ายๆ. มอบหมาย ความคุ้มค่า ไปยัง พารามิเตอร์.


ภาพ

พารามิเตอร์ += ความคุ้มค่า ส่วนที่เพิ่มเข้าไป. เทียบเท่ากับ พารามิเตอร์ = พารามิเตอร์ +

มูลค่า


ภาพ

พารามิเตอร์ -= ความคุ้มค่า การลบ เทียบเท่ากับ พารามิเตอร์ = พารามิเตอร์ -

มูลค่า


ภาพ

พารามิเตอร์ *= ความคุ้มค่า การคูณ เทียบเท่ากับ พารามิเตอร์ = พารามิเตอร์

* มูลค่า


ภาพ

พารามิเตอร์ /= ความคุ้มค่า การหารจำนวนเต็ม เทียบเท่ากับ พารามิเตอร์ =

พารามิเตอร์ / ค่า


ภาพ

พารามิเตอร์ %= ความคุ้มค่า โมดูโล่ เทียบเท่ากับ พารามิเตอร์ = พารามิเตอร์ %

มูลค่า


ภาพ

พารามิเตอร์++ ตัวแปรหลังการเพิ่ม เทียบเท่ากับ พารามิเตอร์ =

พารามิเตอร์ + 1 (อย่างไรก็ตาม ดูการสนทนาด้านล่าง)


ภาพ

พารามิเตอร์−− ตัวแปรหลังการลด เทียบเท่ากับ พารามิเตอร์ =

พารามิเตอร์ - 1


ภาพ

++พารามิเตอร์ ตัวแปรล่วงหน้าที่เพิ่มขึ้น เทียบเท่ากับ พารามิเตอร์ =

พารามิเตอร์ + 1


ภาพ

--พารามิเตอร์ ตัวแปรก่อนการลด เทียบเท่ากับ พารามิเตอร์ =

พารามิเตอร์ - 1


ภาพ


ตัวดำเนินการมอบหมายเหล่านี้ให้ชวเลขที่สะดวกสำหรับงานเลขคณิตทั่วไปจำนวนมาก ที่น่าสนใจเป็นพิเศษคือการเพิ่มขึ้น (++) และลดลง (−−) ตัวดำเนินการ ซึ่งเพิ่มหรือลดค่าของพารามิเตอร์ทีละหนึ่ง รูปแบบของสัญกรณ์นี้นำมาจากภาษาการเขียนโปรแกรม C และรวมเข้ากับภาษาโปรแกรมอื่น ๆ อีกจำนวนหนึ่ง ได้แก่ ทุบตี.

ตัวดำเนินการอาจปรากฏที่ด้านหน้าของพารามิเตอร์หรือที่ส่วนท้าย แม้ว่าทั้งคู่จะเพิ่มหรือลดพารามิเตอร์ทีละหนึ่ง ตำแหน่งทั้งสองก็มีความแตกต่างกันเล็กน้อย หากวางไว้ที่ด้านหน้าของพารามิเตอร์ พารามิเตอร์จะเพิ่มขึ้น (หรือลดลง) ก่อนที่พารามิเตอร์จะถูกส่งคืน หากวางไว้หลัง การดำเนินการจะดำเนินการ หลังจาก พารามิเตอร์จะถูกส่งกลับ สิ่งนี้ค่อนข้างแปลก แต่เป็นพฤติกรรมที่ตั้งใจไว้ นี่คือการสาธิต:



[me@linuxbox ~]$ ฟู=1 [me@linuxbox ~]$ เสียงสะท้อน $((foo++)) 1

[me@linuxbox ~]$ เสียงสะท้อน $foo

[me@linuxbox ~]$ ฟู=1 [me@linuxbox ~]$ เสียงสะท้อน $((foo++)) 1

[me@linuxbox ~]$ เสียงสะท้อน $foo


2

2


ถ้าเรากำหนดค่าหนึ่งให้กับตัวแปร foo แล้วเพิ่มขึ้นด้วย ++ ตัวดำเนินการวางไว้หลังชื่อพารามิเตอร์ foo จะถูกส่งกลับด้วยค่าหนึ่ง อย่างไรก็ตาม หากเราดูค่าของตัวแปรเป็นครั้งที่สอง เราจะเห็นค่าที่เพิ่มขึ้น ถ้าเราวาง ++ โอเปอเรเตอร์หน้าพารามิเตอร์ เราจะได้พฤติกรรมที่คาดหวังมากขึ้น:


[me@linuxbox ~]$ ฟู=1 [me@linuxbox ~]$ เสียงสะท้อน $((++foo)) 2

[me@linuxbox ~]$ เสียงสะท้อน $foo

2

[me@linuxbox ~]$ ฟู=1 [me@linuxbox ~]$ เสียงสะท้อน $((++foo)) 2

[me@linuxbox ~]$ เสียงสะท้อน $foo

2


สำหรับแอปพลิเคชันเชลล์ส่วนใหญ่ การขึ้นต้นตัวดำเนินการจะเป็นประโยชน์มากที่สุด

ตัวดำเนินการ ++ และ -- มักใช้ร่วมกับลูป เราจะทำการปรับปรุงแก้ไขสคริปต์โมดูลของเราเพื่อให้กระชับขึ้นเล็กน้อย:



#! / bin / ทุบตี

# modulo2: สาธิตตัวดำเนินการโมดูโลสำหรับ ((i = 0; i <= 20; ++ฉัน )); ทำ

ถ้า (((ผม % 5) == 0 )); จากนั้น printf "<%d> " $i

อื่น

printf "%d " $i

เสร็จแล้ว

printf "\ n"

#! / bin / ทุบตี

# modulo2: สาธิตตัวดำเนินการโมดูโลสำหรับ ((i = 0; i <= 20; ++ฉัน )); ทำ

ถ้า (((ผม % 5) == 0 )); จากนั้น printf "<%d> " $i

อื่น

printf "%d " $i

เสร็จแล้ว

printf "\ n"


ระบบปฏิบัติการคลาวด์คอมพิวติ้งยอดนิยมที่ OnWorks: