กลับไปหน้าบทความ

อ่าน 6 นาที

เปลือกบอร์น

Bourne shell ( sh ) คือ ตัวแปล คำ สั่งบรรทัดคำสั่ง สำหรับ ระบบปฏิบัติการ คอมพิวเตอร์ มันปรากฏครั้งแรกใน Unix เวอร์ชัน 7 ในฐานะ เชลล์ เริ่ม ต้น ระบบ ที่คล้าย Unix ยังคงมี /bin/sh...

เปลือกบอร์น

เปลือกบอร์น
ผู้เขียนต้นฉบับสตีเฟน บอร์น
นักพัฒนาห้องปฏิบัติการโทรศัพท์เบลล์
ปล่อยพ.ศ. 2522 ( 1979 )
ระบบปฏิบัติการยูนิกซ์
พิมพ์เชลล์ยูนิกซ์
ใบอนุญาต

Bourne shell ( sh) คือ ตัวแปล คำสั่งบรรทัดคำสั่งสำหรับระบบปฏิบัติการ คอมพิวเตอร์ มันปรากฏครั้งแรกในUnix เวอร์ชัน 7ในฐานะเชลล์ เริ่ม ต้น ระบบ ที่คล้าย Unixยังคงมี/bin/sh—ซึ่งจะเป็น Bourne shell หรือลิงก์สัญลักษณ์หรือลิงก์แบบฮาร์ดลิงก์ไปยังเชลล์ที่เข้ากันได้—แม้ว่าผู้ใช้ส่วนใหญ่จะใช้เชลล์อื่นก็ตาม

เชลล์ Bourne เคยเป็นมาตรฐานใน ระบบ Unix ทุกระบบที่มีตราสินค้า แม้ว่าในอดีตระบบที่ใช้BSD เป็นพื้นฐานจะมีสคริปต์จำนวนมากที่เขียนด้วย cshก็ตาม เนื่องจากเป็นพื้นฐานของ ไวยากรณ์ POSIXshสคริปต์เชลล์ Bourne จึงสามารถรันได้ด้วยBashหรือdashบนLinuxหรือระบบที่คล้าย Unix อื่นๆ โดย Bash เองก็เป็น โปรแกรม ฟรีที่ลอกเลียนแบบ Bourne มา

ประวัติศาสตร์

เวอร์ชัน 7 Unix : หน้าคู่มือ Bourne shell ฉบับ ดั้งเดิม การจำลอง PDP-11ด้วยSIMH

ต้นกำเนิด

การพัฒนา Bourne shell เริ่มต้นขึ้นในปี 1976 [ 1 ]พัฒนาโดยStephen Bourneที่Bell Labsโดยเป็นการแทนที่Thompson shellซึ่งไฟล์ปฏิบัติการมีชื่อเดียวกันshBourne shell ยังมีMashey shell มาก่อนด้วย Bourne ได้รับการเผยแพร่ในปี 1979 ในเวอร์ชัน 7 ของ Unixที่แจกจ่ายให้กับวิทยาลัยและมหาวิทยาลัย แม้ว่าจะใช้เป็นตัวแปลคำสั่งแบบโต้ตอบ แต่ก็มีจุดประสงค์เพื่อใช้เป็นภาษาสคริปต์และมีคุณสมบัติส่วนใหญ่ที่โดยทั่วไปถือว่าใช้ในการสร้างโปรแกรมที่มีโครงสร้าง

มันได้รับความนิยมมากขึ้นหลังจากที่ Brian Kernighan และ Rob Pike ได้ตีพิมพ์หนังสือThe Unix Programming Environment ซึ่งเป็นหนังสือเชิงพาณิชย์เล่มแรกที่นำเสนอเชลล์ในฐานะภาษาโปรแกรมในรูปแบบบทเรียน

เป้าหมายหลักบางประการของเปลือกหุ้มมีดังนี้: [ 2 ]

คุณสมบัติของเวอร์ชันดั้งเดิม

คุณสมบัติของเชลล์ Bourne เวอร์ชัน 7 สำหรับ UNIX ประกอบด้วย:

  • สามารถเรียกใช้สคริปต์เป็นคำสั่งได้โดยใช้ชื่อไฟล์ของสคริปต์นั้น
  • สามารถใช้งานได้ทั้งแบบโต้ตอบหรือไม่โต้ตอบ
  • อนุญาตให้ดำเนินการคำสั่งได้ทั้งแบบซิงโครนัสและอะซิงโครนัส
  • รองรับการเปลี่ยนเส้นทางการรับและส่งข้อมูล รวมถึงไปป์ไลน์
  • มีชุดคำสั่งสำเร็จรูปให้เลือกใช้
  • ให้บริการด้านโครงสร้างควบคุมการไหลและบริการเสนอราคา
  • ตัวแปรที่ไม่มีชนิดข้อมูล
  • กำหนดขอบเขตตัวแปรทั้งในระดับท้องถิ่นและระดับโลก
  • สคริปต์ไม่จำเป็นต้องคอมไพล์ก่อนเรียกใช้งาน
  • ไม่มีฟังก์ชัน goto ดังนั้นอาจจำเป็นต้องปรับโครงสร้างโค้ดใหม่
  • การแทนที่คำสั่งโดยใช้เครื่องหมายแบ็กควอต : `command`.
  • เอกสารเหล่านี้แสดง<<วิธีการฝังข้อความที่ป้อนเข้าไปในสคริปต์
  • for ~ do ~ doneลูป โดยเฉพาะการใช้$*ลูปเพื่อวนซ้ำอาร์กิวเมนต์ รวมถึงfor ~ in ~ do ~ doneลูปสำหรับการวนซ้ำรายการต่างๆ
  • case ~ in ~ esacกลไกการเลือก ซึ่งมีจุดประสงค์หลักเพื่อช่วยในการวิเคราะห์ข้อโต้แย้ง
  • shให้การสนับสนุนตัวแปรสภาพแวดล้อมโดยใช้พารามิเตอร์คีย์เวิร์ดและตัวแปรที่ส่งออกได้
  • ประกอบด้วยข้อกำหนดที่เข้มงวดสำหรับการควบคุมการป้อนข้อมูลและผลลัพธ์ รวมถึงสิ่งอำนวยความสะดวก ใน การจับคู่การแสดงออก

นอกจากนี้ Bourne shell ยังเป็นเชลล์แรกที่ใช้หลักการระบุไฟล์ (file descriptor)2>สำหรับข้อความแสดงข้อผิดพลาดซึ่งช่วยให้ควบคุมการเขียนโปรแกรมได้มากขึ้นโดยแยกข้อความแสดงข้อผิดพลาดออกจากข้อมูล

อิทธิพลจาก Algol 68C

รูปแบบการเขียนโค้ดของ Stephen Bourne ได้รับอิทธิพลจากประสบการณ์ของเขากับคอมไพเลอร์ALGOL 68C [ 3 ]ที่เขาทำงานอยู่ที่มหาวิทยาลัยเคมบริดจ์นอกจากรูปแบบการเขียนโปรแกรมแล้ว Bourne ยังนำส่วนต่างๆ ของALGOL 68มา ใช้ ซ้ำและ(ใช้แทน) ข้อความใน ไวยากรณ์เชลล์ Bourne ของ Unix ทั่วไป ยิ่งไปกว่านั้น แม้ว่าเชลล์ v7 จะเขียนด้วยภาษาCแต่ Bourne ก็ใช้ประโยชน์จากมาโคร บางส่วน [ 4 ]เพื่อให้ซอร์สโค้ด C มีกลิ่นอายของ ALGOL 68 if ~ then ~ elif ~ then ~ else ~ ficase ~ in ~ esacfor/while ~ do ~ oddoneod ภาษาถิ่น C ที่เกิดขึ้นนี้ได้รับการตั้งชื่อเล่นว่า "Bournegol" [ 5 ] ตัวอย่างภาษา "Bournegol" จาก cmd.c: [ 6 ]

เทอมTREPTR ท้องถิ่น( flg ) { REG TREPTR t ;สำรอง++ ; ถ้าflg & NLFLG แล้วskipnl (); มิฉะนั้นword (); FIIF ( t = item ( TRUE )) ANDF ( wdval == '^' ORF wdval == '|' ) THEN return ( makelist ( TFIL , makefork ( FPOU , t ), makefork ( FPIN | FPCL , term ( NLFLG )))); ELSE return ( t ); FI }

มาโครเหล่านี้ (รวมถึง คำสั่ง fingerที่แจกจ่ายใน Unix เวอร์ชัน4.2BSD ) เป็นแรงบันดาลใจให้เกิดการแข่งขันเขียนโค้ด C ที่ซ่อนเร้นระดับนานาชาติ (IOCCC) [ 7 ]

คุณสมบัติที่เพิ่มเข้ามาหลังปี 1979

ตลอดหลายปีที่ผ่านมา Bourne shell ได้รับการปรับปรุงที่ AT&T เวอร์ชันต่างๆ จึงถูกเรียกตามเวอร์ชัน Unix ของ AT&T ที่วางจำหน่าย (เวอร์ชันที่สำคัญบางส่วน ได้แก่ Version7, System III, SVR2, SVR3, SVR4) เนื่องจาก shell ไม่เคยมีการกำหนดเวอร์ชัน วิธีเดียวที่จะระบุได้คือการทดสอบคุณสมบัติของมัน[ 8 ]

คุณสมบัติของ Bourne shell เวอร์ชันตั้งแต่ปี 1979 ได้แก่: [ 9 ]

  • คำสั่ง ในตัวtest– เชลล์ระบบ III (1981)
  • # ใช้เป็นอักขระแสดงความคิดเห็น – เชลล์ระบบ III (1981)
  • โคลอนในการแทนที่พารามิเตอร์ "${parameter:=word}" – เชลล์ระบบ III (1981)
  • continueพร้อมข้อโต้แย้ง – เชลล์ระบบ III (1981)
  • cat <<-EOFสำหรับเอกสารที่มีการเยื้องเข้าไปตรงนี้ – เชลล์ระบบ III (1981)
  • ฟังก์ชันและreturnส่วนประกอบภายใน – เชลล์ SVR2 (1984)
  • อุปกรณ์ภายในunset, echo, type– เปลือก SVR2 (1984)
  • ซอร์สโค้ดที่แปลงเป็นรูปแบบที่ไม่ใช่ ALGOL68 – เชลล์ SVR2 (1984)
  • $@ตัวถัง SVR3 สมัยใหม่ (1986)
  • ติดตั้งมาในตัวgetopts– เคส SVR3 (ปี 1986)
  • การจัดการพารามิเตอร์ที่ปรับปรุงใหม่ช่วยให้สามารถเรียกฟังก์ชันแบบเรียกซ้ำได้ – SVR3 shell (1986)
  • เชลล์ SVR3 แบบ 8 บิตสะอาด (1986)
  • การควบคุมงาน – เชลล์ SVR4 (1989)
  • การรองรับหลายไบต์ – เชลล์ SVR4 (1989)

ตัวแปร

เปลือก DMERT

Duplex Multi-Environment Real-Time ( DMERT ) เป็นระบบปฏิบัติการแบบไฮบริดที่ผสมผสานระหว่างระบบแบ่งเวลาและระบบเรียลไทม์ พัฒนาขึ้นในช่วงทศวรรษ 1970 ที่ Bell Labs Indian Hill ในเมืองเนเพอร์วิลล์ รัฐอิลลินอยส์โดยใช้ Bourne Shell เวอร์ชันปี 1978 "VERSION sys137 DATE 1978 Oct 12 22:39:57" DMERT shell ทำงานบน คอมพิวเตอร์ 3B21Dซึ่งยังคงใช้งานอยู่ในอุตสาหกรรมโทรคมนาคมจนถึงปัจจุบัน

เปลือกข้าวโพด

การใช้งานpdkshในOpenBSD (เชลล์เริ่มต้น)

Korn shell (ksh) ที่เขียนโดยDavid Kornโดยอิงจากซอร์สโค้ด Bourne Shell ดั้งเดิม[ 10 ]เป็นทางเลือกกลางระหว่าง Bourne shell และC shellไวยากรณ์ของมันส่วนใหญ่ดึงมาจาก Bourne shell ในขณะที่ คุณสมบัติ การควบคุมงาน ของมัน คล้ายกับของ C shell ฟังก์ชันการทำงานของ Korn Shell ดั้งเดิม (รู้จักกันในชื่อ ksh88 ตั้งแต่ปีที่เปิดตัว) ถูกใช้เป็นพื้นฐานสำหรับ มาตรฐาน POSIX shell เวอร์ชันใหม่กว่า ksh93 เป็นโอเพนซอร์สมาตั้งแต่ปี 2000 และถูกใช้ในLinux บางดิสทริบิวชัน โคลนของ ksh88 ที่รู้จักกันในชื่อpdkshเป็นเชลล์เริ่มต้นใน OpenBSD

ชิลลี่ บอร์น เชลล์

Schily-Tools ของJörg Schilling ประกอบด้วยอนุพันธ์ Bourne Shell สามรายการ [ 11 ]

ความสัมพันธ์กับเปลือกหอยชนิดอื่นๆ

ซีเชลล์

บิล จอยผู้เขียน C shell ได้วิจารณ์ Bourne shell ว่าไม่เป็นมิตรต่อการใช้งานแบบโต้ตอบ[ 12 ]ซึ่งเป็นงานที่สตีเฟน บอร์นเองก็ยอมรับว่า C shell มีประสิทธิภาพเหนือกว่า อย่างไรก็ตาม บอร์นกล่าวว่า shell ของเขามีประสิทธิภาพเหนือกว่าสำหรับการเขียนสคริปต์และสามารถใช้งานได้บนระบบ Unix ใดๆ ก็ได้[ 13 ]และทอม คริสเตียนเซนก็วิจารณ์ C shell ว่าไม่เหมาะสมสำหรับการเขียนสคริปต์และการเขียนโปรแกรมเช่นกัน[ 14 ]

เปลือกหอยอัลมควิสต์

เนื่องจากปัญหาลิขสิทธิ์เกี่ยวกับ Bourne Shell ที่ใช้ใน BSD เวอร์ชันเก่าของ CSRGทำให้ Kenneth Almquist พัฒนา Bourne Shell เวอร์ชันเลียนแบบขึ้นมา ซึ่งบางคนเรียกว่า Almquist Shell และใช้งานได้ภายใต้ใบอนุญาต BSDซึ่งปัจจุบันยังคงใช้กันอยู่ในระบบปฏิบัติการที่สืบทอดมาจาก BSD บางรุ่น และในสถานการณ์ที่มีหน่วยความจำเหลือน้อย Almquist Shell ได้ถูกพอร์ตไปยัง Linux และเปลี่ยนชื่อเป็นDebian Almquist Shellหรือ dash Shell นี้ช่วยให้การประมวลผลสคริปต์มาตรฐานsh(และมาตรฐาน POSIX ในระบบปฏิบัติการรุ่นใหม่) เร็วขึ้นและใช้ หน่วยความจำshน้อยกว่า Bash อย่างไรก็ตาม การใช้งาน Shell นี้มักจะเผยให้เห็น ข้อบกพร่องของ Bash – ข้อสมมติฐานที่เน้น Bash เป็นศูนย์กลางในสคริปต์ที่ออกแบบมาให้ทำงานบน sh

เปลือกหอยอื่นๆ

  • Bash ( Bourne-Again shell ) ถูกพัฒนาขึ้นในปี 1989 สำหรับโครงการ GNUและรวมเอาคุณสมบัติจาก Bourne shell, csh และ ksh เข้าไว้ด้วยกัน โดยมีจุดประสงค์เพื่อให้เป็นไปตามมาตรฐาน POSIX
  • rcถูกสร้างขึ้นที่Bell LabsโดยTom Duffเพื่อใช้แทน sh สำหรับUnix เวอร์ชัน 10มันเป็นเชลล์เริ่มต้นสำหรับPlan 9 จาก Bell Labsและได้รับการพอร์ตไปยัง UNIX เป็นส่วนหนึ่งของPlan 9 จาก User Space
  • Z shellซึ่งพัฒนาโดย Paul Falstad ในปี 1990 เป็น Bourne shell ที่ได้รับการขยายเพิ่มเติมด้วยคุณสมบัติหลายอย่าง รวมถึงคุณสมบัติบางอย่างจากBash , kshและtcshด้วย

ดูเพิ่มเติม

  • สมาชิกแต่ละคนของ "ตระกูล Bourne Shell ดั้งเดิม"
  • "ลักษณะทั่วไปที่เป็นเอกลักษณ์ของเปลือกหอยบอร์นแบบดั้งเดิม"
  • โค้ดภาษาซีเก่าแก่สำหรับ Bourne shell ที่ใช้มาโคร mac.h จากปี 1979

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Bourne_shell&oldid=1357144183 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ เปลือกบอร์น

Bourne shell ( sh ) คือ ตัวแปล คำ สั่งบรรทัดคำสั่ง สำหรับ ระบบปฏิบัติการ คอมพิวเตอร์ มันปรากฏครั้งแรกใน Unix เวอร์ชัน 7 ในฐานะ เชลล์ เริ่ม ต้น ระบบ ที่คล้าย Unix ยังคงมี /bin/sh...

ประวัติศาสตร์

เวอร์ชัน 7 Unix : หน้าคู่มือ Bourne shell ฉบับ ดั้งเดิม การจำลอง PDP-11 ด้วย SIMH

ต้นกำเนิด

การพัฒนา Bourne shell เริ่มต้นขึ้นในปี 1976 [ 1 ] พัฒนาโดย Stephen Bourne ที่ Bell Labs โดยเป็นการแทนที่ Thompson shell ซึ่งไฟล์ปฏิบัติการมีชื่อเดียวกัน sh Bourne shell ยังมี Mashey shell มาก่อนด้วย Bourne ได้รับการเผยแพร่ในปี 1979 ใน เวอร์ชัน 7 ของ Unix...

คุณสมบัติของเวอร์ชันดั้งเดิม

คุณสมบัติของเชลล์ Bourne เวอร์ชัน 7 สำหรับ UNIX ประกอบด้วย: