fbpx
วิกิพีเดีย

แบช

แบช (อังกฤษ: bash: Bourne-again shell) เป็นเชลล์ยูนิกซ์ที่พัฒนาขึ้นสำหรับโครงการกนู ชื่อเต็มของโปรแกรมล้อเลียนเชลล์อีกตัวคือ บอร์นเชลล์ (Bourne shell) แบชเขียนมาใช้แทนบอร์นเชลล์ซึ่งเขียนขึ้นสำหรับยูนิกซ์เวอร์ชัน 7 โดย สตีเฟน บอร์น (Stephen Bourne) เมื่อประมาณ ค.ศ. 1978 ไบรอัน ฟอกซ์ (Brian Fox) เขียนแบชไว้เมื่อ ค.ศ. 1987 ตั้งแต่ ค.ศ. 1990 เป็นต้นมาผู้ดูแลพัฒนาหลักคือ เช็ต เรมี (Chet Ramey) ในลีนุกซ์ส่วนใหญ่และในแมคโอเอสเท็นใช้แบชเป็นเชลล์มาตรฐาน แบชสามารถทำงานบนระบบปฏิบัติการยูนิกซ์และใกล้เคียง ยังปรับปรุงให้สามารถทำงานในไมโครซอฟท์วินโดวส์โดยโครงการ Cygwin และในดอสโดยโครงการ DJGPP ด้วย

รูปแบบคำสั่ง

รูปแบบคำสั่งของแบชครอบคลุมคำสั่งทั้งหมดของบอร์นเชลล์ ดังนั้นสคริปต์ที่เขียนสำหรับบอร์นเชลล์ส่วนใหญ่จึงสามารถรันใน 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 

สามารถใช้เงื่อนไข '==', '!=', '>', '<', '>=' และ '<=' ในคำสั่ง ((...))

แบชไม่สามารถคำนวณค่าเป็นจำนวนทศนิยมได้ มีเพียง คอร์นเชลล์ และ Z เชลล์ เท่านั้นที่ทำได้

เปลี่ยนทิศทาง 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

แบชยังตรวจว่ามันถูกเรียกจาก remote shell daemon ซึ่งมักเป็น rshd หรือไม่ ถ้าใช่ ก็จะรันคำสั่งใน ~/.bashrc (ยกเลิกได้โดยออพชัน --norc และเปลี่ยนไฟล์โดยใช้ออพชัน --rcfile แต่ปกติ rshd มักไม่สามารถรันเชลล์โดยระบุออพชันเหล่านี้)

อ้างอิง

  • "Bash Reference Manual". สืบค้นเมื่อ 2008-06-21.
  1. Ramey, Chet. "Bash - the GNU shell (Reflections and Lessons Learned)". สืบค้นเมื่อ 2008-01-15.

แหล่งข้อมูลอื่น

  • เว็บเพจโปรแกรม bash
  • เว็บเพจ bash ของโครงการกนู

แบช, งกฤษ, bash, bourne, again, shell, เป, นเชลล, กซ, ฒนาข, นสำหร, บโครงการกน, อเต, มของโปรแกรมล, อเล, ยนเชลล, กต, วค, บอร, นเชลล, bourne, shell, เข, ยนมาใช, แทนบอร, นเชลล, งเข, ยนข, นสำหร, บย, กซ, เวอร, โดย, สต, เฟน, บอร, stephen, bourne, เม, อประมาณ, 1978, ไ. 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 1 inlinuksswnihyaelainaemkhoxexsethnichaebchepnechllmatrthan aebchsamarththanganbnrabbptibtikaryuniksaelaiklekhiyng yngprbprungihsamarththanganinimokhrsxfthwinodwsodyokhrngkar Cygwin aelaindxsodyokhrngkar DJGPP dwyGNU Bourne again shellphuphthnaecht ermirunlasud3 1 7 thnwakhm ph s 2548rabbptibtikarlinuks aemkhoxexsethn yuniks imokhrsxfthwinodws phanthang Cygwin praephthechllyunikssyyaxnuyatGPLewbistewbephckhxng GNU bash enuxha 1 rupaebbkhasng 1 1 karkhanwnelkhcanwnetm 1 2 epliynthisthang I O 1 3 kartrwcsxbnphcnprkti 1 4 karaeplngaebkhsaelch 2 skhriperimthangan 3 xangxing 4 aehlngkhxmulxunrupaebbkhasng aekikhrupaebbkhasngkhxngaebchkhrxbkhlumkhasngthnghmdkhxngbxrnechll dngnnskhriptthiekhiynsahrbbxrnechllswnihycungsamarthrnin bash idodyimtxngaekikh camiykewnkechn skhriptthieriykichtwaeprphiessinbxrnechll hruxichkhasngphayinkhxngbxrnechllrupaebbkhasnginaebchyngidrbaenwkhwamkhidcak khxrnechll ksh aela siechll csh echn karaekikhkhasng cakhasngeka twaepr RANDOM aela PPID epntn ewlaichepnechllthangbrrthdkhasng aebchcaetimchuxopraekrm chuxifl chuxtwaepr ihkhrbodyxtonmt emuxphuichkdpum TABtxipniepntwxyangrupaebbkhasngthiephimetimmainaebchsungbxrnechllimmi karkhanwnelkhcanwnetm aekikh 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 khxrnechll aela Z echll ethannthithaid epliynthisthang I O aekikh 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 txngisstringinekhruxnghmaykhaphudtwxyang 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 aekikh aebch 3 0 snbsnunkartrwcsxbniphcnprktiintwaebchexngodyichrupaebbkhasngthikhlaykbphasaephirldngni string regex rupaebbkhxngniphcnprkticaehmuxnkbthikahndinhnaaemnephc 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 aekikh 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 Xhlngcakaeplngaelwkhxkhwamcaxyuphayinekhruxnghmaykhaphud ehmuxnkbwaimmitwxksr xyukhxkhwamtwxksrthixyuphayin cathukaepltamolekhl locale pccubn thaolekhlpccubnkhux C hrux POSIX ekhruxnghmaydxllarcaimmiphl aetthastringthukaeplaelaaethnthi phllphthcaxyuinekhruxnghmaykhaphud skhriperimthangan aekikhemuxaebcherimthangan mncathakhasnginskhriperimtntang knaelwaetkrnithaeriykaebchepnechlllxkxin hruxeriykodymixxpchn login mncaipkhnha etc profile tamdwy bash profile bash login aela profile tamladb mncarnkhasnginiflaerkthimnphbaelasamarthxanid samarthsngihaebchimrnkhasngodyxxpchn noprofilethalxkxinechllcbkarthangan aebchcaiprnkhasngin bash logout thamithaeriykaebchepnechllottxbthiimichlxkxin mncaipxanaelarnkhasngin bashrc thami samarthsngimihrniddwyxxpchn norc aelasngihrncakiflthikahnddwyxxpchn rcfilethaeriykaebchepnechllephuxrnskhript mncatrwcsxbtwaepr BASH ENV aelarnkhasnginiflthirabuaebchimichtwaepr PATH inkarkhnhaiflthaeriykaebchodyichchux sh mncaeliynaebbkarthangankhxngbxrnechllmakthisudethathithaid trabethathiyngepntammatrthan POSIX emuxepnlxkxinechllhruxmixxpchn login mncaipha etc profile aela profile tamladb aelasamarthich noprofile ephuxngdkarrnkhasngerimtn emuximepnlxkxinechll mncahaiflthikahndodytwaepr ENV aelaemuxeriykephuxrnskhripcaimrnkhasngerimtnelythaaebchthanganinohmd POSIX odyichxxphchn posix carnkhasngcakiflthirabuin ENV ethannephuxepniptammatrthan POSIXaebchyngtrwcwamnthukeriykcak remote shell daemon sungmkepn rshd hruxim thaich kcarnkhasngin bashrc ykelikidodyxxphchn norc aelaepliyniflodyichxxphchn rcfile aetpkti rshd mkimsamarthrnechllodyrabuxxphchnehlani xangxing aekikh Bash Reference Manual subkhnemux 2008 06 21 Ramey Chet Bash the GNU shell Reflections and Lessons Learned subkhnemux 2008 01 15 aehlngkhxmulxun aekikhewbephcopraekrm bash ewbephc bash khxngokhrngkarknuekhathungcak https th wikipedia org w index php title aebch amp oldid 4735146, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม