Hướng dẫn viết kịch bản Bash cho người mới bắt đầu

Bash Scripting Tutorial



Ngôn ngữ lệnh mặc định của Linux là Bash script. Chúng ta cần chạy nhiều lệnh trong Linux hàng ngày cho nhiều mục đích. Những công việc hàng ngày này có thể được tự động hóa bằng cách sử dụng tập lệnh bash. Bất kỳ người dùng nào cũng có thể học ngôn ngữ script này rất dễ dàng và nhanh chóng. Nếu bạn là người mới trong lập trình bash thì hướng dẫn này là dành cho bạn.

Nội dung:

  1. Bình luận
  2. lệnh echo
  3. Biến
  4. Câu điều kiện
  5. Vòng lặp
  6. Chức năng
  7. Gọi các chương trình trong một tập lệnh
  8. Tạo menu
  9. Xử lý dòng lệnh
  10. Môn số học
  11. Thao tác chuỗi
  12. Trả lại mã trả về từ một tập lệnh và lấy trong tập lệnh khác
  13. Đọc và ghi vào tệp
  14. Đường ống

Bình luận

Thêm nhận xét bằng mã là một phần thiết yếu của bất kỳ ngôn ngữ lập trình nào. Các nhận xét không được phân tích cú pháp với tập lệnh tại thời điểm thực thi. Người đọc có thể hiểu đúng bất kỳ mã nào nếu mã đó được nhận xét tốt. Bạn có thể thêm nhận xét theo nhiều cách trong tập lệnh bash. Cách bạn có thể thêm nhận xét một dòng và nhiều dòng trong tập lệnh bash được trình bày trong phần này. Tạo tệp bash với script sau để biết cách sử dụng bash comment. Ở đây, ký hiệu ‘#’ được sử dụng để thêm nhận xét một dòng và dấu nháy đơn (‘) với‘: ’được sử dụng để thêm nhận xét nhiều dòng.







bash_comment.sh



#! / bin / bash
# Lấy một số làm đầu vào
quăng đi 'Nhập một số'
đọcđến
:'
Kiểm tra số đầu vào là
nhỏ hơn 10 hoặc lớn hơn 10 hoặc bằng 10
'

nếu như [[ $ a -lt 10 ]]
sau đó
quăng đi 'Con số nhỏ hơn 10'
elif [[ $ a -gt 10 ]]
sau đó
quăng đi 'Con số lớn hơn 10'
khác
quăng đi 'Số bằng 10'
thì là ở

Đầu ra:



Chạy tập lệnh.





$bấu víubash_comment.sh

Ở đây, tập lệnh được thực thi ba lần với giá trị đầu vào 3, 10 và 90. Đầu ra sau đây sẽ xuất hiện.



Nếu bạn muốn biết thêm về nhận xét bash thì bạn có thể kiểm tra hướng dẫn này .

Lên đầu trang

lệnh echo

Lệnh `echo` được sử dụng trong bash để in đầu ra trong terminal. Có thể sử dụng nhiều tùy chọn khác nhau với lệnh echo trong bash để in kết quả đầu ra theo những cách khác nhau. Tạo một tệp bash với tập lệnh sau để biết hai cách sử dụng đơn giản của lệnh `echo`. Ở đây, lệnh `echo` đầu tiên sẽ in một dữ liệu văn bản đơn giản với một dòng mới và lệnh echo thứ hai sẽ in một văn bản đơn giản không có dòng mới.

echo_test.sh

#! / bin / bash
# In văn bản đầu tiên
quăng đi 'In văn bản bằng một dòng mới'
# In văn bản thứ hai
quăng đi -n 'In văn bản mà không có dòng mới'

Đầu ra:

Chạy tập lệnh.

$bấu víuecho_test.sh

Kết quả sau sẽ xuất hiện sau khi thực hiện lệnh trên.

Có nhiều cách sử dụng lệnh `echo` trong bash. Bạn có thể xem hướng dẫn này để biết thêm về lệnh `echo`.

Lên đầu trang

Biến

Khai báo biến là một phần cần thiết của bất kỳ ngôn ngữ lập trình nào. Các biến bash có thể được khai báo theo nhiều cách khác nhau. Khi một giá trị được gán trong một biến thì không có ký hiệu nào được sử dụng ở đầu biến. Ký hiệu ‘$’ được sử dụng với tên biến tại thời điểm đọc giá trị của biến. Biến có thể được sử dụng từ thiết bị đầu cuối hoặc có thể được sử dụng trong bất kỳ tập lệnh bash nào.

Các lệnh sau sẽ khai báo một biến chuỗi có tên mystr với một giá trị cụ thể và tiếp theo in giá trị của biến trong thiết bị đầu cuối.

$mystr='Tôi thích lập trình bash'
$quăng đi $ mystr

Đầu ra:

Tạo một tệp bash với tập lệnh sau. Hai biến được khai báo ở đây. đó là $ a$ b . Nếu giá trị đầu vào được lưu trữ trong $ a bằng $ b sau đó là tin nhắn, Các số bằng nhau sẽ được in nếu không Các con số không bằng nhau sẽ được in.

var.sh

#! / bin / bash
quăng đi 'Nhập một số'
đọcđến
NS=100
nếu như [[ $ a -eq $ b ]]
sau đó
quăng đi 'Các số bằng nhau'
khác
quăng đi 'Các số không bằng nhau'
thì là ở

Đầu ra:

Chạy tập lệnh.

$bấu víuvar.sh

Lệnh trên được thực hiện hai lần với giá trị 56 và 100. Kết quả sau sẽ xuất hiện.

Nếu bạn muốn biết thêm về các biến bash thì bạn có thể kiểm tra hướng dẫn này .

Lên đầu trang

Câu điều kiện

Giống như một ngôn ngữ lập trình khác, bạn có thể sử dụng câu lệnh điều kiện trong bash. ‘ Nếu-thì-khác ' và ' trường hợp Các câu lệnh 'chủ yếu được sử dụng để thực hiện các câu lệnh điều kiện trong bất kỳ ngôn ngữ lập trình nào. Việc sử dụng câu lệnh điều kiện bằng cách sử dụng 'nếu như' tuyên bố được hiển thị trong phần này của hướng dẫn này. Tạo một tệp bash với tập lệnh sau, nơi sử dụng câu lệnh điều kiện. Ở đây, hai giá trị sẽ được lấy từ người dùng làm đầu vào và được lưu trữ trong các biến, $ mã , và $ tuổi . Câu lệnh ‘if’ được sử dụng để kiểm tra giá trị của $ tuổi là lớn hơn hoặc bằng 18 và giá trị của $ mã1100 . Nếu cả hai điều kiện đều đúng thì thông báo, Bạn đủ điều kiện để xem phim sẽ được in nếu không Bạn không đủ điều kiện để xem phim sẽ được in.

cond.sh

#! / bin / bash

quăng đi 'Nhập mã của bạn'
đọcmã số
quăng đi 'Nhập tuổi của bạn'
đọctuổi

nếu như [[ $ tuổi -đưa cho 18 && $ mã -eq '1100' ]]
sau đó
quăng đi 'Bạn đủ điều kiện để xem phim'
khác
quăng đi 'Bạn không đủ điều kiện để xem phim'
thì là ở

Đầu ra:

Chạy tập lệnh.

$bấu víucond.sh

Đầu ra sau sẽ xuất hiện sau khi lấy các giá trị đầu vào khác nhau. 1100 được cho dưới dạng mã và 5 được cho là tuổi cho lần thực thi đầu tiên và nếu điều kiện trả về false cho các giá trị này. 1100 được đưa ra dưới dạng mã và 45 được cho là tuổi cho lần thực thi thứ hai trả về true cho điều kiện if.

Nếu bạn muốn biết thêm về câu lệnh điều kiện bash thì bạn có thể xem hướng dẫn này.

Lên đầu trang

Vòng lặp

Khi một số phần của tập lệnh cần thực thi nhiều lần thì vòng lặp được sử dụng để thực hiện nhiệm vụ. Bash hỗ trợ ba kiểu khai báo vòng lặp như các ngôn ngữ khác. Đây là các vòng lặp for, while và cho đến khi. Dựa trên các yêu cầu lập trình, một vòng lặp cụ thể được sử dụng trong tập lệnh. Việc sử dụng ba loại vòng lặp này được trình bày trong phần này bằng cách sử dụng các ví dụ đơn giản.

Sử dụng vòng lặp for

Tạo tệp bash với tập lệnh sau trong đó ` cho` vòng lặp được sử dụng để lặp lại. `cho` vòng lặp chủ yếu được sử dụng để lặp lại một danh sách dữ liệu hoặc một mảng. Ở đây, một danh sách tên ngày trong tuần được sử dụng và mỗi tên ngày trong tuần được lặp lại bằng cách sử dụng vòng lặp for. `nếu` câu lệnh được sử dụng để in một tin nhắn cụ thể dựa trên tên ngày trong tuần.

for.sh

# Đọc tên các ngày trong tuần trong mỗi lần lặp lại của vòng lặp
ngàytrongthứ hai thứ ba thứ tư thứ năm thứ sáu thứ Bảy Chủ nhật
làm

# Kiểm tra tên các ngày trong tuần là Thứ Hai hay Thứ Năm
nếu như [[ $ ngày=='Thứ hai' || $ ngày=='Thứ năm' ]]
sau đó
quăng đi 'Họp vào$ ngàylúc 9:30 sáng '

# Kiểm tra tên các ngày trong tuần là Thứ Ba hay Thứ Tư hoặc Thứ Sáu
elif [[ $ ngày=='Thứ ba' || $ ngày=='Thứ Tư' || $ ngày=='Thứ sáu' ]]
sau đó
quăng đi 'Đào tạo về$ ngàylúc 11 giờ sáng '
khác

#Print ‘Holiday’ cho những ngày khác
quăng đi '$ ngàylà kỳ nghỉ '
thì là ở
xong

Đầu ra:

Chạy tập lệnh.

$bấu víufor.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Nếu bạn muốn biết thêm cách sử dụng của vòng lặp bash for thì bạn có thể xem hướng dẫn này.

Sử dụng vòng lặp while

Tạo tệp bash với tập lệnh sau trong đó ` trong khi vòng lặp được sử dụng để lặp lại. Tập lệnh này sẽ in các số từ 1 đến 20 là số chẵn và chia hết cho 5. Ở đây, $ counter biến được sử dụng để điều khiển sự lặp lại của vòng lặp và giá trị của biến này được tăng thêm 1 trong mỗi lần lặp. Khi nào `nếu` điều kiện sẽ trả về true sau đó nó sẽ in ra giá trị của $ counter .

#! / bin / bash

# In tin nhắn
quăng đi 'In các số chẵn và chia hết cho 5'

# Khởi tạo bộ đếm
quầy tính tiền=1

# Điều chỉnh vòng lặp cho đến khi giá trị $ counter nhỏ hơn hoặc bằng 20
trong khi [ $ counter -NS hai mươi ]
làm

# Kiểm tra bộ đếm $ có chia hết cho 2 và 5 không
nếu như [[ $ counter%2-eq 0 && $ counter%5-eq 0 ]]
sau đó
#Print $ counter không có dòng mới
quăng đi '$ counter'
thì là ở

#Increment $ counter 1
((quầy ++))
xong
quăng đi 'Xong'

Đầu ra:

$bấu víuwhile.sh

Chỉ có các số trong vòng 1-20 là số chẵn và chia hết cho 5. Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Nếu bạn muốn biết thêm cách sử dụng của bash ` trong khi` vòng lặp sau đó bạn có thể kiểm tra hướng dẫn này .

Sử dụng vòng lặp cho đến khi

Tạo tệp bash với tập lệnh sau trong đó ` cho đến khi vòng lặp được sử dụng để lặp lại. Tập lệnh này sẽ in tất cả các số lẻ từ 0 đến 20. $ n biến được sử dụng trong tập lệnh này để lặp lại vòng lặp.

cho đến khi.sh

#! / bin / bash

# Khởi tạo biến, n
n=hai mươi

# Lặp lại vòng lặp cho đến khi giá trị của $ n lớn hơn 0
cho đến khi [ $ n -lt 0 ]
làm

# Kiểm tra giá trị của n là số lẻ
nếu như [[ $ n%2-gt 0 ]]
sau đó
quăng đi $ n
thì là ở

# Tăng giá trị của n lên 1
((n=$ n-1))
xong

Đầu ra:

Chạy tập lệnh.

$bấu víucho đến khi.sh

Tập lệnh sẽ in tất cả các số chẵn từ 20 đến 1. Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Lên đầu trang

Chức năng

Khi một khối mã cần thực thi nhiều lần trong một tập lệnh thì hàm được sử dụng để thực hiện nhiệm vụ. Bạn sẽ chỉ cần gọi hàm theo tên khi tập lệnh được xác định trong hàm cần thực thi nhiều lần thay vì thêm cùng một tập lệnh nhiều lần. Dấu ngoặc đầu tiên bắt đầu và kết thúc được sử dụng với tên hàm để khai báo hàm trong tập lệnh bash. Hàm có thể được gọi bằng tên hàm trong bash. Bash không hỗ trợ đối số hàm như một ngôn ngữ lập trình tiêu chuẩn khác. Nhưng giá trị có thể được chuyển cho hàm bash theo một cách khác được hiển thị trong phần này. Giá trị có thể được trả về từ hàm với câu lệnh return hoặc không sử dụng câu lệnh return.

Tạo một tệp bash với script sau để biết cách các hàm có thể được khai báo và gọi trong bash script. Ba chức năng được khai báo trong tập lệnh. Hàm đầu tiên được khai báo để in một tin nhắn đơn giản, Lập trình Bash cho người mới bắt đầu . Hàm thứ hai được khai báo để gán một giá trị chuỗi trong một biến, $ return_str sẽ in, Học lập trình bash với Linux sau khi gọi hàm. Hàm thứ ba được khai báo để đọc một giá trị đối số dưới dạng bán kính vòng tròn sẽ được cung cấp tại thời điểm gọi hàm. Ở đây, địa phương được sử dụng để đọc giá trị đối số. Hàm này sẽ tính toán diện tích của hình tròn dựa trên giá trị bán kính bằng cách sử dụng công thức, πr2 và in giá trị diện tích được tính toán.

func.sh

#! / bin / bash

#Declare một hàm đơn giản
hàm sốprint_message()
{
quăng đi 'Lập trình bash cho người mới bắt đầu'
}

#Declare một hàm để trả về một giá trị chuỗi
hàm sốret_strdata()
{
# Khởi tạo biến bằng giá trị chuỗi
return_str='Học lập trình bash với LinuxHint'
}

#Declare một hàm để đọc giá trị đối số
hàm sốtính_dùng()

# Đọc giá trị đối số đã truyền
địa phương bán kính=$ 1
khu vực= $(quăng đi bán kính $*bán kính $*3,14

# Gọi hàm để in một tin nhắn đơn giản
print_message

# Gọi hàm sẽ gán giá trị chuỗi trong một biến
ret_strdata

# In giá trị của biến
quăng đi $ return_str

# Đọc giá trị bán kính
quăng đi 'Nhập giá trị bán kính'
đọccông việc

# Gọi hàm với giá trị bán kính
tính_dùng$ rad

Đầu ra:

Chạy tập lệnh.

$bấu víufunc.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh. Hai dòng đầu tiên sẽ in bằng cách gọi các hàm, print_message ()ret_strdata () . Dòng cuối cùng sẽ in bằng cách gọi hàm, tính_dùng () với giá trị bán kính đầu vào đã lấy.

Nếu bạn muốn biết về việc trả về một chuỗi từ hàm bash thì bạn có thể hướng dẫn này NS.

Lên đầu trang

Gọi các chương trình trong một tập lệnh

Bạn có thể sử dụng nhiều loại lệnh để gọi các chương trình khác trong bất kỳ tập lệnh bash nào, chẳng hạn như nguồn, bash, eval, người điều hành , v.v. Giả sử ba tệp bash, add.sh , subtract.sh, nhân.sh và phân chia.sh được tạo ra để thực hiện các phép tính cộng, trừ, nhân và chia. Ở đây, trừ đi.shDivision.sh đọc các đối số dòng lệnh. Tập lệnh của tất cả bốn tệp này được đưa ra dưới đây.

add.sh

#! / bin / bash
đến=60
NS=40
((kết quả=$ a+$ b))
quăng đi 'Việc bổ sung$ a+$ b=$ kết quả'

subract.sh

#! / bin / bash
đến=$ 1
NS=$ 2
((kết quả=$ a-$ b))
quăng đi 'Phép trừ của$ a-$ b=$ kết quả'

nhân.sh

#! / bin / bash
((kết quả=$ 1*$ 2))
quăng đi 'Phép nhân của $ 1 và $ 2 là$ kết quả'

split.sh

#! / bin / bash
đến=$ 1
NS=2
((kết quả=$ a/$ b))
quăng đi 'Sự phân chia của$ aqua$ b$ kết quả'

Tạo một tệp bash có tên, callpro.sh với tập lệnh sau để gọi các tệp bash được đề cập bằng cách sử dụng các lệnh nguồn, bash, eval và execute. Bạn phải đặt quyền thực thi cho bốn tệp trên trước khi chạy tập lệnh sau. Lệnh `source` được sử dụng để gọi add.sh tập tin. Lệnh `bash` được sử dụng để thực thi tệp subtract.sh. Lệnh `eval` được sử dụng để thực thi tệp tin kernel.sh. Hai giá trị đầu vào được gửi dưới dạng đối số dòng lệnh cho lệnh `eval`. Lệnh cuối cùng là lệnh execute chỉ hoạt động với đường dẫn tuyệt đối. Đối với điều này, tên đường dẫn đầy đủ của tệp chia.sh được cung cấp trong tập lệnh.

callpro.sh

#! / bin / bash
script1='add.sh'
script2='subtract.sh'
script3='nhân.sh'
script4='/home/fahmida/code/divide.sh'

nguồn '$ script1'

bấu víu $ script2 năm mươi hai mươi

quăng đi 'Nhập giá trị của a'
đọcđến
quăng đi 'Nhập giá trị của b'
đọcNS
đánh giá bấu víu $ script3 $ a $ b
người điều hành $ script4 30

Đầu ra:

Chạy tập lệnh.

$bấu víucallpro.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Lên đầu trang

Tạo menu

Có một lệnh hữu ích trong bash để tạo một menu đơn giản được gọi là `chọn` chỉ huy. Có thể tạo các loại menu khác nhau bằng cách sử dụng lệnh này. Một danh sách dữ liệu cụ thể được sử dụng để tạo menu bằng lệnh này. Tạo tệp bash với mã sau để xem việc sử dụng `chọn` lệnh tạo menu. Trong ví dụ này, danh sách năm mục sẽ được in dưới dạng menu và nhắc người dùng chọn bất kỳ ngôn ngữ nào từ danh sách. Giá trị đã chọn sẽ được lưu trữ trong biến, $ ngôn ngữ được in sau đó bằng cách nối với chuỗi khác. Tập lệnh sẽ liên tục yêu cầu chọn ngôn ngữ cho đến khi người dùng nhấn 6 để chấm dứt khỏi tập lệnh.

menu.sh

#! / bin / bash

#Print thông báo cho người dùng
quăng đi 'Chọn ngôn ngữ yêu thích của bạn'

# Xác định danh sách một mục menu
lựa chọnngôn ngữtrongNS# Java PHP Python Bash Exit
làm
# In giá trị đã chọn
nếu như [[ $ ngôn ngữ=='Lối ra' ]]
sau đó
lối ra 0
khác
quăng đi 'Ngôn ngữ đã chọn là$ ngôn ngữ'
thì là ở
xong

Đầu ra:

Chạy tập lệnh.

$bấu víumenu.sh

Theo kết quả đầu ra sau đây, người dùng nhấn 3 lần đầu tiên để in PHP và nhấn 6 lần thứ hai để kết thúc tập lệnh.

Nếu bạn muốn biết thêm về cách tạo menu bash với `select` thì bạn có thể truy cập hướng dẫn này.

Lên đầu trang

Xử lý dòng lệnh

Đôi khi chúng ta cần cung cấp các giá trị đầu vào khi thực thi tập lệnh từ dòng lệnh. Nhiệm vụ này có thể được thực hiện theo hai cách trong bash. Một cách là sử dụng các biến đối số và một cách khác là sử dụng hàm getopts. Đọc dữ liệu đầu vào dòng lệnh từ thiết bị đầu cuối bằng cách sử dụng biến đối số được hiển thị trong phần này.

Tạo tệp bash với tập lệnh sau để xem việc sử dụng giá trị đối số dòng lệnh đọc. Tập lệnh này sẽ đọc ba đối số dòng lệnh sẽ được lưu trữ trong các biến, $ toán hạng1, $ toán hạng2 và toán tử $. Để thực thi tập lệnh đúng cách, giá trị đối số thứ nhất và thứ ba phải là số và giá trị đối số thứ hai phải là bất kỳ toán tử số học nào trong số bốn toán tử số học (‘+’, ‘-’, ‘/’, ‘x’). nếu như câu lệnh sẽ kiểm tra giá trị của toán tử $ và thực hiện thao tác dựa trên toán tử và in ra giá trị.

cl1.sh

#! / bin / bash

# In các biến đối số
quăng đi 'Giá trị của đối số là: $ 1 $ 2 $ 3'

# Lưu trữ giá trị đối số
toán hạng1=$ 1
toán hạng2=$ 3
nhà điều hành=$ 2

# Kiểm tra giá trị đối số lệnh thứ 2 để thực hiện phép toán số học
nếu như [[ toán tử $=='+' ]]
sau đó
((kết quả=$ toán hạng1+$ toán hạng2))
elif [[ toán tử $=='-' ]]
sau đó
((kết quả=$ toán hạng1-$ toán hạng2))
elif [[ toán tử $=='NS' ]]
sau đó
((kết quả=$ toán hạng1*$ toán hạng2))
elif [[ toán tử $=='/' ]]
sau đó

((kết quả=$ toán hạng1/$ toán hạng2))
thì là ở

# in kết quả
quăng đi -Và 'Kết quả là =$ kết quả'

Đầu ra:

Chạy tập lệnh.

$bấu víucl1.sh

Tập lệnh được thực thi bốn lần cho bốn loại toán tử số học. Đầu ra sau đây sẽ xuất hiện cho các giá trị đối số, 6 + 3, 6 - 3, 6 x 3 và 6/3 .

Giá trị đối số có thể được chuyển với cặp tên-giá trị trong bash. Tạo tệp bash với tập lệnh sau để hiển thị cách đọc các giá trị đối số với tên. Tập lệnh sẽ đọc hai biến đối số. Các giá trị đối số có tên được in trong câu lệnh đầu tiên của tập lệnh. Tiếp theo, vòng lặp for được sử dụng để lặp lại mảng có chứa các giá trị đối số dòng lệnh. Mỗi phần tử của mảng được tách thành một cặp khóa-giá trị bằng cách sử dụng lệnh `cut`. Tiếp theo, câu lệnh trường hợp được sử dụng để in một thông báo cụ thể dựa trên giá trị khóa.

cl2.sh

. #! //bấu víu

# In các biến đối số
quăng đi 'Giá trị của đối số là: $ 1 $ 2'

# Đọc riêng từng đối số bằng vòng lặp for
tức giậntrong '[email được bảo vệ]'
làm

# Tên và giá trị đối số riêng biệt
Chìa khóa= $(quăng đi $ arg | cắt -f1 -NS=)
giá trị= $(quăng đi $ arg | cắt -f2 -NS=)

#Print thông báo dựa trên tên của đối số
trường hợp phím $ trong
Tên) quăng đi 'Tên sinh viên =giá trị $';;
dấu) quăng đi 'Điểm đạt được =giá trị $' ;;
*)
esac
xong

Đầu ra:

Chạy tập lệnh với các đối số dòng lệnh sau.

$bấu víucl2.shTên= Abir Hossaindấu=90

Hai đối số dòng lệnh được cung cấp trong các lệnh trên. đó là name = Abir Hossainmark = 90 . Tênđiểm được phân tách bằng tập lệnh và hai giá trị được in sau khi định dạng đầu ra.

Xử lý các đối số dòng lệnh bằng cách sử dụng getopts chức năng không được thảo luận trong hướng dẫn này. Nếu bạn muốn biết về xử lý dòng lệnh bằng cách sử dụng getopts chức năng thì bạn có thể ghé thăm hướng dẫn này .

Lên đầu trang

Môn số học

Thực hiện phép toán số học là một yêu cầu chung của bất kỳ ngôn ngữ lập trình nào. Bash thực hiện phép toán số học theo một cách khác với một ngôn ngữ lập trình tiêu chuẩn khác. Có nhiều cách để thực hiện các phép toán số học trong bash. Một trong những cách đơn giản để thực hiện phép tính số học được trình bày trong phần này. Tạo một tệp bash với tập lệnh sau. Bốn loại phép toán số học được hiển thị trong tập lệnh này. Một phép tính tổng và chia đơn giản được hiển thị bằng cách sử dụng dấu ngoặc kép đầu tiên ở đầu tập lệnh. Tiếp theo, hoạt động tăng trước được hiển thị. Cuối cùng, cách sử dụng toán tử tốc ký được trình bày trong phần cuối của kịch bản.

arith.sh

#! / bin / bash
# Tính tổng
kết quả= $((năm mươi+25))
# In giá trị tổng kết
quăng đi 'sum =$ kết quả'

# Tính phép chia
kết quả= $((năm mươi/25))
# In giá trị phép chia
quăng đi 'chia =$ kết quả'

# Gán giá trị cho N
n=10
# Thực hiện tăng trước
((--N))
# In giá trị của N
quăng đi 'Giá trị sau khi giảm =$ N'

# Sử dụng toán tử viết tắt
((N + =10 ))
# In giá trị của N
quăng đi 'Giá trị sau khi thêm 10 =$ N'

Đầu ra:

Chạy tập lệnh.

$bấu víuarith.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Tất cả các phép toán số học được thực hiện bằng cách sử dụng dấu ngoặc kép trong tập lệnh trên. Nhưng bạn có thể sử dụng ‘ cho phép ',' expr ' và ' bc Lệnh ‘để thực hiện phép toán số học trong bash. Nếu bạn muốn biết thêm về các lệnh này để thực hiện các phép toán số học cơ bản thì bạn có thể truy cập hướng dẫn này.

Lên đầu trang

Thao tác chuỗi

Nhiều loại tác vụ có thể được thực hiện với dữ liệu chuỗi trong bash. Một số là nối chuỗi, so sánh chuỗi, tách chuỗi, Thay đổi trường hợp của chuỗi, v.v. Không có các hàm chuỗi tích hợp sẵn như các ngôn ngữ tiêu chuẩn khác trong bash để thực hiện các hoạt động chuỗi. Một số thao tác chuỗi phổ biến được thảo luận trong phần này của hướng dẫn này.

Nối chuỗi

Thêm hai hoặc nhiều chuỗi với nhau được gọi là nối chuỗi. Chuỗi được nối với nhau trong bash bằng cách đặt lần lượt. Tạo tệp bash với tập lệnh sau để hiển thị việc sử dụng nối chuỗi. Hai biến chuỗi được khởi tạo và in ra sau khi kết hợp các biến. Đây, nội dung của $ string1$ string2 sẽ được hợp nhất và in.

concat.sh

#! / bin / bash

# Khởi tạo biến chuỗi đầu tiên
string1='Tôi thích '
# Khởi tạo biến chuỗi thứ hai
string2='Lập trình Bash'
#Print sau khi kết hợp cả hai chuỗi
quăng đi '$ string1$ string2'

Đầu ra:

Chạy tập lệnh.

$bấu víuconcat.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Bạn có thể biết thêm về cách nối chuỗi từ hướng dẫn này.

Lên đầu trang

So sánh chuỗi

Bash sử dụng các loại toán tử khác nhau để so sánh dữ liệu chuỗi. Tạo tệp bash với tập lệnh sau để hiển thị cách so sánh hai dữ liệu chuỗi. Một giá trị chuỗi được lấy làm đầu vào trong tập lệnh được so sánh với một chuỗi khác. Nếu giá trị khớp thì một thông báo, Bạn thích Python sẽ được in nếu không Bạn thích PERL sẽ được in.

so sánh.sh

#! / bin / bash
quăng điNhập bất kỳ giá trị chuỗi nào
đọcchữ

# Kiểm tra dữ liệu đầu vào tương đương với Python
nếu như [ $ text=='Python' ];sau đó
quăng đi 'Bạn thích Python.'
khác
quăng đi 'Bạn thích PERL'
thì là ở

Đầu ra:

Chạy tập lệnh.

$bấu víuso sánh.sh

Đầu ra sau sẽ xuất hiện sau khi chạy tập lệnh có giá trị đầu vào là ‘PERL’.

Bạn có thể biết thêm về so sánh chuỗi từ hướng dẫn này .

Tách chuỗi

Bash không có bất kỳ chức năng tách tích hợp nào để chia dữ liệu chuỗi. Dữ liệu chuỗi có thể được chia theo nhiều cách trong bash dựa trên các loại dấu phân cách khác nhau. Tạo tệp bash với tập lệnh sau để hiển thị cách dữ liệu chuỗi có thể được chia thành bash. Một giá trị chuỗi được lấy làm đầu vào. Tập lệnh này sẽ chia giá trị của $ text dựa trên không gian. Đây, IFS biến được sử dụng để đặt dấu phân cách. `đọc` lệnh được sử dụng ở đây để chia giá trị văn bản và lưu trữ các giá trị vào một mảng. vòng lặp được sử dụng để lặp lại mảng và in ra giá trị của từng phần tử.

split.sh

#! / bin / bash
# Nhập giá trị chuỗi
quăng điNhập giá trị chuỗi
đọcchữ
# Đặt dấu phân cách
IFS=''
# Ghép giá trị của $ text vào một mảng dựa trên dấu phân cách
đọc -đếnarr<<< '$ text'
# In từng giá trị của mảng
giá trịtrong '$ {arr [@]}';
làm
printf 'giá trị $ '
xong

Đầu ra:

Chạy tập lệnh.

$bấu víusplit.sh

Đầu ra sau sẽ xuất hiện sau khi lấy đầu vào, Học lập trình Bash . Giá trị đầu vào này là một văn bản gồm ba từ. Vì vậy, chuỗi được chia thành ba phần.

Bạn có thể biết thêm về so sánh chuỗi từ hướng dẫn này .

Thay đổi trường hợp của chuỗi

Hầu hết các ngôn ngữ kịch bản đều có các hàm tích hợp sẵn để thay đổi trường hợp của dữ liệu chuỗi. Nhưng trường hợp dữ liệu chuỗi có thể được thay đổi trong bash bằng cách sử dụng `tr` lệnh hoặc bằng cách sử dụng ':phía trên'':thấp hơn' từ khóa. Tạo tệp bash với script sau để biết các cách thay đổi chữ hoa và chữ thường trong bash. Ở đây, dữ liệu chuỗi đầu tiên được chuyển đổi thành chữ hoa bằng cách sử dụng ‘^^’ biểu tượng và chuỗi thứ hai được chuyển đổi thành chữ thường bằng cách sử dụng `tr` chỉ huy. `tr` lệnh sẽ tìm kiếm tất cả các ký tự hoa trong chuỗi và chuyển các ký tự thành chữ thường.

case.sh

#! / bin / bash

# Khởi tạo dữ liệu chuỗi đầu tiên
Văn bản 1='[email được bảo vệ]'

# In giá trị của $ text1 bằng cách chuyển đổi tất cả các ký tự thành chữ hoa
quăng đi $ {email ^^}

# Khởi tạo dữ liệu chuỗi thứ hai
text2= 'Khái niệm cơ bản về lập trình Bash'

# In giá trị của $ text2 bằng cách chuyển đổi tất cả chữ hoa thành chữ thường
quăng đi $ text2 | tr [:phía trên:] [:thấp hơn:]

Đầu ra:

Chạy tập lệnh.

$bấu víucase.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Bạn có thể biết thêm về so sánh chuỗi từ hướng dẫn này .

Lên đầu trang

Đọc dữ liệu chuỗi thông qua vòng lặp

Dữ liệu chuỗi hoạt động như một mảng ký tự cho bất kỳ ngôn ngữ lập trình nào. Thế nào ' Vòng lặp ’có thể được sử dụng để đọc dữ liệu chuỗi trong bash được trình bày trong phần này. Tạo một tệp cơ sở với tập lệnh sau để đọc từng phần của giá trị chuỗi bằng cách sử dụng vòng lặp for.

readstr.sh

#! / bin / bas
# Đọc từng từ của văn bản bằng cách sử dụng vòng lặp for
giá trịtrongLập trình Bashnhững người mới bắt đầu
làm
quăng đi giá trị $
xong

Đầu ra:

Chạy tập lệnh.

$bấu víureadstr.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Bạn có thể biết thêm về cách lặp dữ liệu chuỗi bằng cách sử dụng vòng lặp từ hướng dẫn này .

Lên đầu trang

Trả lại mã trả về từ một tập lệnh và lấy trong tập lệnh khác

Một tập lệnh bash có thể bắt các mã trả về từ một tập lệnh khác bằng cách gọi tập lệnh và sử dụng '$?' để đọc giá trị trả về. Giả sử, một tệp bash có tên first.sh trả về mã sau khi thực thi. Tạo một tệp bash khác có tên second.sh và thêm tập lệnh sau để bắt giá trị trả về và thực hiện một số tác vụ khác. Mã của cả hai tệp được đưa ra bên dưới. first.sh tệp sẽ được gọi từ second.sh ở đầu tập lệnh. first.sh sẽ trả về mã thoát dựa trên giá trị đầu vào. second.sh sẽ bắt mã bằng '$?' và so sánh với 1. Nếu cả hai giá trị bằng nhau thì nó sẽ in, Số đầu vào lớn hơn 100 , nếu không nó sẽ in, Số đầu vào nhỏ hơn hoặc bằng 100 .

first.sh

#! / bin / bash

quăng đi 'Nhập giá trị số'
đọcn

# Kiểm tra giá trị đầu vào có nhỏ hơn hoặc bằng 100 hay không
nếu như [[ $ n -NS 100 ]]
sau đó
lối ra 0
khác
lối ra 1
thì là ở

second.sh

#! / bin / bash

#Execute tệp, first.sh
bấu víu 'first.sh'

# Kiểm tra mã trả về có bằng 1 hay không
nếu như [ $? -eq 1 ]
sau đó
quăng đi 'Số đầu vào lớn hơn 100'
khác
quăng đi 'Số đầu vào nhỏ hơn hoặc bằng 100'
thì là ở

Đầu ra:

Chạy tập lệnh.

$bấu víusecond.sh

Đầu ra sau sẽ xuất hiện khi tập lệnh được thực thi bởi 55 và 110 trong hai lần.

Lên đầu trang

Đọc và ghi vào tệp

Đọc và ghi tệp là yêu cầu phổ biến của lập trình bash. Bash không có bất kỳ chức năng tích hợp nào giống như một ngôn ngữ khác để đọc hoặc ghi tệp. Có nhiều cách để đọc tệp trong bash. Cách phổ biến nhất để đọc hoặc ghi tệp trong bash là sử dụng `con mèo` chỉ huy. Nhưng lệnh này được sử dụng để đọc toàn bộ nội dung của tệp tại một thời điểm. Bạn cũng có thể đọc bất kỳ tệp nào từng dòng bằng cách sử dụng bất kỳ vòng lặp nào và `đọc` chỉ huy. Sử dụng toán tử chuyển hướng, ‘>’ , bạn có thể ghi dữ liệu vào bất kỳ tệp nào trong bash. Nếu bạn muốn nối dữ liệu vào bất kỳ tệp nào thì bạn phải sử dụng '>>' nhà điều hành. Cả thao tác đọc và ghi tệp đều được trình bày trong phần tiếp theo của phần này.

Đọc tệp trong bash

Tạo tệp bash bằng tập lệnh sau để đọc tệp hiện có có tên ‘ hard.txt '. Nội dung của tập tin này được đưa ra dưới đây. Trong tập lệnh, toàn bộ nội dung của tệp được đọc bởi `con mèo` lệnh đầu tiên và lệnh tiếp theo, vòng lặp while được sử dụng để đọc từng dòng tệp.

hard.txt

Màn hình
Bàn phím
Chuột
Máy quét
Máy in

readfile.sh

#! / bin / bash

quăng đi 'Đọc tệp bằng lệnh cat'

# Đọc nội dung của tệp bằng lệnh `cat`
Nội dung=``con mèohard.txt``
quăng đi $ nội dung

quăng đi 'Đọc tệp từng dòng bằng vòng lặp'

# Gán tên tệp
tên tập tin='hardware.txt'

# Mỗi dòng của tệp sẽ được đọc bởi mỗi lần lặp lại của vòng lặp
trong khi đọchàng;
làm
# in dòng
quăng đi $ dòng
xong<$ filename

Đầu ra:

Chạy các lệnh sau.

$con mèohard.txt
$bấu víureadfile.sh

Tại đây, lệnh đầu tiên sẽ in nội dung của tệp, hard.txt mà không cần chạy bất kỳ tập lệnh bash nào và lệnh thứ hai sẽ chạy tập lệnh của readfile.sh và in nội dung của tệp hai lần bằng cách sử dụng `con mèo` lệnh và `đọc` lệnh bằng vòng lặp while. Bạn có thể ghé thăm cái này hướng dẫn để biết thêm về cách đọc tệp từng dòng.

Đang ghi tệp trong bash

Tạo tệp bash với tập lệnh sau để viết nội dung mới trong tệp mới và nối dữ liệu trong tệp đó.

writefile.sh

#! / bin / bash

quăng đi 'Nhập một số văn bản'
# Đọc dữ liệu chuỗi
đọcstr1
# Thêm dữ liệu đầu vào vào tệp lần đầu tiên
quăng đi $ str1 >test.txt

quăng đi 'Nhập một số văn bản khác'
# Đọc dữ liệu chuỗi khác
đọcstr2
# Thêm dữ liệu đầu vào vào cuối tệp
quăng đi $ str2 >>test.txt

# Hiển thị toàn bộ nội dung của tệp
quăng đi ``con mèotest.txt``

Đầu ra:

Chạy tập lệnh.

$bấu víuwritefile.sh

Kết quả sau sẽ xuất hiện sau khi chạy tập lệnh.

Lên đầu trang

Đường ống

Pipe được sử dụng để chuyển hướng bất kỳ đầu ra lệnh nào đến đầu vào lệnh khác. Nó có thể được sử dụng trong số các loại lệnh bash khác nhau để tạo ra đầu ra cụ thể. Đầu vào tiêu chuẩn được kết nối với đầu ra tiêu chuẩn trong Linux bằng đường ống. Bạn cần đặt lệnh theo trình tự với ký hiệu pipe (|) để có được kết quả đầu ra mong muốn. Hai hoặc nhiều lệnh có thể được thực hiện cùng nhau trong một lệnh duy nhất bằng cách sử dụng ống dẫn. Bạn phải thực hiện nhiều lệnh trong nhiều dòng không có đường dẫn để thực hiện cùng một nhiệm vụ. Vì vậy, sử dụng pipe rất có lợi cho việc thực hiện nhiều loại nhiệm vụ trong một hình thức ngắn.

cú pháp:

command1|command2|...

Tại đây, đầu ra của command1 sẽ được chuyển làm đầu vào của command2.

Loại nhiệm vụ tương tự được thực hiện với đường ống và không có đường ống trong phần tiếp theo của phần này. Giả sử một tệp văn bản có tên mark.txt được đưa ra với dữ liệu sau đây.

mark.txt

Asraf CSE-409 79

Kabir CSE-304 95

Keya CSE-101 67

Asraf CSE-304 88

Keya CSE-409 90

Asraf CSE-101 92

Bạn phải sắp xếp dữ liệu của tệp và tìm ra và in ra tất cả các mục nhập tên sinh viên ‘K Vâng ' . Bạn có thể thực hiện tác vụ này bằng cách chạy nhiều lệnh mà không cần sử dụng đường dẫn được hiển thị trong phần tiếp theo. Các lệnh sau sẽ cần phải chạy để có được kết quả đầu ra mong muốn. Lệnh đầu tiên sẽ sắp xếp tệp. Lệnh thứ hai sẽ tìm kiếm mục nhập ‘K Vâng ' sử dụng ` nắm chặt `lệnh và lưu trữ kết quả đầu ra trong một temp.txt tập tin. Lệnh thứ ba sẽ đếm tổng số dòng của một temp.txt tập tin bằng cách sử dụng `wc` chỉ huy.

$loạimark.txt
$nắm chặt 'Keya'mark.txt>temp.txt
$wc -NStemp.txt

Đầu ra:

Hai mục nhập của học sinh, ‘Keya’ tồn tại trong tệp. Vì vậy, sau khi chạy các lệnh trên, kết quả sau sẽ xuất hiện.

Bạn có thể dễ dàng hợp nhất ba lệnh trên và nhận được cùng một đầu ra bằng cách chạy một lệnh duy nhất với một đường ống được hiển thị trong lệnh sau. Không có tệp tạm thời nào được yêu cầu ở đây để lấy đầu ra. Ở đây, đầu ra của ` loại Lệnh `sẽ được chuyển dưới dạng đầu vào của` nắm chặt lệnh `và đầu ra của lệnh` nắm chặt lệnh `sẽ được chuyển làm đầu vào cho `wc` chỉ huy.

$loạimark.txt| nắm chặt 'Keya' | wc -NS

Đầu ra:

Afttr chạy lệnh trên, bạn sẽ nhận được kết quả sau giống như đầu ra của lệnh trước đó. Đầu ra của lệnh sẽ là 2.

Lên đầu trang

Phần kết luận:

Hầu hết các chủ đề hữu ích và cần thiết của ngôn ngữ kịch bản bash đều được cố gắng trình bày trong hướng dẫn này. Hy vọng, người đọc sẽ được hưởng lợi sau khi đọc hướng dẫn này và có thể viết bash script hiệu quả hơn.