Mặc dù chúng tôi thường sử dụng nó cho các hoạt động quản trị hoặc quản lý tệp, thoải mái de Linux mở rộng chức năng vượt xa mục đích đó, cho phép chúng tôi lập trình kịch bản Hướng dẫn này không nhằm mục đích là tài liệu tham khảo đầy đủ về lập trình Bash mà là giới thiệu về các lệnh và cấu trúc cơ bản, cho phép chúng tôi mở rộng sức mạnh của hệ thống GNU / Linux của mình. |
"Script" là gì?
Về cơ bản, chúng tôi nói rằng nó là một tệp chứa mã được viết bằng một ngôn ngữ lập trình nhất định mà hệ thống sử dụng cho một tác vụ nhất định. Nó không cần phải có đầu vào bên ngoài hoặc giao diện đồ họa, nhưng nó cần tạo ra đầu ra của dữ liệu đã xử lý (ngay cả khi người dùng không nhìn thấy nó).
Ngôn ngữ mà Bash sử dụng được định nghĩa bởi trình thông dịch riêng của nó và kết hợp cú pháp của các Shell khác, chẳng hạn như Korn Shell (ksh) hoặc C Shell (csh). Nhiều lệnh thường được sử dụng trong bảng điều khiển cũng có thể được sử dụng trong các tập lệnh, ngoại trừ những lệnh liên quan chặt chẽ đến một bản phân phối cụ thể.
Cấu trúc của một tập lệnh
Để bắt đầu, chúng ta phải có một trình soạn thảo văn bản và mong muốn lập trình. Các tệp mà chúng tôi lưu với phần mở rộng .sh có thể được thực thi (hoặc thông dịch) bởi bảng điều khiển, miễn là dòng đầu tiên như sau:
#! / bin / bash
Điều này yêu cầu hệ thống sử dụng bảng điều khiển để chạy tệp. Ngoài ra, ký tự # cho phép bạn viết bình luận. Để tạo ví dụ đơn giản nhất, chúng tôi thêm một dòng nữa, được nhìn thấy trong hình ảnh sau:
Lệnh echo hiển thị thông báo trên màn hình, trong trường hợp này là "Hello world!" Nếu chúng ta lưu nó và thực thi nó bằng bảng điều khiển, chúng ta sẽ thấy kết quả.
Các lệnh cơ bản
Các lệnh sau đây là phổ biến và rất hữu ích cho bất kỳ loại chương trình nào. Chúng tôi làm rõ rằng còn nhiều điều khác nữa, nhưng bây giờ chúng tôi sẽ đề cập đến phần sau.
Bí danh: cho phép một chuỗi từ được thay thế bằng một chuỗi ngắn hơn, cho phép giảm mã.
# tạo bí danh được gọi là per với địa chỉ của thư mục #Downloads bí danh per = '/ home / user / Downloads' # Mỗi khi muốn sử dụng, chúng tôi chỉ cần gọi # từ mới per # Để hủy bí danh đó, chúng tôi sử dụng unalias unalias per
break: cho phép bạn thoát ngay khỏi vòng lặp for, while, Until hoặc select (chúng ta sẽ nghiên cứu chi tiết về vòng lặp sau)
# Tạo vòng lặp sẽ gán các số từ 1 đến 5 # cho mỗi "lượt của vòng lặp" cho bộ đếm trong 1 2 3 4 5 do # Chúng tôi in giá trị hiện tại của biến #counter, được phân tích bởi ký tự $ echo "$ counter" #Nếu giá trị của bộ đếm bằng 3 nếu [$ counter –eq 3] thì #The break thoát khỏi vòng lặp để break fi xong
tiếp tục - Tương tự như break, ngoại trừ việc nó bỏ qua vòng lặp hiện tại và chuyển sang vòng tiếp theo.
# Tạo vòng lặp sẽ gán các số từ 1 đến 5 # cho mỗi "lượt của vòng lặp" cho bộ đếm trong 1 2 3 4 5 do # Nếu giá trị bộ đếm bằng 3 nếu [$ counter –eq 3] thì # Tiếp tục ngăn phần còn lại của chu kỳ # hiện tại không được phân tích bằng cách chuyển sang vòng tiếp theo, tức là # giá trị 3 sẽ không được in. tiếp tục fi echo "$ counter" xong
Khai báo: khai báo các biến và gán giá trị cho chúng, giống như tập hợp chữ (chúng hoạt động giống nhau). Chúng ta có thể kết hợp nó với một số tùy chọn: -i khai báo số nguyên; -r cho các biến chỉ đọc, không thể thay đổi giá trị của nó; –A cho mảng hoặc “mảng”; -f cho các chức năng; -x cho các biến có thể được "xuất" ra bên ngoài môi trường của chính tập lệnh.
khai báo –i num = 12 khai báo –x pi = 3.14
help: hiển thị trợ giúp cho một lệnh cụ thể.
job: hiển thị các tiến trình đang chạy.
# Với –c chúng ta hiển thị tên của các lệnh, với –p # là pid (id tiến trình) của mỗi tiến trình. việc làm -cp
let: đánh giá một biểu thức số học
let a = 11 let a = a + 5 # Cuối cùng chúng ta in ra giá trị của a là 16 echo "11 + 5 = $ a"
local: tạo các biến cục bộ, tốt nhất nên được sử dụng trong các hàm của chính script để tránh lỗi. Bạn có thể sử dụng các chức năng tương tự như lệnh khai báo.
local v1 = "Đây là một biến cục bộ"
đăng xuất: cho phép đăng xuất hoàn toàn khỏi Shell; hữu ích cho các trường hợp chúng ta làm việc với nhiều cửa sổ shell, trong đó lệnh exit sẽ chỉ cho phép kết thúc một cửa sổ tại một thời điểm.
printf: cho phép bạn in dữ liệu và định dạng nó. Nó có nhiều tùy chọn, vì vậy chúng tôi sẽ đề cập đến một vài.
#% f in ra dưới dạng số thực, n cho # dòng mới printf "% fn" 5 5.000000 # & d cho phép chuyển số thập phân dưới dạng đối số printf "Có% d đơn hàng có giá trị bằng% d đô la.n" 20 500 Có 20 đơn đặt hàng trị giá 500 đô la.
read: đọc một dòng từ đầu vào chuẩn (mô-đun được sử dụng để tải dữ liệu qua bàn phím chẳng hạn). Chúng ta có thể chuyển các tùy chọn như: -t để đưa ra thời gian giới hạn đọc; -a để mỗi từ được gán cho một vị trí trong mảng tên; -d để sử dụng dấu phân cách sẽ được viết ở cuối dòng; trong số những người khác.
echo "Nhập tên của bạn và nhấn ENTER" # Đọc tên biến đọc tên echo "Tên của bạn là $ name"
type: mô tả một lệnh và hành vi của nó. Nó có thể hữu ích để tìm ra các định nghĩa dữ liệu cho mỗi lệnh.
type –a '[' #type cho chúng ta biết rằng [là lệnh nội trang Shell [là lệnh nội trang Shell # -a cho phép tìm các thư mục chứa # tệp thực thi với tên đã viết. [is / usr / bin / [
ulimit: giới hạn quyền truy cập và sử dụng các tài nguyên hệ thống nhất định đối với các quy trình, lý tưởng cho các chương trình cho phép thay đổi quản trị hoặc nhằm vào các loại người dùng khác nhau. Khi đặt giới hạn, chúng ta viết một số đại diện cho số kilobyte của giới hạn.
# Chúng tôi thấy giới hạn hiện tại của chúng tôi ulimit –a # -f cho phép bạn giới hạn người dùng không thể # tạo tệp lớn hơn 512000 Kb (500 #Mb) ulimit –f 512000 # -v giới hạn bộ nhớ ảo của quá trình. ulimit –v 512000
wait: đợi một quá trình hoặc công việc nào đó được thực hiện để tiếp tục.
# Tập lệnh chờ quá trình pid # 2585 được thực hiện
đợi 2585
Các lệnh hữu ích khác mà chúng ta có thể thêm vào tập lệnh được biểu diễn bằng các ký hiệu.
!!: chạy lại lệnh cuối cùng
! wer: thực hiện lệnh cuối cùng bắt đầu bằng biểu thức “wer”.
'==', '! =', '>', '<', '> =', và '<=': toán tử quan hệ.
|: Toán tử OR thường được sử dụng để nối hai biểu thức chính quy.
: lệnh thoát cho phép bạn định dạng các biểu thức. Ví dụ: a cho cảnh báo bằng âm thanh, n cho dòng mới, b cho phím xóa lùi, v.v.
Tuyệt quá! Dù sao 2 nhận xét: Thẻ Ubuntu quá nhiều một nửa, vì nó khái quát một cái gì đó chung chung. Và nếu các hướng dẫn này tiếp tục phát triển, sẽ rất tốt nếu chúng được liên kết với nhau….
Ngoài ra, động thái này thật thú vị!
Đóng góp tốt! Tuyệt quá!
Chỉ thiếu tài liệu tham khảo cho những người muốn tìm hiểu thêm về vấn đề này. Một số tốt mặc dù không dễ tìm thấy ở nước ta là
- Hướng dẫn thực hành về Lệnh, Trình chỉnh sửa và Lập trình Shell của Linux, Mark Sobell (Chương 8)
- Lập trình Pro Bash, Chris FA Johnson (mặc dù điều này dành cho những người có tài liệu tham khảo khác hoặc có thêm một chút kiến thức).
Tốt bài viết.
Hẹn hò vui vẻ! Cảm ơn bạn!
: @ Chức năng "đăng nhập với tư cách" đã xóa nhận xét trước đây của tôi, vì vậy tôi sẽ tóm tắt thêm:
việc làm -cp
bash: công việc: -c: tùy chọn không hợp lệ
việc làm: cách sử dụng: công việc [-lnprs] [jobspec…] hoặc lệnh job -x [args]
-eq -gt -lt không chấp nhận biến số thập phân, giữa diễn đàn và diễn đàn, tôi phát hiện ra rằng bc là một đồng minh tốt:
nếu [`echo 9.999> 10 | bc` -eq 1]; sau đó
echo "9.999 lớn hơn 10, hãy đảm bảo rằng bộ xử lý của bạn vẫn hoạt động"
khác
echo «9.999 không lớn hơn 10, mọi thứ hoạt động bình thường
fi
Bài đăng này tóm tắt rất tốt tất cả những điều tổng quát về bash scripting:
http://www.aboutlinux.info/2005/10/10-seconds-guide-to-bash-shell.html
Trên trang web này, bạn sẽ tìm thấy nhiều câu hỏi và câu trả lời về các đặc thù của bash:
http://unix.stackexchange.com/questions/tagged/bash
Dưới đây là một số script thực sự thú vị và bạn có thể học chúng bằng cách đọc script của người khác:
http://snipplr.com/search.php?q=bash&btnsearch=go
Bạn đúng với những gì bạn nói, ngoại trừ sự dè bỉu. Mọi hệ thống tôi đã thấy đều có bash trong / bin / bash.
Nhưng đối với python, perl, ruby, v.v., bạn có thể sử dụng nó. tôi làm
Thật trùng hợp, ở trường đại học, chúng tôi đang sử dụng kịch bản bash nên dữ liệu là 10, rất tốt!
một phiên bản pdf để tải xuống sẽ là tốt! 😀
Trang web rất tốt. Cuối cùng tôi cũng tìm thấy một thứ hữu ích Cảm ơn bạn.