Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Bắt đầu với lập trình Bash

Một trong những hy vọng ban đầu đối với Unix là nó sẽ cho phép người dùng máy tính hàng ngày tinh chỉnh máy tính của họ để phù hợp với phong cách làm việc độc đáo của họ. Những kỳ vọng xung quanh việc tùy chỉnh máy tính đã giảm dần trong nhiều thập kỷ và nhiều người dùng coi bộ sưu tập ứng dụng và trang web của họ là "môi trường tùy chỉnh" của họ. Một lý do cho điều đó là các thành phần của nhiều hệ điều hành không mở, vì vậy mã nguồn của chúng không có sẵn cho người dùng bình thường.

Nhưng đối với người dùng Linux, các chương trình tùy chỉnh nằm trong tầm tay vì toàn bộ hệ thống dựa trên các lệnh có sẵn thông qua thiết bị đầu cuối. Thiết bị đầu cuối không chỉ là một giao diện cho các lệnh nhanh hoặc xử lý sự cố chuyên sâu; đó là một môi trường tập lệnh có thể giảm bớt khối lượng công việc của bạn bằng cách giải quyết các công việc thông thường cho bạn.

Cách học lập trình

Nếu bạn chưa từng lập trình nào trước đây, có thể hữu ích khi nghĩ về nó dưới hai thách thức khác nhau:một là hiểu cách viết mã và hai là hiểu mã cần viết. Bạn có thể tìm hiểu cú pháp —Nhưng bạn sẽ không đi được xa nếu không biết những từ nào có sẵn cho bạn trong ngôn ngữ . Trong thực tế, bạn bắt đầu học cả hai khái niệm cùng một lúc vì bạn không thể học cú pháp mà không có từ để sắp xếp, vì vậy ban đầu, bạn viết các tác vụ đơn giản bằng cách sử dụng các lệnh cơ bản và cấu trúc lập trình cơ bản. Khi bạn cảm thấy thoải mái với những điều cơ bản, bạn có thể khám phá thêm ngôn ngữ để có thể làm cho các chương trình của mình ngày càng làm được nhiều điều quan trọng hơn.

Trong Bash, hầu hết các từ bạn sử dụng là các lệnh Linux. Cú pháp là Bash. Nếu bạn đã sử dụng Bash thường xuyên, thì việc chuyển đổi sang lập trình Bash tương đối dễ dàng. Nhưng nếu bạn không sử dụng Bash, bạn sẽ hài lòng khi biết rằng đó là một ngôn ngữ đơn giản được xây dựng để rõ ràng và đơn giản.

Thiết kế tương tác

Đôi khi, điều khó nhất để tìm ra khi học lập trình là máy tính có thể làm gì cho bạn. Rõ ràng, nếu một chiếc máy tính của riêng nó có thể làm mọi thứ bạn làm với nó, thì bạn sẽ không phải chạm vào máy tính nữa. Nhưng thực tế là con người mới quan trọng. Chìa khóa để tìm ra thứ gì đó mà máy tính của bạn có thể giúp bạn là để ý những công việc bạn làm liên tục trong tuần. Máy tính xử lý sự lặp lại đặc biệt tốt.

Nhưng để bạn có thể ra lệnh cho máy tính của bạn làm điều gì đó, bạn phải biết cách làm điều đó. Đây là một lĩnh vực mà Bash vượt trội:lập trình tương tác. Khi bạn thực hiện một hành động trong thiết bị đầu cuối, bạn cũng đang học cách viết kịch bản cho hành động đó.

Ví dụ, tôi đã từng được giao nhiệm vụ chuyển đổi một số lượng lớn sách PDF sang các phiên bản ít mực in và thân thiện với máy in. Một cách để thực hiện việc này là mở tệp PDF trong trình chỉnh sửa PDF, chọn từng hình ảnh trong số hàng trăm hình ảnh — nền và kết cấu trang được tính là hình ảnh — xoá chúng, sau đó lưu vào tệp PDF mới. Chỉ một cuốn sách sẽ mất nửa ngày theo cách này.

Suy nghĩ đầu tiên của tôi là học cách viết kịch bản cho một trình chỉnh sửa PDF, nhưng sau nhiều ngày nghiên cứu, tôi không thể tìm thấy một ứng dụng chỉnh sửa PDF nào có thể viết được (ngoài những bản hack tự động hóa chuột rất xấu xí). Vì vậy, tôi chuyển sự chú ý của mình sang việc tìm hiểu để hoàn thành nhiệm vụ từ bên trong một thiết bị đầu cuối. Điều này dẫn đến một số khám phá mới, bao gồm GhostScript, phiên bản mã nguồn mở của PostScript (dựa trên ngôn ngữ máy in là PDF). Bằng cách sử dụng GhostScript cho tác vụ trong vài ngày, tôi đã xác nhận rằng đó là giải pháp cho vấn đề của tôi.

Việc tạo một tập lệnh cơ bản để chạy lệnh chỉ đơn thuần là sao chép lệnh và các tùy chọn mà tôi đã sử dụng để xóa hình ảnh khỏi PDF và dán chúng vào một tệp văn bản. Chạy tệp dưới dạng tập lệnh, có lẽ sẽ tạo ra kết quả tương tự.

Truyền đối số vào tập lệnh Bash

Sự khác biệt giữa chạy một lệnh trong một thiết bị đầu cuối và chạy một lệnh trong một tập lệnh shell là cái trước là tương tác. Trong một thiết bị đầu cuối, bạn có thể điều chỉnh mọi thứ khi bạn di chuyển. Ví dụ:nếu tôi vừa xử lý example_1.pdf và sẵn sàng xử lý tài liệu tiếp theo, để điều chỉnh lệnh của tôi, tôi chỉ cần thay đổi tên tệp.

Tuy nhiên, một tập lệnh shell không tương tác. Trên thực tế, lý do duy nhất khiến một script shell tồn tại là để bạn không cần phải tham dự vào nó. Đây là lý do tại sao các lệnh (và các tập lệnh shell chạy chúng) chấp nhận các đối số.

Trong một tập lệnh shell, có một vài biến được xác định trước phản ánh cách một tập lệnh bắt đầu. Biến ban đầu là $ 0 và nó đại diện cho lệnh được đưa ra để bắt đầu tập lệnh. Biến tiếp theo là $ 1 , đại diện cho "đối số" đầu tiên được chuyển đến tập lệnh shell. Ví dụ:trong lệnh echo hello , lệnh echo 0 đô la, và từ xin chào $ 1 . Trong lệnh echo hello world , lệnh echo 0 đô la , xin chào $ 1 thế giới $ 2 .

Trong một trình bao tương tác:

$ echo hello world
hello world

Trong tập lệnh shell không tương tác, bạn có thể làm điều tương tự theo cách rất nghĩa đen. Nhập văn bản này vào tệp văn bản và lưu dưới dạng hello.sh :

echo hello world

Bây giờ hãy chạy tập lệnh:

$ bash hello.sh
hello world

Điều đó hoạt động, nhưng nó không tận dụng được thực tế là một tập lệnh có thể nhận đầu vào. Thay đổi hello.sh về điều này:

echo $1

Chạy tập lệnh với hai đối số được nhóm lại với nhau thành một đối số có dấu ngoặc kép:

$ bash hello.sh "hello bash"
hello bash

Đối với dự án giảm PDF của tôi, tôi thực sự cần loại không tương tác này, vì mỗi tệp PDF mất vài phút để cô đọng. Nhưng bằng cách tạo một tập lệnh chấp nhận đầu vào từ tôi, tôi có thể cung cấp cho tập lệnh nhiều tệp PDF cùng một lúc. Tập lệnh xử lý tuần tự từng cái một, có thể mất nửa giờ hoặc hơn, nhưng tôi có thể sử dụng nửa giờ cho các tác vụ khác.

Kiểm soát luồng

Hoàn toàn có thể chấp nhận được khi tạo các tập lệnh Bash về cơ bản là bản ghi của quá trình chính xác mà bạn đã thực hiện để đạt được nhiệm vụ mà bạn cần lặp lại. Tuy nhiên, các tập lệnh có thể trở nên mạnh mẽ hơn bằng cách kiểm soát cách thông tin chảy qua chúng. Các phương pháp phổ biến để quản lý phản hồi của tập lệnh đối với dữ liệu là:

  • nếu / thì
  • cho các vòng lặp
  • vòng lặp while
  • câu lệnh trường hợp

Máy tính không thông minh, nhưng chúng rất tốt trong việc so sánh và phân tích dữ liệu. Các tập lệnh có thể thông minh hơn rất nhiều nếu bạn xây dựng một số phân tích dữ liệu vào chúng. Ví dụ: hello.sh cơ bản script chạy cho dù có bất kỳ thứ gì để echo hay không:

$ bash hello.sh foo
foo
$ bash hello.sh

$

Nó sẽ thân thiện với người dùng hơn nếu nó cung cấp một thông báo trợ giúp khi không nhận được đầu vào. Đó là một câu lệnh if / then, và nếu bạn đang sử dụng Bash một cách cơ bản, có thể bạn sẽ không biết rằng một câu lệnh như vậy tồn tại trong Bash. Nhưng một phần của lập trình là học ngôn ngữ và với một nghiên cứu nhỏ, bạn sẽ tìm hiểu về câu lệnh if / then:

if [ "$1" = "" ]; then
        echo "syntax: $0 WORD"
        echo "If you provide more than one word, enclose them in quotes."
else
        echo "$1"
fi

Chạy phiên bản hello.sh mới này kết quả là:

$ bash hello.sh 
syntax: hello.sh WORD
If you provide more than one word, enclose them in quotes.
$ bash hello.sh "hello world"
hello world

Làm việc theo cách của bạn thông qua một tập lệnh

Cho dù bạn đang tìm kiếm thứ gì đó để xóa hình ảnh khỏi tệp PDF, hay thứ gì đó để quản lý thư mục Tải xuống lộn xộn của bạn, hay thứ gì đó để tạo và cung cấp hình ảnh Kubernetes, học viết kịch bản Bash là vấn đề sử dụng Bash và sau đó học cách lấy những tập lệnh đó từ chỉ một danh sách các lệnh đến một cái gì đó phản hồi đầu vào. Đó thường là một quá trình khám phá:bạn nhất định phải tìm các lệnh Linux mới thực hiện các tác vụ mà bạn chưa bao giờ tưởng tượng có thể được thực hiện với các lệnh văn bản và bạn sẽ tìm thấy các chức năng mới của Bash để làm cho các tập lệnh của bạn có thể thích ứng với tất cả các cách khác nhau mà bạn muốn chúng sẽ chạy.

Một cách để học những thủ thuật này là đọc kịch bản của người khác. Cảm nhận về cách mọi người đang tự động hóa các lệnh thuộc lòng trên hệ thống của họ. Xem những thứ quen thuộc với bạn và tìm kiếm thêm thông tin về những thứ không quen thuộc.

Một cách khác là tải xuống phần giới thiệu của chúng tôi về lập trình với sách điện tử Bash. Nó giới thiệu cho bạn các khái niệm lập trình dành riêng cho Bash và với các cấu trúc bạn học được, bạn có thể bắt đầu xây dựng các lệnh của riêng mình. Và tất nhiên, tải xuống miễn phí và được cấp phép theo giấy phép Creative Commons, vì vậy hãy lấy bản sao của bạn ngay hôm nay.

Tải xuống phần giới thiệu của chúng tôi về lập trình với Sách điện tử Bash!