30 bash script คำถามสัมภาษณ์และคำตอบ

30 Bash Script Interview Questions



สคริปต์ทุบตีเป็นภาษาการเขียนโปรแกรมที่มีประโยชน์และทรงพลังซึ่งส่วนใหญ่ใช้เพื่อทำให้งานแบบแมนนวลเป็นแบบอัตโนมัติ ผู้หางานที่ต้องการเป็นผู้ทดสอบระบบอัตโนมัติหรือโปรแกรมเมอร์ทุบตีต้องเผชิญกับคำถามทั่วไปในการสัมภาษณ์ เชลล์สคริปต์ประเภทต่างๆ มีอยู่ใน Linux หนึ่งในเชลล์สคริปต์ที่ได้รับความนิยมและใช้กันมากที่สุดคือ Bourne Again Shell หรือ Bash 30 คำถามและคำตอบในการสัมภาษณ์ที่สำคัญเกี่ยวกับภาษาสคริปต์ทุบตีได้อธิบายไว้ในบทความนี้เพื่อเตรียมการสำหรับงาน

#01. สคริปต์ทุบตีคืออะไร?

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







#02. ข้อดีของการใช้สคริปต์ทุบตีคืออะไร?

สคริปต์ทุบตีมีข้อดีหลายประการซึ่งอธิบายไว้ด้านล่าง:



  • ใช้งานง่ายและเรียนรู้
  • งานที่ทำด้วยตนเองจำนวนมากที่จำเป็นต้องเรียกใช้บ่อยๆ สามารถทำได้โดยอัตโนมัติโดยการเขียนสคริปต์ทุบตี
  • ลำดับของคำสั่งเชลล์หลายคำสั่งสามารถดำเนินการได้ด้วยคำสั่งเดียว
  • สคริปต์ทุบตีที่เขียนในระบบปฏิบัติการ Linux หนึ่งระบบสามารถเรียกใช้งานในระบบปฏิบัติการ Linux อื่นได้อย่างง่ายดาย ดังนั้นจึงพกพาได้
  • การดีบักใน bash นั้นง่ายกว่าภาษาโปรแกรมอื่นๆ
  • ไวยากรณ์บรรทัดคำสั่งและคำสั่งที่ใช้ในเทอร์มินัลจะคล้ายกับคำสั่งและไวยากรณ์ที่ใช้ในสคริปต์ทุบตี
  • สคริปต์ทุบตีสามารถใช้เพื่อเชื่อมโยงกับไฟล์สคริปต์อื่น

#03. พูดถึงข้อเสียของสคริปต์ทุบตี

ข้อเสียบางประการของ bash script มีการกล่าวถึงด้านล่าง:



  • ทำงานช้ากว่าภาษาอื่น
  • สคริปต์ที่ไม่เหมาะสมอาจทำให้กระบวนการทั้งหมดเสียหายและสร้างข้อผิดพลาดที่ซับซ้อนได้
  • ไม่เหมาะสำหรับการพัฒนาแอปพลิเคชันขนาดใหญ่และซับซ้อน
  • มีโครงสร้างข้อมูลน้อยกว่าเมื่อเปรียบเทียบกับภาษาโปรแกรมมาตรฐานอื่นๆ

#04. ตัวแปรประเภทใดที่ใช้ใน bash?

ตัวแปรสองประเภทสามารถใช้ในสคริปต์ทุบตี เหล่านี้คือ:

ตัวแปรระบบ
ตัวแปรที่กำหนดไว้ล่วงหน้าและดูแลโดยระบบปฏิบัติการ Linux เรียกว่าตัวแปรระบบ ตัวแปรประเภทนี้มักใช้อักษรตัวพิมพ์ใหญ่ ค่าเริ่มต้นของตัวแปรเหล่านี้สามารถเปลี่ยนแปลงได้ตามความต้องการ

`ตั้งค่า', `env` และ ` printenv คำสั่ง ` สามารถใช้พิมพ์รายการตัวแปรระบบได้

ตัวอย่าง:





#!/bin/bash
# ตัวแปรระบบการพิมพ์

#พิมพ์ชื่อเชลล์ทุบตี
โยนออก $BASH

# พิมพ์ Bash shell Version
โยนออก $BASH_VERSION

# พิมพ์ชื่อไดเรกทอรีหน้าแรก
โยนออก $HOME

ตัวแปรที่ผู้ใช้กำหนด

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

#!/bin/bash

หนึ่ง=100
โยนออก $num

#05. จะประกาศและลบตัวแปรใน bash ได้อย่างไร?

ตัวแปรสามารถประกาศใน bash ตามประเภทข้อมูลหรือไม่มีประเภทข้อมูล หากมีการประกาศตัวแปร bash โดยไม่มี ประกาศ คำสั่งแล้วตัวแปรจะถือว่าเป็นสตริง ตัวแปร Bash ถูกประกาศด้วย ประกาศ คำสั่งกำหนดชนิดข้อมูลของตัวแปรในขณะประกาศ



-NS , -i, -a, -A, -l, -u, -t และ -NS สามารถใช้ได้กับ ประกาศ คำสั่งประกาศตัวแปรที่มีข้อมูลประเภทต่างๆ

ตัวอย่าง:

#!/bin/bash

#ประกาศตัวแปรแบบไม่มีประเภท
หนึ่ง=10

#ค่าจะรวมกันแต่ไม่บวกเพิ่ม
ผลลัพธ์=$num+ยี่สิบ
โยนออก $ผลลัพธ์

#ประกาศตัวแปรด้วยชนิดจำนวนเต็ม
ประกาศ -ผม หนึ่ง=10

#ค่าจะถูกเพิ่ม
ประกาศ -ผม ผลลัพธ์=num+ยี่สิบ
โยนออก $ผลลัพธ์

ยกเลิกการตั้งค่า คำสั่งใช้เพื่อลบตัวแปร bash ตัวแปรจะไม่สามารถเข้าถึงได้หรือไม่ได้กำหนดหลังจากใช้ ยกเลิกการตั้งค่า สั่งการ.

ตัวอย่าง:

#!/bin/bash

NS='คำแนะนำลินุกซ์'
โยนออก $ 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 มีเนื้อหาดังต่อไปนี้ และเราได้พิมพ์เฉพาะคำที่สองของแต่ละบรรทัดของไฟล์นี้

CSE201 การเขียนโปรแกรม Java
โครงสร้างข้อมูล 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' &
เสร็จแล้ว

บทสรุป:

คำถามสัมภาษณ์สคริปต์ทุบตีพื้นฐานส่วนใหญ่จะอธิบายไว้ในบทความนี้สำหรับผู้อ่านที่ต้องการเริ่มต้นอาชีพในฐานะโปรแกรมเมอร์ทุบตี