แบช (อังกฤษ: bash: Bourne-again shell) เป็นเชลล์ยูนิกซ์ที่พัฒนาขึ้นสำหรับโครงการกนู ชื่อเต็มของโปรแกรมล้อเลียนเชลล์อีกตัวคือ บอร์นเชลล์ (Bourne shell) แบชเขียนมาใช้แทนบอร์นเชลล์ซึ่งเขียนขึ้นสำหรับยูนิกซ์เวอร์ชัน 7 โดย สตีเฟน บอร์น (Stephen Bourne) เมื่อประมาณ ค.ศ. 1978 ไบรอัน ฟอกซ์ (Brian Fox) เขียนแบชไว้เมื่อ ค.ศ. 1987 ตั้งแต่ ค.ศ. 1990 เป็นต้นมาผู้ดูแลพัฒนาหลักคือ เช็ต เรมี (Chet Ramey) ในลีนุกซ์ส่วนใหญ่และในแมคโอเอสเท็นใช้แบชเป็นเชลล์มาตรฐาน แบชสามารถทำงานบนระบบปฏิบัติการยูนิกซ์และใกล้เคียง ยังปรับปรุงให้สามารถทำงานในไมโครซอฟท์วินโดวส์โดยโครงการ Cygwin และในดอสโดยโครงการ ด้วย
นักพัฒนา | เช็ต เรมี |
---|---|
รุ่นเสถียร | 3.1 / 7 ธันวาคม พ.ศ. 2548 |
ที่เก็บข้อมูล |
|
ระบบปฏิบัติการ | ลีนุกซ์, แมคโอเอสเท็น, ยูนิกซ์, ไมโครซอฟท์วินโดวส์ (ผ่านทาง Cygwin) |
ประเภท | เชลล์ยูนิกซ์ |
สัญญาอนุญาต | GPL |
เว็บไซต์ | เว็บเพจของ GNU bash |
รูปแบบคำสั่ง
รูปแบบคำสั่งของแบชครอบคลุมคำสั่งทั้งหมดของบอร์นเชลล์ ดังนั้นสคริปต์ที่เขียนสำหรับบอร์นเชลล์ส่วนใหญ่จึงสามารถรันใน bash ได้โดยไม่ต้องแก้ไข จะมียกเว้นก็เช่น สคริปต์ที่เรียกใช้ตัวแปรพิเศษในบอร์นเชลล์ หรือใช้คำสั่งภายในของบอร์นเชลล์
รูปแบบคำสั่งในแบชยังได้รับแนวความคิดจาก (ksh) และ ซีเชลล์ (csh) เช่น การแก้ไขคำสั่ง จำคำสั่งเก่า ตัวแปร $RANDOM และ $PPID เป็นต้น เวลาใช้เป็นเชลล์ทางบรรทัดคำสั่ง แบชจะเติมชื่อโปรแกรม ชื่อไฟล์ ชื่อตัวแปร ให้ครบโดยอัตโนมัต เมื่อผู้ใช้กดปุ่ม TAB
ต่อไปนี้เป็นตัวอย่างรูปแบบคำสั่งที่เพิ่มเติมมาในแบชซึ่งบอร์นเชลล์ไม่มี
การคำนวณเลขจำนวนเต็ม
แบชสามารถคำนวณตัวเลขจำนวนเต็มโดยไม่ต้องเรียกใช้โปรแกรมอื่น ในการคำนวณจะใช้คำสั่ง ((...)) หรือ $[...]
VAR=55 # กำหนดค่า 55 ให้กับตัวแปร VAR ((VAR = VAR + 1)) # บวกหนึ่งให้ตัวแปร VAR สังเกตว่าไม่ใช้อักษร '$' ((++VAR)) # อีกวิธีในการบวกหนึ่งให้กับ VAR ((VAR++)) # อีกวิธีในการบวกหนึ่งให้กับ VAR echo $[VAR * 22] # นำ VAR ไปคูณกับ 22 แล้วแทนที่ในคำสั่ง echo $((VAR * 22)) # อีกวิธีในการนำ VAR ไปคูณกับ 22 แล้วแทนที่ในคำสั่ง
คำสั่ง ((...)) ยังใช้ในการตรวจสอบเงื่อนไข ว่าเป็นจริงหรือเท็จ เช่น
if ((VAR == Y * 3 + X * 2)) then echo Yes fi ((Z > 23)) && echo Yes
สามารถใช้เงื่อนไข '==', '!=', '>', '<', '>=' และ '<=' ในคำสั่ง ((...))
แบชไม่สามารถคำนวณค่าเป็นจำนวนทศนิยมได้ มีเพียง และ เท่านั้นที่ทำได้
เปลี่ยนทิศทาง I/O
แบชมีรูปแบบคำสั่งหลายอย่างในการเปลี่ยนทิศทาง I/O ตัวอย่างเช่น ถ้าต้องการเปลี่ยน standard output (stdout) และ standard error (stderr) ไปเก็บในไฟล์ สามารถใช้รูปแบบ
command &> file
ซึ่งง่ายกว่าบอร์นเชลล์ที่ต้องพิมพ์ "command > file 2>&1"
ตั้งแต่รุ่น 2.05b เป็นต้นมา แบชสามารถดึงข้อความสตริงไปเข้า standard input (เรียกว่า "here documents" หรือ "heredocs") ได้ดังนี้
command << "สตริงที่ส่งไป standard input"
ถ้าในสตริงมีตัวอักษรช่องว่าง หรือตัวอักษรพิเศษอื่น ๆ ต้องใส่สตริงในเครื่องหมายคำพูด
ตัวอย่าง: Redirect standard output to a file, write data, close file, reset stdout
# สร้างไฟล์เดสคริปเทอร์ (Filedescriptor, FD) 6 ให้ชี้ไปยัง stdout (FD 1) exec 6>&1 # เปลี่ยน stdout ให้เขียนลงไฟล์ "test.data" แทน exec 1>test.data # ใส่ข้อมูลในไฟล์ echo "data:data:data" # ปิดไฟล์ "test.data" exec 1>&- # เปลี่ยน stdout ให้เหมือนกับ FD 6 (รีเซต stdout ให้กลับเหมือนเดิม) exec 1>&6 # ปิด FD6 exec 6>&-
เปิดและปิดไฟล์
# เปิดไฟล์ test.data เพื่ออ่าน ใช้ FD 6 exec 6<test.data # อ่านจนกว่าจะจบไฟล์ while read -u 6 dta do echo "$dta" done # ปิดไฟล์ test.data exec 6<&-
เก็บผลลัพธ์ของคำสั่งภายนอก
# รันโปรแกรม 'find' และเก็บผลลัพธ์ไว้ในตัวแปร VAR # ค้นหาไฟล์ที่ลงท้ายด้วยตัวอักษร "h" VAR=$(find . -name "*h")
การตรวจสอบนพจน์ปรกติ
แบช 3.0 สนับสนุนการตรวจสอบนิพจน์ปรกติในตัวแบชเองโดยใช้รูปแบบคำสั่งที่คล้ายกับภาษาเพิร์ลดังนี้
[[string =~ regex]]
รูปแบบของนิพจน์ปรกติจะเหมือนกับที่กำหนดในหน้า regex(7) ผลลัพธ์ที่ได้จะเป็น 0 ถ้าสายอักขระตรงกัน และเป็น 1 ถ้าไม่ตรงกัน ข้อความในวงเล็บภายในนิพจน์ปรกติสามารถอ่านได้จากตัวแปร BASH_REMATCH ดังต่อไปนี้
if [[abcfoobarbletch =~ 'foo(bar)bl(.*)']] then echo ข้อความตรงกับที่ค้นหา\! echo $BASH_REMATCH -- แสดง foobarbletch echo ${BASH_REMATCH[1]} -- แสดง bar echo ${BASH_REMATCH[2]} -- แสดง etch fi
รูปแบบคำสั่งนี้ ทำงานมีประสิทธิภาพกว่าการรันโปรแกรม grep ต่างหาก ถ้าในนิพจน์ปรกติหรือสายอักขระมีตัวอักษรว่าง หรือตัวอักษรพิเศษ (เช่น '*' หรือ '?') ต้องใส่ในเครื่องหมายคำพูด
การแปลงแบ็คสแลช
ข้อความในรูป $'string' จะถูกจัดการเป็นพิเศษ ข้อความดังกล่าวจะถูกแปลงเป็นstring โดยที่ตัวอักษรที่ขึ้นต้นด้วยแบ็กสแลช (\) จะถูกแปลงตามที่กำหนดไว้ในภาษาซี ดังตารางต่อไปนี้
ข้อความเดิม | แปลงเป็น |
---|---|
\a | ตัวอักษร alert หรือ bell |
\b | ตัวอักษร backspace |
\e | ตัวอักษร escape |
\f | ตัวอักษร form feed |
\n | ตัวอักษร new line |
\r | ตัวอักษร carriage return |
\t | ตัวอักษร horizontal tab |
\v | ตัวอักษร vertical tab |
\\ | ตัวอักษร \ |
\' | ตัวอักษร ' |
\nnn | ตัวอักษร 8 บิตที่มีเลขฐานแปดเป็น nnn (หนึ่งถึงสามหลัก) |
\xHH | ตัวอักษร 8 บิตที่มีเลขฐานสิบหกเป็น HH (หนึ่งหรือสองหลัก) |
\cx | ตัวอักษร control-X |
หลังจากแปลงแล้วข้อความจะอยู่ภายในเครื่องหมายคำพูด '...' เหมือนกับว่าไม่มีตัวอักษร $ อยู่
ข้อความตัวอักษรที่อยู่ภายใน $"..." จะถูกแปลตาม (locale) ปัจจุบัน ถ้าโลเคลปัจจุบันคือ C หรือ POSIX เครื่องหมายดอลลาร์จะไม่มีผล แต่ถ้าสตริงถูกแปลและแทนที่ ผลลัพธ์จะอยู่ในเครื่องหมายคำพูด "..."
สคริปเริ่มทำงาน
เมื่อแบชเริ่มทำงาน มันจะทำคำสั่งในสคริปเริ่มต้นต่าง ๆ กันแล้วแต่กรณี
ถ้าเรียกแบชเป็นเชลล์ล็อกอิน หรือเรียกโดยมีออปชัน --login มันจะไปค้นหา /etc/profile ตามด้วย ~/.bash_profile, ~/bash_login และ ~/.profile ตามลำดับ มันจะรันคำสั่งในไฟล์แรกที่มันพบและสามารถอ่านได้ สามารถสั่งให้แบชไม่รันคำสั่งโดยออปชัน --noprofile
ถ้าล็อกอินเชลล์จบการทำงาน แบชจะไปรันคำสั่งใน ~/.bash_logout ถ้ามี
ถ้าเรียกแบชเป็นเชลล์โต้ตอบที่ไม่ใช้ล็อกอิน มันจะไปอ่านและรันคำสั่งใน ~/.bashrc ถ้ามี สามารถสั่งไม่ให้รันได้ด้วยออปชัน --norc และสั่งให้รันจากไฟล์ที่กำหนดด้วยออปชัน --rcfile
ถ้าเรียกแบชเป็นเชลล์เพื่อรันสคริปต์ มันจะตรวจสอบตัวแปร BASH_ENV และรันคำสั่งในไฟล์ที่ระบุแบชไม่ใช้ตัวแปร PATH ในการค้นหาไฟล์
ถ้าเรียกแบชโดยใช้ชื่อ sh มันจะเลียนแบบการทำงานของบอร์นเชลล์มากที่สุดเท่าที่ทำได้ ตราบเท่าที่ยังเป็นตามมาตรฐาน POSIX เมื่อเป็นล็อกอินเชลล์หรือมีออปชัน --login มันจะไปหา /etc/profile และ ~/.profile ตามลำดับ และสามารถใช้ --noprofile เพื่องดการรันคำสั่งเริ่มต้น เมื่อไม่เป็นล็อกอินเชลล์ มันจะหาไฟล์ที่กำหนดโดยตัวแปร ENV และเมื่อเรียกเพื่อรันสคริปจะไม่รันคำสั่งเริ่มต้นเลย
ถ้าแบชทำงานในโหมด POSIX โดยใช้ออพชัน --posix จะรันคำสั่งจากไฟล์ที่ระบุใน ENV เท่านั้นเพื่อเป็นไปตามมาตรฐาน POSIX
แบชยังตรวจว่ามันถูกเรียกจาก ซึ่งมักเป็น rshd หรือไม่ ถ้าใช่ ก็จะรันคำสั่งใน ~/.bashrc (ยกเลิกได้โดยออพชัน --norc และเปลี่ยนไฟล์โดยใช้ออพชัน --rcfile แต่ปกติ rshd มักไม่สามารถรันเชลล์โดยระบุออพชันเหล่านี้)
อ้างอิง
- "Bash Reference Manual". สืบค้นเมื่อ 2008-06-21.
- Ramey, Chet. . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2005-03-29. สืบค้นเมื่อ 2008-01-15.
แหล่งข้อมูลอื่น
- เว็บเพจโปรแกรม bash 2006-08-13 ที่ เวย์แบ็กแมชชีน
- เว็บเพจ bash ของโครงการกนู
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
aebch xngkvs bash Bourne again shell epnechllyuniksthiphthnakhunsahrbokhrngkarknu chuxetmkhxngopraekrmlxeliynechllxiktwkhux bxrnechll Bourne shell aebchekhiynmaichaethnbxrnechllsungekhiynkhunsahrbyuniksewxrchn 7 ody stiefn bxrn Stephen Bourne emuxpraman kh s 1978 ibrxn fxks Brian Fox ekhiynaebchiwemux kh s 1987 tngaet kh s 1990 epntnmaphuduaelphthnahlkkhux echt ermi Chet Ramey inlinuksswnihyaelainaemkhoxexsethnichaebchepnechllmatrthan aebchsamarththanganbnrabbptibtikaryuniksaelaiklekhiyng yngprbprungihsamarththanganinimokhrsxfthwinodwsodyokhrngkar Cygwin aelaindxsodyokhrngkar dwyGNU Bourne again shellnkphthnaecht ermirunesthiyr3 1 7 thnwakhm ph s 2548thiekbkhxmulgit wbr savannah wbr gnu wbr org wbr cgit wbr bash wbr gitrabbptibtikarlinuks aemkhoxexsethn yuniks imokhrsxfthwinodws phanthang Cygwin praephthechllyunikssyyaxnuyatGPLewbistewbephckhxng GNU bashrupaebbkhasngrupaebbkhasngkhxngaebchkhrxbkhlumkhasngthnghmdkhxngbxrnechll dngnnskhriptthiekhiynsahrbbxrnechllswnihycungsamarthrnin bash idodyimtxngaekikh camiykewnkechn skhriptthieriykichtwaeprphiessinbxrnechll hruxichkhasngphayinkhxngbxrnechll rupaebbkhasnginaebchyngidrbaenwkhwamkhidcak ksh aela siechll csh echn karaekikhkhasng cakhasngeka twaepr RANDOM aela PPID epntn ewlaichepnechllthangbrrthdkhasng aebchcaetimchuxopraekrm chuxifl chuxtwaepr ihkhrbodyxtonmt emuxphuichkdpum TAB txipniepntwxyangrupaebbkhasngthiephimetimmainaebchsungbxrnechllimmi karkhanwnelkhcanwnetm aebchsamarthkhanwntwelkhcanwnetmodyimtxngeriykichopraekrmxun inkarkhanwncaichkhasng hrux VAR 55 kahndkha 55 ihkbtwaepr VAR VAR VAR 1 bwkhnungihtwaepr VAR sngektwaimichxksr VAR xikwithiinkarbwkhnungihkb VAR VAR xikwithiinkarbwkhnungihkb VAR echo VAR 22 na VAR ipkhunkb 22 aelwaethnthiinkhasng echo VAR 22 xikwithiinkarna VAR ipkhunkb 22 aelwaethnthiinkhasng khasng yngichinkartrwcsxbenguxnikh waepncringhruxethc echn if VAR Y 3 X 2 then echo Yes fi Z gt 23 amp amp echo Yes samarthichenguxnikh gt lt gt aela lt inkhasng aebchimsamarthkhanwnkhaepncanwnthsniymid miephiyng aela ethannthithaid epliynthisthang I O aebchmirupaebbkhasnghlayxyanginkarepliynthisthang I O twxyangechn thatxngkarepliyn standard output stdout aela standard error stderr ipekbinifl samarthichrupaebb command amp gt file sungngaykwabxrnechllthitxngphimph command gt file 2 gt amp 1 tngaetrun 2 05b epntnma aebchsamarthdungkhxkhwamstringipekha standard input eriykwa here documents hrux heredocs iddngni command lt lt stringthisngip standard input thainstringmitwxksrchxngwang hruxtwxksrphiessxun txngisstringinekhruxnghmaykhaphud twxyang Redirect standard output to a file write data close file reset stdout srangifledskhripethxr Filedescriptor FD 6 ihchiipyng stdout FD 1 exec 6 gt amp 1 epliyn stdout ihekhiynlngifl test data aethn exec 1 gt test data iskhxmulinifl echo data data data pidifl test data exec 1 gt amp epliyn stdout ihehmuxnkb FD 6 riest stdout ihklbehmuxnedim exec 1 gt amp 6 pid FD6 exec 6 gt amp epidaelapidifl epidifl test data ephuxxan ich FD 6 exec 6 lt test data xancnkwacacbifl while read u 6 dta do echo dta done pidifl test data exec 6 lt amp ekbphllphthkhxngkhasngphaynxk rnopraekrm find aelaekbphllphthiwintwaepr VAR khnhaiflthilngthaydwytwxksr h VAR find name h kartrwcsxbnphcnprkti aebch 3 0 snbsnunkartrwcsxbniphcnprktiintwaebchexngodyichrupaebbkhasngthikhlaykbphasaephirldngni string regex rupaebbkhxngniphcnprkticaehmuxnkbthikahndinhna regex 7 phllphththiidcaepn 0 thasayxkkhratrngkn aelaepn 1 thaimtrngkn khxkhwaminwngelbphayinniphcnprktisamarthxanidcaktwaepr BASH REMATCH dngtxipni if abcfoobarbletch foo bar bl then echo khxkhwamtrngkbthikhnha echo BASH REMATCH aesdng foobarbletch echo BASH REMATCH 1 aesdng bar echo BASH REMATCH 2 aesdng etch fi rupaebbkhasngni thanganmiprasiththiphaphkwakarrnopraekrm grep tanghak thainniphcnprktihruxsayxkkhramitwxksrwang hruxtwxksrphiess echn hrux txngisinekhruxnghmaykhaphud karaeplngaebkhsaelch khxkhwaminrup string cathukcdkarepnphiess khxkhwamdngklawcathukaeplngepnstring odythitwxksrthikhuntndwyaebksaelch cathukaeplngtamthikahndiwinphasasi dngtarangtxipni karaeplngkhxkhwam khxkhwamedim aeplngepn a twxksr alert hrux bell b twxksr backspace e twxksr escape f twxksr form feed n twxksr new line r twxksr carriage return t twxksr horizontal tab v twxksr vertical tab twxksr twxksr nnn twxksr 8 bitthimielkhthanaepdepn nnn hnungthungsamhlk xHH twxksr 8 bitthimielkhthansibhkepn HH hnunghruxsxnghlk cx twxksr control X hlngcakaeplngaelwkhxkhwamcaxyuphayinekhruxnghmaykhaphud ehmuxnkbwaimmitwxksr xyu khxkhwamtwxksrthixyuphayin cathukaepltam locale pccubn thaolekhlpccubnkhux C hrux POSIX ekhruxnghmaydxllarcaimmiphl aetthastringthukaeplaelaaethnthi phllphthcaxyuinekhruxnghmaykhaphud skhriperimthanganemuxaebcherimthangan mncathakhasnginskhriperimtntang knaelwaetkrni thaeriykaebchepnechlllxkxin hruxeriykodymixxpchn login mncaipkhnha etc profile tamdwy bash profile bash login aela profile tamladb mncarnkhasnginiflaerkthimnphbaelasamarthxanid samarthsngihaebchimrnkhasngodyxxpchn noprofile thalxkxinechllcbkarthangan aebchcaiprnkhasngin bash logout thami thaeriykaebchepnechllottxbthiimichlxkxin mncaipxanaelarnkhasngin bashrc thami samarthsngimihrniddwyxxpchn norc aelasngihrncakiflthikahnddwyxxpchn rcfile thaeriykaebchepnechllephuxrnskhript mncatrwcsxbtwaepr BASH ENV aelarnkhasnginiflthirabuaebchimichtwaepr PATH inkarkhnhaifl thaeriykaebchodyichchux sh mncaeliynaebbkarthangankhxngbxrnechllmakthisudethathithaid trabethathiyngepntammatrthan POSIX emuxepnlxkxinechllhruxmixxpchn login mncaipha etc profile aela profile tamladb aelasamarthich noprofile ephuxngdkarrnkhasngerimtn emuximepnlxkxinechll mncahaiflthikahndodytwaepr ENV aelaemuxeriykephuxrnskhripcaimrnkhasngerimtnely thaaebchthanganinohmd POSIX odyichxxphchn posix carnkhasngcakiflthirabuin ENV ethannephuxepniptammatrthan POSIX aebchyngtrwcwamnthukeriykcak sungmkepn rshd hruxim thaich kcarnkhasngin bashrc ykelikidodyxxphchn norc aelaepliyniflodyichxxphchn rcfile aetpkti rshd mkimsamarthrnechllodyrabuxxphchnehlani xangxing Bash Reference Manual subkhnemux 2008 06 21 Ramey Chet khlngkhxmulekaekbcakaehlngedimemux 2005 03 29 subkhnemux 2008 01 15 aehlngkhxmulxunewbephcopraekrm bash 2006 08 13 thi ewyaebkaemchchin ewbephc bash khxngokhrngkarknu