#01. สคริปต์ทุบตีคืออะไร?
สคริปต์ทุบตีเป็นภาษาโปรแกรมเชลล์ โดยทั่วไป เราเรียกใช้คำสั่งเชลล์หลายประเภทจากเทอร์มินัลโดยพิมพ์แต่ละคำสั่งแยกกันซึ่งต้องใช้เวลาและความพยายาม หากเราต้องการรันคำสั่งเดิมอีกครั้ง เราต้องรันคำสั่งทั้งหมดจากเทอร์มินัลอีกครั้ง แต่ด้วยการใช้สคริปต์ทุบตี เราสามารถเก็บคำสั่งเชลล์จำนวนมากไว้ในไฟล์ทุบตีไฟล์เดียวและเรียกใช้ไฟล์ได้ทุกเมื่อด้วยคำสั่งเดียว งานที่เกี่ยวข้องกับการดูแลระบบ การติดตั้งโปรแกรม การสำรองข้อมูลดิสก์ การประเมินบันทึก ฯลฯ สามารถทำได้โดยใช้สคริปต์ทุบตีที่เหมาะสม
#02. ข้อดีของการใช้สคริปต์ทุบตีคืออะไร?
สคริปต์ทุบตีมีข้อดีหลายประการซึ่งอธิบายไว้ด้านล่าง:
- ใช้งานง่ายและเรียนรู้
- งานที่ทำด้วยตนเองจำนวนมากที่จำเป็นต้องเรียกใช้บ่อยๆ สามารถทำได้โดยอัตโนมัติโดยการเขียนสคริปต์ทุบตี
- ลำดับของคำสั่งเชลล์หลายคำสั่งสามารถดำเนินการได้ด้วยคำสั่งเดียว
- สคริปต์ทุบตีที่เขียนในระบบปฏิบัติการ Linux หนึ่งระบบสามารถเรียกใช้งานในระบบปฏิบัติการ Linux อื่นได้อย่างง่ายดาย ดังนั้นจึงพกพาได้
- การดีบักใน bash นั้นง่ายกว่าภาษาโปรแกรมอื่นๆ
- ไวยากรณ์บรรทัดคำสั่งและคำสั่งที่ใช้ในเทอร์มินัลจะคล้ายกับคำสั่งและไวยากรณ์ที่ใช้ในสคริปต์ทุบตี
- สคริปต์ทุบตีสามารถใช้เพื่อเชื่อมโยงกับไฟล์สคริปต์อื่น
#03. พูดถึงข้อเสียของสคริปต์ทุบตี
ข้อเสียบางประการของ bash script มีการกล่าวถึงด้านล่าง:
- ทำงานช้ากว่าภาษาอื่น
- สคริปต์ที่ไม่เหมาะสมอาจทำให้กระบวนการทั้งหมดเสียหายและสร้างข้อผิดพลาดที่ซับซ้อนได้
- ไม่เหมาะสำหรับการพัฒนาแอปพลิเคชันขนาดใหญ่และซับซ้อน
- มีโครงสร้างข้อมูลน้อยกว่าเมื่อเปรียบเทียบกับภาษาโปรแกรมมาตรฐานอื่นๆ
#04. ตัวแปรประเภทใดที่ใช้ใน bash?
ตัวแปรสองประเภทสามารถใช้ในสคริปต์ทุบตี เหล่านี้คือ:
ตัวแปรระบบ
ตัวแปรที่กำหนดไว้ล่วงหน้าและดูแลโดยระบบปฏิบัติการ Linux เรียกว่าตัวแปรระบบ ตัวแปรประเภทนี้มักใช้อักษรตัวพิมพ์ใหญ่ ค่าเริ่มต้นของตัวแปรเหล่านี้สามารถเปลี่ยนแปลงได้ตามความต้องการ
`ตั้งค่า', `env` และ ` printenv คำสั่ง ` สามารถใช้พิมพ์รายการตัวแปรระบบได้
ตัวอย่าง:
#!/bin/bash
# ตัวแปรระบบการพิมพ์
#พิมพ์ชื่อเชลล์ทุบตี
โยนออก $BASH
# พิมพ์ Bash shell Version
โยนออก $BASH_VERSION
# พิมพ์ชื่อไดเรกทอรีหน้าแรก
โยนออก $HOME
ตัวแปรที่ผู้ใช้กำหนด
ตัวแปรที่สร้างและดูแลโดยผู้ใช้เรียกว่าตัวแปรที่ผู้ใช้กำหนดเอง พวกเขาจะเรียกว่าตัวแปรท้องถิ่น ตัวแปรประเภทนี้สามารถประกาศได้โดยใช้ตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่หรือทั้งตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก แต่จะดีกว่าที่จะหลีกเลี่ยงการใช้อักษรตัวพิมพ์ใหญ่ทั้งหมดเพื่อแยกความแตกต่างของตัวแปรจากตัวแปรระบบ
ตัวอย่าง:
หนึ่ง=100
โยนออก $num
#05. จะประกาศและลบตัวแปรใน bash ได้อย่างไร?
ตัวแปรสามารถประกาศใน bash ตามประเภทข้อมูลหรือไม่มีประเภทข้อมูล หากมีการประกาศตัวแปร bash โดยไม่มี ประกาศ คำสั่งแล้วตัวแปรจะถือว่าเป็นสตริง ตัวแปร Bash ถูกประกาศด้วย ประกาศ คำสั่งกำหนดชนิดข้อมูลของตัวแปรในขณะประกาศ
-NS , -i, -a, -A, -l, -u, -t และ -NS สามารถใช้ได้กับ ประกาศ คำสั่งประกาศตัวแปรที่มีข้อมูลประเภทต่างๆ
ตัวอย่าง:
#!/bin/bash#ประกาศตัวแปรแบบไม่มีประเภท
หนึ่ง=10
#ค่าจะรวมกันแต่ไม่บวกเพิ่ม
ผลลัพธ์=$num+ยี่สิบ
โยนออก $ผลลัพธ์
#ประกาศตัวแปรด้วยชนิดจำนวนเต็ม
ประกาศ -ผม หนึ่ง=10
#ค่าจะถูกเพิ่ม
ประกาศ -ผม ผลลัพธ์=num+ยี่สิบ
โยนออก $ผลลัพธ์
ยกเลิกการตั้งค่า คำสั่งใช้เพื่อลบตัวแปร bash ตัวแปรจะไม่สามารถเข้าถึงได้หรือไม่ได้กำหนดหลังจากใช้ ยกเลิกการตั้งค่า สั่งการ.
ตัวอย่าง:
#!/bin/bashNS='คำแนะนำลินุกซ์'
โยนออก $ str
ยกเลิกการตั้งค่า $ str
โยนออก $ str
#06. จะเพิ่มความคิดเห็นในสคริปต์ทุบตีได้อย่างไร?
ความคิดเห็นบรรทัดเดียวและหลายบรรทัดสามารถใช้ในสคริปต์ทุบตี ' # ' สัญลักษณ์ใช้สำหรับความคิดเห็นบรรทัดเดียว '<<’ สัญลักษณ์ที่มีตัวคั่นและ ':' ด้วย single (') ใช้สำหรับเพิ่มความคิดเห็นแบบหลายบรรทัด
ตัวอย่าง:
#!/bin/bash#พิมพ์ข้อความ [คอมเม้นบรรทัดเดียว]
โยนออก 'การเขียนโปรแกรมทุบตี'
<
ของตัวเลขสองตัว [ความคิดเห็นหลายบรรทัด]
เพิ่มความเห็น
หนึ่ง=25+35
โยนออก $num
:'
รวมสอง
ข้อมูลสตริง [ความคิดเห็นหลายบรรทัด]
'
สตริง='สวัสดี'
โยนออก $string' โลก'
#07. คุณจะรวมสตริงในสคริปต์ทุบตีได้อย่างไร?
ค่าสตริงสามารถรวมกันเป็น bash ได้หลายวิธี โดยปกติค่าสตริงจะถูกรวมโดยการวางเข้าด้วยกัน แต่มีวิธีอื่นในการทุบตีเพื่อรวมข้อมูลสตริง
ตัวอย่าง:
#!/bin/bash#เริ่มต้นตัวแปร
str1='PHP'
str2='ทุบตี'
str3='เพิร์ล'
#พิมพ์สตริงพร้อมเว้นวรรค
โยนออก $str1 $str2 $str3
#รวมตัวแปรทั้งหมดและเก็บไว้ในตัวแปรอื่น
NS='$str1,$str2และ$str3'
#รวมข้อมูลสตริงอื่นๆ กับค่าที่มีอยู่ของสตริง
str + =' เป็นภาษาสคริปต์'
#พิมพ์สตริง
โยนออก $ str
#08. คำสั่งใดที่ใช้ในการพิมพ์เอาต์พุตใน bash?
`สะท้อน` และ `printf` คำสั่งสามารถใช้เพื่อพิมพ์เอาต์พุตใน bash `ก้อง คำสั่ง ` ใช้สำหรับพิมพ์ผลลัพธ์อย่างง่าย และ `printf` คำสั่งใช้ในการพิมพ์ผลลัพธ์ที่จัดรูปแบบ
ตัวอย่าง:
#!/bin/bash#พิมพ์ข้อความ
โยนออก 'ยินดีต้อนรับสู่ LinuxHint'
งาน='linuxhint.com'
#พิมพ์ข้อความที่จัดรูปแบบ
printf '%s เป็นเว็บไซต์บล็อกยอดนิยมNS' $site
#09. จะรับอินพุตจากเทอร์มินัลใน bash ได้อย่างไร?
`อ่าน` คำสั่งใช้ในสคริปต์ทุบตีเพื่อรับอินพุตจากเทอร์มินัล
ตัวอย่าง:
#!/bin/bash#พิมพ์ข้อความ
โยนออก 'ใส่ชื่อของคุณ'
#รับข้อมูลจากผู้ใช้
อ่านชื่อ
# พิมพ์ค่าของ $name ด้วยสตริงอื่น ๆ
โยนออก 'ชื่อของคุณ$name'
#10. จะใช้อาร์กิวเมนต์บรรทัดคำสั่งใน bash ได้อย่างไร?
อาร์กิวเมนต์บรรทัดคำสั่งอ่านโดย $1, $2, $3…$n ตัวแปร ค่าอาร์กิวเมนต์บรรทัดคำสั่งมีให้ในเทอร์มินัลเมื่อรันสคริปต์ทุบตี $ 1 ใช้ในการอ่านอาร์กิวเมนต์แรก $ 2 ใช้เพื่ออ่านอาร์กิวเมนต์ที่สองเป็นต้น
ตัวอย่าง:
#!/bin/bash#ตรวจสอบอาร์กิวเมนต์ใด ๆ ที่ให้ไว้หรือไม่
ถ้า [[ $ # -eq 0 ]];แล้ว
โยนออก 'ไม่มีการโต้แย้งใดๆ'
ทางออก 0
เป็น
#เก็บค่าอาร์กิวเมนต์แรก
สี=$ 1
# พิมพ์อาร์กิวเมนต์ด้วยสตริงอื่น
printf 'สีที่ชอบคือ %sNS' $ สี
#11. bash เป็นภาษาที่พิมพ์น้อยหรือไม่? ทำไม?
ใช่ bash ถือเป็นภาษาที่พิมพ์น้อยหรือหลวมเพราะไม่จำเป็นต้องประกาศประเภทของข้อมูลในขณะที่ประกาศตัวแปร ตัวแปร bash ทั้งหมดถือเป็นสตริงโดยค่าเริ่มต้น และประเภทของตัวแปรจะถูกตั้งค่าตามค่าปัจจุบัน ตัวแปรทุบตีที่มีประเภทข้อมูลสามารถกำหนดได้โดยใช้ ประกาศ คำสั่งด้วยตัวเลือกเฉพาะ แต่ตัวเลือกในการกำหนดประเภทข้อมูลมีจำกัดและไม่รองรับข้อมูลทุกประเภท ตัวอย่างเช่น, ลอย ไม่สามารถประกาศชนิดข้อมูลได้โดยใช้ ประกาศ สั่งการ.
ตัวอย่าง:
#!/bin/bash#ประเภทข้อมูลของ $myVar เป็นสตริงโดยปริยาย
myVar=29
# พิมพ์ตัวแปร
โยนออก $myVar
# ประกาศตัวแปรจำนวนเต็มจำนวน $number ด้วยค่า67
ประกาศ -ผม ตัวเลข=67
#พิมพ์ตัวแปร
โยนออก $number
# กำหนดข้อมูลสตริงลงในตัวแปรตัวเลข บรรทัดต่อไปนี้จะสร้าง
# ข้อผิดพลาดทางไวยากรณ์และค่าของ $number จะไม่เปลี่ยนแปลง
ตัวเลข='ฉันชอบทุบตี'
โยนออก $number
#12. จะอ่านคำหรือคอลัมน์ที่สองจากแต่ละบรรทัดของไฟล์ได้อย่างไร
คำหรือคอลัมน์ที่สองของไฟล์สามารถอ่านได้ในสคริปต์ทุบตีโดยใช้คำสั่งทุบตีต่างๆ เช่น `awk` `sed` เป็นต้น ที่นี่ การใช้ `awk` แสดงในตัวอย่างต่อไปนี้
ตัวอย่าง: สมมติว่าไฟล์ course.txt มีเนื้อหาดังต่อไปนี้ และเราได้พิมพ์เฉพาะคำที่สองของแต่ละบรรทัดของไฟล์นี้
โครงสร้างข้อมูล CSE303
CSE408 การเขียนโปรแกรม Unix#!/bin/bash
# สคริปต์ต่อไปนี้จะพิมพ์คำที่สองของแต่ละบรรทัดจากไฟล์ course.txt
# ผลลัพธ์ของคำสั่ง cat จะส่งไปยังคำสั่ง awk ที่จะอ่านคำที่สอง
#แต่ละสาย.
โยนออก ``แมวcourse.txt| awk '{พิมพ์ $2}'``
#13. จะประกาศและเข้าถึงตัวแปรอาร์เรย์ในทุบตีได้อย่างไร?
ทั้งอาร์เรย์ที่เป็นตัวเลขและเชื่อมโยงได้รับการสนับสนุนโดยสคริปต์ทุบตี ตัวแปรอาร์เรย์สามารถประกาศได้ทั้งแบบมีและไม่มีคำสั่งประกาศ -ถึง ใช้ตัวเลือกกับคำสั่งประกาศเพื่อกำหนดอาร์เรย์ตัวเลขและ -ถึง ใช้ตัวเลือกกับคำสั่งประกาศเพื่อกำหนดอาร์เรย์ที่เชื่อมโยงในทุบตี หากไม่มีคำสั่งประกาศ อาร์เรย์ตัวเลขสามารถกำหนดได้เฉพาะในทุบตี
ตัวอย่าง:
#!/bin/bash# ประกาศอาร์เรย์ตัวเลขอย่างง่าย
arr1=(CodeIgniter Laravel ReactJS)
# พิมพ์ค่าองค์ประกอบแรกของ $arr1
โยนออก $ {arr1 [0] {
# ประกาศอาร์เรย์ตัวเลขโดยใช้คำสั่งประกาศ
ประกาศ -ถึง arr2=(HTML CSS JavaScript)
# พิมพ์ค่าองค์ประกอบที่สองของ $arr2
โยนออก ${arr2[1]}
# ประกาศอาเรย์โดยใช้คำสั่งประกาศ
ประกาศ -ถึง arr3=( [กรอบ]=ลาราเวล[CMS]=เวิร์ดเพรส[ห้องสมุด]=JQuery)
# พิมพ์ค่าองค์ประกอบที่สามของ $arr3
โยนออก ${arr3[คลัง]}
องค์ประกอบทั้งหมดของอาร์เรย์สามารถเข้าถึงได้โดยใช้สัญลักษณ์วนซ้ำหรือ '*' เป็นดัชนีอาร์เรย์
#14. คำสั่งแบบมีเงื่อนไขสามารถใช้ใน bash ได้อย่างไร?
คำสั่งเงื่อนไขที่พบบ่อยที่สุดในภาษาการเขียนโปรแกรมส่วนใหญ่คือ if-elseif-else คำแถลง. ไวยากรณ์ของ if-elseif-อื่น คำสั่งใน bash นั้นแตกต่างจากภาษาโปรแกรมอื่นเล็กน้อย 'ถ้า' คำสั่งสามารถประกาศได้สองวิธีในสคริปต์ทุบตีและทุกประเภทของ 'ถ้า' ต้องปิดบล๊อกด้วย 'เป็น' . 'ถ้า' คำสั่งสามารถกำหนดได้ด้วยวงเล็บที่สามหรือวงเล็บแรกเหมือนกับภาษาโปรแกรมอื่น ๆ
ไวยากรณ์:
ถึง.
แล้ว
งบ
เป็น
NS.
ถ้า [สภาพ];แล้วงบ1
อื่น
คำแถลง2
เป็น
ค.
ถ้า [สภาพ];แล้วคำแถลง1
เอลฟ์[สภาพ];แล้ว
คำแถลง2
….
อื่น
คำสั่ง n
เป็น
ตัวอย่าง:
#!/bin/bash# กำหนดค่าให้กับ $n
NS=30
#เช็ค $n มากกว่า 100 หรือเปล่า
ถ้า [ $n -gt 100 ];แล้ว
โยนออก '$nน้อยกว่า 100'
# ตรวจสอบ $n id ที่มากกว่า 50 หรือไม่
เอลฟ์ [ $n -gt ห้าสิบ ];แล้ว
โยนออก '$nน้อยกว่า 50'
อื่น
โยนออก '$nน้อยกว่า 50'
เป็น
#15. จะเปรียบเทียบค่าใน bash ได้อย่างไร?
ตัวดำเนินการเปรียบเทียบหกประเภทสามารถใช้ใน bash เพื่อเปรียบเทียบค่าได้ มีสองวิธีในการใช้ตัวดำเนินการเหล่านี้ใน bash ขึ้นอยู่กับชนิดข้อมูล สิ่งเหล่านี้ถูกกล่าวถึงด้านล่าง
การเปรียบเทียบสตริง | Comarison จำนวนเต็ม | คำอธิบาย |
== | -eq | ใช้สำหรับตรวจสอบความเท่าเทียมกัน |
! = | -เกิด | ใช้สำหรับตรวจสอบความไม่เท่าเทียมกัน |
< | -lt | จะใช้เช็คค่าแรกน้อยกว่าค่าที่สองหรือเปล่า |
> | -gt | จะใช้ตรวจสอบว่าค่าแรกมากกว่าค่าที่สองหรือไม่ |
<= | -NS | จะใช้เช็คค่าแรกน้อยกว่าหรือเท่ากับค่าที่สองหรือไม่ |
> = | -ให้ | ใช้ตรวจสอบว่าค่าแรกมากกว่าหรือเท่ากับค่าที่สองหรือไม่ |
ตัวอย่าง:
#!/bin/bash# เริ่มต้น $n
NS=130
หรือ='สม่ำเสมอ'
# ตรวจสอบ $n มากกว่าหรือเท่ากับ 100 หรือไม่ได้ใช้ '–ge'
ถ้า [ $n -ให้ 100 ];แล้ว
โยนออก '$nมากกว่าหรือเท่ากับ 100'
อื่น
โยนออก '$nน้อยกว่า 100'
เป็น
# ตรวจสอบ $n เป็นคู่หรือคี่โดยใช้ตัวดำเนินการ '=='
ถ้า (( $ o=='สม่ำเสมอ' ));แล้ว
โยนออก 'เลขคู่'
อื่น
โยนออก 'ตัวเลขเป็นเลขคี่'
เป็น
#16. คำสั่งเงื่อนไขใดสามารถใช้แทนคำสั่ง if-elseif-else ใน bash ได้?
'กรณี' คำสั่งสามารถใช้เป็นทางเลือกแทน tp if-elseif-if คำแถลง. ไวยากรณ์สำหรับ 'กรณี' คำสั่งในสคริปต์ทุบตีแตกต่างจาก สวิตช์กรณี คำสั่งของภาษาโปรแกรมอื่นๆ 'กรณี' บล็อกถูกปิดโดย 'เอสแซค' คำสั่งในทุบตี เลขที่ ' หยุดพัก 'ใช้คำสั่งภายใน' กรณี ' บล็อกที่จะยุติจากบล็อก
ไวยากรณ์:
กรณี ในรูปแบบการจับคู่1)คำสั่ง;;
รูปแบบการจับคู่2)คำสั่ง;;
……
รูปแบบการจับคู่ n)คำสั่ง;;
esac
ตัวอย่าง:
#!/bin/bash#เริ่มต้นตัวแปร $ticket
ตั๋ว=101
# เปรียบเทียบมูลค่าตั๋ว $ กับ 23, 101 และ 503
กรณี $ตั๋ว ใน
2. 3)
# พิมพ์ข้อความถ้าค่าเป็น23
โยนออก 'ได้รางวัลที่หนึ่ง';;
101)
# พิมพ์ข้อความถ้าค่าเป็น101
โยนออก 'คุณได้รับรางวัลที่สอง';;
503)
# พิมพ์ข้อความถ้าค่าเป็น 503
โยนออก 'คุณได้รับรางวัลที่สาม';;
*)
# พิมพ์ข้อความถ้าค่าไม่ตรงกับ 23, 101 และ 503
โยนออก 'ขอโทษนะ ไว้คราวหน้าลองใหม่นะ'
ทางออก 0;;
esac
#17. ลูปประเภทใดบ้างที่สามารถใช้ใน bash ได้?
ลูปสามประเภทได้รับการสนับสนุนโดยสคริปต์ทุบตี เหล่านี้คือ ในขณะที่สำหรับ และ จนกระทั่ง ลูป ลูปใน bash ตรวจสอบเงื่อนไขที่จุดเริ่มต้นของลูป ในขณะที่ วนซ้ำทำงานจนกว่าเงื่อนไขจะเป็นจริงและ จนกระทั่ง วนซ้ำทำงานจนกว่าเงื่อนไขจะเป็นเท็จ มีสองวิธีในการใช้ สำหรับ ห่วง หนึ่งคือเรื่องทั่วไป สำหรับ ลูปที่มีสามส่วนและอีกส่วนคือ สำหรับใน ห่วง การใช้งานของลูปทั้งสามนี้แสดงไว้ในตัวอย่างต่อไปนี้
ตัวอย่าง:
#!/bin/bash# เริ่มต้น $n
NS=5
# คำนวณกำลังสองของ 5-1 โดยใช้ while loop
ในขณะที่ [ $n -gt 0 ]
ทำ
sqr= $((NS*NS))
โยนออก 'จตุรัสของ$nเป็น$sqr'
((NS--))
เสร็จแล้ว
# คำนวณกำลังสอง 5-1 โดยใช้ for loop
สำหรับ (( ผม=5; ผม>0; ผม--))
ทำ
sqr= $((ผม*ผม))
โยนออก 'จตุรัสของ$iเป็น$sqr'
เสร็จแล้ว
# เริ่มต้น $x
NS=5
# คำนวณกำลังสองของ 5-1 โดยใช้จนกระทั่งวง
จนกระทั่ง [ $ x -NS 0 ]
ทำ
sqr= $((NS*NS))
โยนออก 'จตุรัสของ$ xเป็น$sqr'
((NS--))
เสร็จแล้ว
#18. รูทีนย่อยสามารถประกาศและเรียกใน bash ได้อย่างไร?
ใน bash ฟังก์ชันหรือโพรซีเดอร์เรียกว่ารูทีนย่อย การประกาศและการเรียกรูทีนย่อยใน bash นั้นแตกต่างจากภาษาอื่น ไม่สามารถประกาศอาร์กิวเมนต์ในรูทีนย่อยต่างจากภาษาโปรแกรมมาตรฐานอื่นๆ แต่ตัวแปรโลคัลสามารถกำหนดได้ภายในรูทีนย่อยโดยใช้คำสั่ง 'ท้องถิ่น' คำสำคัญ.
ตัวอย่าง:
#!/bin/bash# เริ่มต้นตัวแปร $x และ $y ซึ่งเป็น global
NS=10
และ=35
#ประกาศฟังก์ชั่น
myFunc() {
# ประกาศตัวแปรท้องถิ่น $x
ท้องถิ่น NS=สิบห้า
# กำหนดตัวแปรส่วนกลางใหม่ $y
และ=25
# คำนวณผลรวมของ $x และ $y
กับ= $((x + y))
# พิมพ์ผลรวมของตัวแปรท้องถิ่น $x และตัวแปรส่วนกลาง $y
โยนออก 'ผลรวมของ$ xและ$ yเท่ากับ$ z'
}
#เรียกใช้งาน
myFunc
# พิมพ์ผลรวมของตัวแปรส่วนกลาง $x และ $y
โยนออก 'ผลรวมของ$ xและ$ yเท่ากับ$ z'
#19. จะตัดและพิมพ์บางส่วนของข้อมูลสตริงใน bash ได้อย่างไร?
Bash ไม่มีฟังก์ชันในตัวเหมือนกับภาษาอื่น ๆ ในการตัดข้อมูลสตริงบางส่วน แต่การใช้การขยายพารามิเตอร์ใด ๆ ค่าสตริงสามารถตัดเป็นทุบตี สามารถกำหนดสามส่วนในการขยายพารามิเตอร์โดยแยกด้วยเครื่องหมายทวิภาคเพื่อตัดส่วนใดส่วนหนึ่งของข้อมูลสตริง ในที่นี้ สองส่วนแรกเป็นข้อบังคับ และส่วนสุดท้ายเป็นทางเลือก ส่วนแรกประกอบด้วยตัวแปรสตริงหลักที่จะใช้ในการตัด ส่วนที่สองคือตำแหน่งเริ่มต้นจากตำแหน่งที่จะตัดสตริง และส่วนที่สามคือความยาวของสตริงที่ตัด ตำแหน่งเริ่มต้นต้องนับจาก 0 และความยาวต้องนับจาก 1 ของสายหลักเพื่อรับค่าการตัด
ตัวอย่าง:
#!/bin/bash# เริ่มต้นค่าสตริงเป็น $string
สตริง='ภาษาสคริปต์ Python'
# ตัดค่าสตริงจากตำแหน่ง 7 ไปยังจุดสิ้นสุดของสตริง
โยนออก ${สตริง:7}
# ตัดค่าสตริง 9 ตัวอักษรจากตำแหน่ง 7
โยนออก ${สตริง:7:9}
# ตัดค่าสตริงจาก 17 เป็น 20
โยนออก ${สตริง:17:-4}
#20. พูดถึงวิธีการดำเนินการทางคณิตศาสตร์ใน bash บ้างไหม?
การดำเนินการเลขคณิตสามารถทำได้หลายวิธีในทุบตี 'ให้', 'expr', 'bc' และ วงเล็บคู่ เป็นวิธีที่พบได้บ่อยที่สุดในการดำเนินการทางคณิตศาสตร์ในทุบตี การใช้คำสั่งเหล่านี้แสดงในตัวอย่างต่อไปนี้
ตัวอย่าง:
#!/bin/bash# การคำนวณการลบโดยใช้ expr และการขยายพารามิเตอร์
var1= $( ด่วน 120-100 )
#พิมพ์ผล
โยนออก $ var1
# คำนวณการบวกโดยใช้คำสั่ง let
ปล่อย var2=200+300
#พิมพ์ผล
โยนออก $var2
# คำนวณและพิมพ์ค่าของการหารโดยใช้ 'bc' เพื่อให้ได้ผลลัพธ์
# ด้วยค่าเศษส่วน
โยนออก 'มาตราส่วน=2; 44/7' | bc
# คำนวณค่าของการคูณโดยใช้วงเล็บคู่
var3= $(( 5*3 ))
#พิมพ์ผล
โยนออก $var3
#21. จะตรวจสอบไดเร็กทอรีที่มีอยู่หรือไม่ใช้ bash ได้อย่างไร?
Bash มีคำสั่งทดสอบมากมายเพื่อตรวจสอบว่ามีไฟล์หรือไดเร็กทอรีอยู่หรือไม่ และชนิดของไฟล์ '-NS' ตัวเลือกใช้กับเส้นทางไดเรกทอรีเป็นคำสั่งแบบมีเงื่อนไขเพื่อตรวจสอบว่าไดเรกทอรีนั้นมีอยู่หรือไม่อยู่ในทุบตี หากไดเร็กทอรีนั้นมีอยู่ มันจะคืนค่า จริง ไม่เช่นนั้นจะคืนค่า เท็จ
ตัวอย่าง:
#!/bin/bash# กำหนดไดเร็กทอรีด้วยพาธในตัวแปร $path
เส้นทาง='/home/ubuntu/temp'
#ตรวจสอบไดเร็กทอรีว่ามีอยู่หรือไม่
ถ้า [ -NS '$เส้นทาง' ];แล้ว
# พิมพ์ข้อความหากมีไดเรกทอรีอยู่
โยนออก 'มีไดเรกทอรีอยู่'
อื่น
# พิมพ์ข้อความหากไม่มีไดเร็กทอรี
โยนออก 'ไม่มีไดเรกทอรี'
เป็น
#22. สคริปต์ทุบตีจะถูกยกเลิกโดยไม่ดำเนินการคำสั่งทั้งหมดได้อย่างไร
โดยใช้ 'ออก' คำสั่ง สคริปต์ทุบตีสามารถยุติได้โดยไม่ต้องดำเนินการคำสั่งทั้งหมด สคริปต์ต่อไปนี้จะตรวจสอบว่ามีไฟล์ใดไฟล์หนึ่งอยู่หรือไม่ หากมีไฟล์อยู่ ไฟล์จะพิมพ์อักขระทั้งหมดของไฟล์ และหากไม่มีไฟล์ สคริปต์จะยุติสคริปต์โดยแสดงข้อความ
ตัวอย่าง:
#!/bin/bash# เริ่มต้นชื่อไฟล์ให้กับตัวแปร $filename
ชื่อไฟล์='หลักสูตร.txt'
# ตรวจสอบว่าไฟล์มีอยู่หรือไม่โดยใช้ -f option
ถ้า [ -NS '$ชื่อไฟล์' ];แล้ว
# พิมพ์ข้อความหากมีไฟล์อยู่
โยนออก '$ชื่อไฟล์มีอยู่'
อื่น
# พิมพ์ข้อความหากไม่มีไฟล์
โยนออก '$ชื่อไฟล์ไม่มีอยู่'
# ยุติสคริปต์
ทางออก 1
เป็น
# นับความยาวของไฟล์หากมีไฟล์อยู่
ระยะเวลา=``ห้องน้ำ -ค $ชื่อไฟล์``
#พิมพ์ความยาวของไฟล์
โยนออก 'ตัวละครทั้งหมด -$length'
#23. การใช้คำสั่ง break และ continue ใน bash คืออะไร?
หยุดพัก คำสั่งใช้เพื่อยุติการวนซ้ำโดยไม่ต้องทำซ้ำทั้งหมดตามเงื่อนไขและ ดำเนินต่อ คำสั่งถูกใช้ในลูปเพื่อละเว้นบางคำสั่งตามเงื่อนไข การใช้งานของ หยุดพัก และ ดำเนินต่อ ได้อธิบายไว้ในตัวอย่างต่อไปนี้
ตัวอย่าง:
#!/bin/bash# เริ่มต้นตัวแปร $i ถึง 0 เพื่อเริ่มลูป
ผม=0
#ลูปจะวนซ้ำ 10 ครั้ง
ในขณะที่ [ $i -NS 10 ]
ทำ
# เพิ่มค่า $i ขึ้น 1
((ฉัน++))
# หากค่าของ $i เท่ากับ 8 ให้ยุติการวนซ้ำโดยใช้คำสั่ง 'break'
ถ้า [ $i -eq 8 ];แล้ว
หยุดพัก;
เป็น
# ถ้าค่าของ $i มากกว่า 6 ให้ข้ามคำสั่งสุดท้ายของ loop
#โดยใช้คำสั่งต่อ
ถ้า [ $i -ให้ 6 ];แล้ว
ดำเนินต่อ;
เป็น
โยนออก 'มูลค่าปัจจุบันของ i =$i'
เสร็จแล้ว
# พิมพ์ค่าของ $i หลังจากสิ้นสุดจากลูป
โยนออก 'ตอนนี้ค่าของ i =$i'
#24. วิธีทำให้ไฟล์ bash ทำงานได้?
สามารถสร้างไฟล์ bash ที่ปฏิบัติการได้โดยใช้ 'ชมมด' สั่งการ. สามารถตั้งค่าการอนุญาตที่ปฏิบัติการได้โดยใช้ '+ เอ็กซ์' ใน chmod คำสั่งด้วยชื่อไฟล์สคริปต์ ไฟล์ Bash สามารถทำงานได้โดยไม่ต้องระบุอย่างชัดเจน 'ทุบตี' คำสั่งหลังจากตั้งค่าบิตการดำเนินการสำหรับไฟล์นั้น
ตัวอย่าง:
# ตั้งค่าบิตการดำเนินการ$chmod+ x ชื่อไฟล์.sh
# เรียกใช้ไฟล์ปฏิบัติการ
$./ชื่อไฟล์.sh
#25. พูดถึงตัวเลือกบางอย่างที่ใช้ในการทดสอบไฟล์
มีตัวเลือกมากมายใน bash เพื่อทดสอบไฟล์ บางตัวเลือกมีการกล่าวถึงด้านล่าง
ตัวเลือก | คำอธิบาย |
-NS | ใช้เพื่อทดสอบว่าไฟล์มีอยู่จริงและเป็นไฟล์ปกติ |
-และ | ใช้สำหรับทดสอบไฟล์ที่มีอยู่เท่านั้น |
-NS | มันถูกใช้เพื่อทดสอบไฟล์ที่มีอยู่และมีสิทธิ์ในการอ่าน |
-ใน | มันถูกใช้เพื่อทดสอบไฟล์ที่มีอยู่และต้องเขียนสิทธิ์ |
-NS | ใช้เพื่อทดสอบไฟล์ที่มีอยู่และมีสิทธิ์ดำเนินการ |
-NS | ใช้เพื่อทดสอบไดเร็กทอรีที่มีอยู่ |
-NS | มันถูกใช้เพื่อทดสอบไฟล์ที่มีอยู่และเป็นลิงค์สัญลักษณ์ |
-NS | มันถูกใช้เพื่อทดสอบไฟล์ที่มีอยู่และเป็นซ็อกเก็ต |
-NS | ใช้สำหรับทดสอบว่าไฟล์เป็นอุปกรณ์บล็อก |
-NS | ใช้สำหรับตรวจสอบไฟล์ว่าไม่มีขนาดเป็นศูนย์ |
-เช่น | ใช้ตรวจสอบเนื้อหาของไฟล์แรกว่าใหม่กว่าไฟล์ที่สอง ตัวอย่างเช่น file1 -nt file2 ระบุว่า file1 ใหม่กว่า file2 |
-ot | ใช้ตรวจสอบเนื้อหาของไฟล์แรกว่าเก่ากว่าไฟล์ที่สอง ตัวอย่างเช่น file1 -ot file2 ระบุว่า file1 นั้นเก่ากว่า file2 |
-ef | ใช้เพื่อตรวจสอบว่าฮาร์ดลิงก์สองลิงก์อ้างอิงถึงไฟล์เดียวกัน ตัวอย่างเช่น flink1 -ef flink2 ระบุว่า flink1 และ flink2 เป็นฮาร์ดลิงก์ และทั้งคู่อ้างถึงไฟล์เดียวกัน |
#26. 'bc' หมายถึงอะไรและสามารถใช้คำสั่งนี้ใน bash ได้อย่างไร?
ตัวเต็มของ 'bc' คือ เครื่องคิดเลขทุบตี เพื่อดำเนินการทางคณิตศาสตร์ได้แม่นยำยิ่งขึ้นในทุบตี ส่วนที่เป็นเศษส่วนจะถูกละเว้นหากมีการดำเนินการทางคณิตศาสตร์ใด ๆ ใน bash โดยใช้ 'Expr' สั่งการ. ส่วนที่เป็นเศษส่วนสามารถปัดเศษได้โดยใช้ มาตราส่วน คุณค่ากับ 'บีซี' สั่งการ.
ตัวอย่าง:
#!/bin/bash# คำนวณการหารโดยไม่มีค่าเศษส่วน
โยนออก '39 / 7' | bc
# คำนวณการหารด้วยค่าเศษส่วนเต็ม
โยนออก '39 / 7' | bc -NS
# คำนวณการหารด้วยตัวเลขสามหลักหลังจุดทศนิยม
โยนออก 'มาตราส่วน=3; 39/7' | bc
#27. คุณจะพิมพ์บรรทัดเฉพาะของไฟล์ใน bash ได้อย่างไร?
มีหลายวิธีในการพิมพ์บรรทัดเฉพาะในทุบตี วิธีการ 'อ๊ะ', 'เซด' และ 'หาง' คำสั่งสามารถใช้พิมพ์บรรทัดเฉพาะของไฟล์ใน bash ได้ดังตัวอย่างต่อไปนี้
ตัวอย่าง:
#!/bin/bash# อ่านและจัดเก็บบรรทัดแรกจากไฟล์โดยใช้คำสั่ง `awk` พร้อมตัวแปร NR
line1=``awk '{if(NR==1) พิมพ์ $0}'course.txt``
#พิมพ์ไลน์
โยนออก $line1
# อ่านบรรทัดที่สองจากไฟล์โดยใช้คำสั่ง `sed` พร้อม -n option
line2=``sed -NSหลักสูตร 2p.txt``
#พิมพ์ไลน์
โยนออก $line2
# อ่านบรรทัดสุดท้ายจากไฟล์โดยใช้คำสั่ง `tail` พร้อม -n option
line3=``หาง -NS 1course.txt``
#พิมพ์ไฟล์
โยนออก $line3
#28. ไอเอฟเอสคืออะไร?
ไอเอฟเอส เป็นตัวแปรเชลล์พิเศษ ตัวเต็มของ ไอเอฟเอส คือ Internal Field Separator
มันทำหน้าที่เป็นตัวคั่นเพื่อแยกคำออกจากบรรทัดข้อความ ส่วนใหญ่จะใช้สำหรับการแยกสตริง อ่านคำสั่ง แทนที่ข้อความ ฯลฯ
ตัวอย่าง:
#!/bin/bash# ประกาศ ':' เป็นตัวคั่นสำหรับแยกข้อความ
ไอเอฟเอส=':'
# กำหนดข้อมูลข้อความด้วย ':' ถึง $text
ข้อความ='แดง:เขียว:น้ำเงิน'
# for loop จะอ่านแต่ละคำหลังจากแยกข้อความตามIFS
สำหรับชั่วโมงใน $text;ทำ
#พิมพ์คำว่า
โยนออก $ ชั่วโมง
เสร็จแล้ว
#29. จะหาความยาวของข้อมูลสตริงได้อย่างไร?
'expr', 'wc' และ 'อ๊ะ' คำสั่งสามารถใช้เพื่อค้นหาความยาวของข้อมูลสตริงในทุบตี 'Expr' และ 'อ๊ะ' คำสั่งใช้ ระยะเวลา ตัวเลือก, 'ห้องน้ำ' การใช้คำสั่ง '-ค' ตัวเลือกในการนับความยาวของสตริง
ตัวอย่าง:
การใช้คำสั่งดังกล่าวจะแสดงในสคริปต์ต่อไปนี้
#!/bin/bash# นับความยาวโดยใช้ตัวเลือกความยาว `expr`
โยนออก ``ด่วนระยะเวลา'ฉันชอบ PHP'``
# นับความยาวโดยใช้คำสั่ง `wc`
โยนออก 'ฉันชอบทุบตี' | ห้องน้ำ -ค
# นับความยาวโดยใช้คำสั่ง `awk`
โยนออก 'ฉันชอบไพธอน' | awk '{ความยาวการพิมพ์}'
#30. จะรันสคริปต์ทุบตีหลายตัวพร้อมกันได้อย่างไร?
สคริปต์ทุบตีหลายตัวสามารถดำเนินการพร้อมกันได้โดยใช้ nohup สั่งการ. วิธีดำเนินการหลายไฟล์ bash แบบขนานจากโฟลเดอร์ดังแสดงในตัวอย่างต่อไปนี้
ตัวอย่าง:
# กำหนดชื่อโฟลเดอร์ด้วยพาธในตัวแปร $dir ที่มี# ไฟล์ทุบตีหลายไฟล์
ถึงคุณ='บ้าน/อูบุนตู/อุณหภูมิ'
# for loop จะอ่านแต่ละไฟล์จากไดเร็กทอรีและดำเนินการแบบขนาน
สำหรับสคริปต์ในถึงคุณ/ *.NS
ทำ
nohup ทุบตี '$script' &
เสร็จแล้ว
บทสรุป:
คำถามสัมภาษณ์สคริปต์ทุบตีพื้นฐานส่วนใหญ่จะอธิบายไว้ในบทความนี้สำหรับผู้อ่านที่ต้องการเริ่มต้นอาชีพในฐานะโปรแกรมเมอร์ทุบตี