Lý thuyết bash

/ bin / bash

0. Chỉ số

  1. Những điều xảy ra với hầu hết mọi người
  2. Cấu trúc của một tập lệnh
  3. In trên màn hình
  4. Đọc người dùng INPUT
  5. Tính toán bằng bash
  6. Điều khoản
  7. Vòng lặp
  8. chức năng
  9. getops

1. Những điều xảy ra với hầu hết mọi người

/ bin / bash hoặc / bin / sh

Một trong những điều đầu tiên máy làm khi thực thi tập lệnh của chúng ta là xem nó sẽ thực hiện với trình bao nào. Trên hầu hết các hệ thống linux hiện tại / Bin / sh là một liên kết đến / bin / bash, nhưng điều này không phải lúc nào cũng đúng, chẳng hạn như trong các bản phân phối sử dụng busybox mang đến Sh và thường họ cũng mang theo Cú đánh, nhưng nếu bạn sử dụng / Bin / sh, nó sẽ không chạy với Bash. Đó là lý do tại sao tôi khuyên bạn nên luôn sử dụng / bin / bash.

Unicode so với ASCII

Bạn đã bao giờ tự hỏi tại sao bạn không thể sử dụng "¿" hoặc "ñ" trong tập lệnh của mình? Hay sử dụng dấu? Nó có thể khá khó chịu trong các tập lệnh tương tác. Đó là vì mã hóa mặc định của Bash là ASCII, hoặc tương tự, bộ ký tự tiếng Anh. Để thay đổi nó, chúng tôi chỉ cần nói với tập lệnh của mình rằng chúng tôi muốn sử dụng Unicode. Đối với điều đó, bạn phải thêm một dòng ngay sau trình thông dịch lệnh:

# - * - THƯỞNG THỨC: UTF-8 - * -

Hãy cẩn thận, điều quan trọng là dòng này nằm ở phần đầu của script.

Làm cho tập lệnh có thể thực thi được

Thật buồn cười khi nhiều người chạy các tập lệnh với «$ bashscript.sh" thay vì "$ ./script.sh'Sau cùng, đây là những gì chúng tôi đã xác định một trình bao cho.

Để thêm quyền thực thi, bạn phải thực thi:

sudo + x script.sh
Nếu tập lệnh của chúng tôi có thể thực thi, chúng tôi có thể thêm nó vào PATH của mình và làm cho nó có thể thực thi từ bất kỳ đâu / thư mục trên máy tính của chúng tôi. Để làm được điều đó, chúng ta phải thêm vào .bashrc của người dùng hoặc vào / etc / bashrc dòng
BIN = "thư mục nơi chúng tôi có các tập lệnh" PATH = "$ BIN $ PATH"
Đó là một quy tắc Bash để viết các tên biến bằng tất cả các chữ hoa. Nhiều người không tuân theo quy tắc này, nhưng đối với các tập lệnh dài, nó được đánh giá cao vì chúng khiến chúng dễ đọc hơn nhiều

2. Cấu trúc của một script

  1. Đầu giường
  2. Định nghĩa các biến toàn cục
  3. Giúp
  4. chức năng
  5. Cơ thể chính

Tiêu đề là nơi chúng tôi chỉ ra trình bao mà chúng tôi muốn sử dụng và mã hóa. Ưu điểm của các hàm là sử dụng lại mã được lặp lại bằng cách viết nó một lần duy nhất và giúp dễ hiểu tập lệnh hơn, đối với mã vượt quá 100 dòng thì rất hữu ích.

Để sử dụng các hàm, chúng phải được định nghĩa trước phần chính của script. Và nếu chúng ta muốn sử dụng các biến ở cấp độ toàn cục của tất cả tập lệnh của chúng ta, cả trong phần thân chính và trong các hàm, chúng ta phải xác định chúng ở đầu mọi thứ, ngay sau phần đầu.

Cuối cùng, bạn nên viết một hàm trợ giúp khi tập lệnh của chúng ta chạy không tốt hoặc với các tham số xấu. Rõ ràng, trong những trường hợp đó, chúng ta muốn thoát script ngay lập tức mà không cần đọc các hàm. Vì vậy, chúng ta có thể sử dụng:

function help () {echo "" "Văn bản trợ giúp được định dạng tốt của chúng tôi." "" thoát nếu [[-z $ 1 || $ 1 == "-h" || $ 1 == "--help"]]; sau đó giúp fi

Nếu chúng tôi thêm "exit" vào chức năng trợ giúp, chúng tôi sẽ thoát tập lệnh mỗi khi chạy trợ giúp, ví dụ: sau khi có thông báo lỗi, v.v. Chúng tôi lưu một vài dòng mã.

Điều kiện chỉ ra trợ giúp hiển thị trên màn hình và thoát nếu tập lệnh được chạy mà không có tham số hoặc nếu -h / –help được chỉ định. Nếu bạn nhìn vào nó, đó là hành vi tiêu chuẩn của hầu hết các chương trình linux.

Việc sử dụng 3 dấu ngoặc kép với echo cho phép bạn sử dụng ngắt dòng mà không để thông báo hiển thị bằng echo. Đối với các tin nhắn nhiều dòng sẽ thuận tiện hơn nhiều nếu chỉ sử dụng echo một lần.

3. In trên màn hình

Có 2 lệnh chính để in ra màn hình trong bash: «bỏ lỡ"Y"printf«. Cả hai đều nhanh như nhau và cả hai đều là một phần của bash. Sự khác biệt chính đối với người mới bắt đầu là echo thêm một dòng mới ở cuối, trong khi «printf"Không làm.

Echo là tốt và là những gì hầu hết mọi người sử dụng, tuy nhiên khi đọc INPUT của người dùng hoặc khi bạn muốn in các biến lấy từ tệp bằng xử lý văn bản, những điều kỳ lạ có thể xảy ra. Chúng thường được giải quyết dễ dàng, chẳng hạn như thay đổi dấu ngoặc kép thành dấu nháy đơn hoặc ngược lại, hoặc lấy các tham chiếu biến ra khỏi dấu ngoặc kép. «Bắt chước»Những điều kỳ lạ cũng tùy thuộc vào cách nó được biên dịch, nếu chúng tôi luôn sử dụng Ubuntu hoặc luôn Fedora, điều đó không ảnh hưởng đến chúng tôi, nhưng nếu chúng tôi thay đổi bản phân phối thì nó sẽ xảy ra.

Đó là lý do tại sao tôi sử dụng «printf«, Điều này không làm tôi đau đầu và cũng cư xử giống như«printf»Từ C hoặc«in»Python, điều này rất quan trọng nếu bạn muốn chuyển tập lệnh của mình sang một ngôn ngữ lập trình khác.

Để có một cuộc thảo luận rộng hơn, bạn có thể truy cập câu hỏi này từ Unix & Linux trên Stack Exchange.

4. Đọc người dùng INPUT

Mọi thứ chúng ta viết sau tên của script và trước khi nhấn phím ENTER sẽ được tự động lưu trong các biến đặc biệt. Các biến này thuộc loại $ X trong đó X là một số.

«$0»Cho biết tên của tập lệnh của chúng tôi và từ«$1»Đến vô cùng, mọi thứ mà chúng ta đã viết sau này đều có thể thay đổi. Ví dụ:

cat << EOF >> test.sh #! / bin / bash # - * - ENCODING: UTF-8 - * - printf "\ $ 0 = $ 0 \ n" printf "\ $ 1 = $ 1 \ n" printf "\ $ 2 = $ 2 \ n "EOF chmod + x script.sh ./script.sh my file.txt

Chúng tôi tạo một tập lệnh thử nghiệm, làm cho nó có thể thực thi và chạy nó với 2 tham số. Chúng tôi nhận được đầu ra màn hình của:

$ 0 = ./script.sh $ 1 = my $ 2 = file.txt

Sử dụng dấu ngoặc kép, chúng tôi có thể đã chuyển "tệp tin.txt của tôi" thành "$ 1".

Chúng ta cũng có thể đọc INPUT của người dùng bằng lệnh "read", trực tiếp chỉ ra biến nơi chúng ta muốn lưu tham số. Ví dụ:

printf "Tên bạn là gì? \ n" đọc NAME printf "Xin chào, $ NAME. \ n"
Hãy cẩn thận với việc gán các biến. "$ VAR = content" sẽ tạo ra lỗi, không thể để khoảng trắng giữa dấu bằng, tên biến và nội dung. Cách sử dụng chính xác là "VAR = content"

5. Tính toán bằng Bash

Vì vậy, chúng ta có thể sử dụng «thể hiện«Miễn là chúng ta không cần thực hiện các phép tính phức tạp. Cần lưu ý hai điều, thứ nhất là «thể hiện»Chỉ thừa nhận các số nguyên, thứ hai là phép chia trả về toàn bộ kết quả, để xem phần còn lại chúng ta có thể sử dụng«%".

Thông thường chúng ta muốn gán kết quả của expr cho một biến. Chúng ta có thể làm điều đó theo hai cách:

VAR2 = `expr $ VAR1 / 10` VAR2 = $ (expr $ VAR1 / 100)

Bạn cũng có thể bỏ qua «thể hiện»Sử dụng dấu ngoặc kép:

VAR2 = $ (($ VAR1 / 100))
Để được giải thích thêm về «thể hiện»Hoặc một giải pháp thay thế sử dụng số nguyên, bạn có thể xem mục nhập KZKG ^ gaara này.

KHAI THÁC. Điều kiện

Nó đã được viết một cách rất sâu rộng về «if","khác","elif»Và điều kiện. Bạn có thể đọc về điều đó trong:

Tôi chỉ muốn làm nổi bật sự khác biệt giữa việc sử dụng các dấu ngoặc vuông đơn giản, «[]«, Và dấu ngoặc kép,«[[]]«, Đối với các điều kiện. Với dấu ngoặc kép, chúng ta có thể sử dụng các điều kiện bổ sung:

  • «&&"Cho và
  • «||"Cho hoặc

Để sử dụng "&&"Y"||»Với dấu ngoặc vuông đơn giản, mỗi phần nên được tách biệt trong dấu ngoặc vuông riêng biệt. Ví dụ được sử dụng cho một phần của tập lệnh để xem có cần chạy trợ giúp không sẽ là:

nếu [-z "$ 1"] || ["$ 1" == "-h"] || ["$ 1" == "--help"]]; sau đó giúp fi

Nó cũng giúp chúng ta không phải viết tên biến trong dấu ngoặc kép để tránh lỗi. Ví dụ:

nếu [$ 1 = 1]; then printf "Tham số bằng 1."; fi nếu ["$ 1" = 1]; then printf "Tham số bằng 1."; fi nếu [[$ 1 = 1]]; then printf "Tham số bằng 1."; fi

Nếu script.sh được chạy mà không có bất kỳ tham số nào, trường hợp đầu tiên sẽ xuất hiện lỗi:

bash: [: =: toán tử một ngôi được mong đợi
Trong Bash, "=" và "==" đều được hiểu theo cùng một cách. Điều này không xảy ra trong các ngôn ngữ lập trình khác nơi "=" chỉ được sử dụng để gán các biến.

Điều chưa được nói đến là «trường hợp«, Được sử dụng để đơn giản hóa«if«. Hãy bắt đầu từ đầu, khi chúng ta không có bất kỳ «if»Tất cả mã sẽ được thực thi. Nếu chúng ta thêm một điều kiện «if»Chúng ta sẽ có hai trường hợp, một trong đó khối mã nằm bên trong«if»Và trường hợp khác mà khối này không được thực thi.

Nếu chúng ta thêm một «khác«Chúng ta cũng sẽ có hai trường hợp, nhưng hai trường hợp này khác với những trường hợp trước. Vì lúc này sẽ có hai khối mã điều kiện là A và B và một khối C là phần còn lại của chương trình. A hoặc B sẽ được thực hiện, và C. Trong trường hợp trước đó là A và C hoặc chỉ C.

Để tránh điều kiện viết «nếu khác"trong"khác»Và đơn giản hóa việc đọc mã, nó được tạo ra«elif«. Khi chúng ta có nhiều điều kiện phụ thuộc vào điều kiện trước đó, ví dụ như dải số hoặc loại:

VAR1 = $ 1 nếu [[$ VAR1 = 1]]; sau đó printf "1 \ n" elif [[$ VAR1 = 2]]; sau đó printf "2 \ n" elif [[$ VAR1 = 3]]; sau đó printf "3 \ n" khác printf "none \ n" fi

Trong trường hợp cuối cùng «elif»Nhiều điều kiện sẽ được đọc. Với trường hợp, quy trình này được sắp xếp hợp lý:

VAR1 = $ 1 trường hợp $ VAR trong 1) printf "1 \ n" ;; 2) printf "2 \ n" ;; 3 | 4) printf "3 hoặc 4, nó phụ thuộc \ n" ;; *) printf "none \ n" ;; nó C

Một biến sẽ được đọc, trong trường hợp này là VAR1, và nó sẽ được xem nếu nó tương đương với bất kỳ trường hợp nào, nếu không, trường hợp mặc định "*" sẽ được thực thi. Dấu chấm phẩy kép tương đương với «phá vỡ«, Họ nói với«trường hợp»Điều đó phải kết thúc.

«Khay»Cũng có thể được sử dụng như một chuỗi«if«, Vì vậy bạn phải sử dụng« ;; & »(tiếp tục) thay vì« ;; » (dừng lại).

7. Vòng lặp

Rất ít vòng lặp được biết đến trong bất kỳ ngôn ngữ lập trình nào. Trong Bash họ «trong khi","cho đến khi"Y"cho«. Nó đã được viết trong blog về những điều này:

Có hai loại vòng lặp «cho«, Những cái đó thuộc loại«$ cho VAR trong LOQUESEA»Và loại C«$ cho ((I = 0; I <= 10; I ++))«. Loại vòng lặp thứ hai «cho»Rất hữu ích, nó có 3 phần ở đầu vòng lặp:

  • Khai báo và khởi tạo biến (Trong trường hợp này là biến phụ "I = 0").
  • Điều kiện thực thi (cho đến khi tôi nhỏ hơn hoặc bằng 10).
  • Mức tăng của biến phụ

Theo tôi đó là vòng lặp mạnh mẽ nhất. Một ví dụ, in tất cả các số từ 0 đến 10, bao gồm:

#! / bin / bash for ((I = 0; I <= 10; I ++)); làm printf "$ I \ n" xong

8. Chức năng

Có một số điều mà Bash không cho phép chúng ta làm, phải không? Thoạt nhìn, các hàm bash ngăn bạn làm 3 việc: khai báo các biến cục bộ trong các hàm, truyền tham số cho hàm và trả về tham số. Mọi thứ đều có cách giải quyết.

Không làm gì như:

#! / bin / bash Hàm VAR = 1 printc "$ VAR \ n" hello () {VAR = 2 printf "$ VAR \ n"} xin chào printf "$ VAR \ n"

Điều này sẽ in ra màn hình 1, 2 và 2.

Để khai báo các biến cục bộ, hãy thêm «địa phương»Khi khai báo:

#! / bin / bash VAR = 1 printf "$ VAR1 \ n" function foo () {local VAR1 = 2 printf "$ VAR1 \ n"} printf "$ VAR1 \ n" foo printf "$ VAR1 \ n"

Điều này sẽ in 1, 1, 2, 1 trên màn hình.

Làm thế nào để bạn chuyển các tham số cho một hàm?

#! / bin / bash # - * - THƯỞNG THỨC: UTF-8 - * - hàm hello () {printf "Hello $ 1 \ n"}

printf "Tên bạn là gì? \ n"
đọc VAR1
xin chào $ VAR1

Các tham số được trả về như thế nào?

#! / bin / bash # - * - THƯỞNG THỨC: UTF-8 - * - function hello () {printf "Hello holita"} printf "Tên bạn là gì? \ n" đọc VAR1 VAR1 = $ (xin chào) # ĐÂY LÀ printf "$ VAR1 $ VAR2 \ n"

Như bạn thấy, điều này có hai điểm hạn chế, bạn chỉ có thể trả về một tham số, có thể là một vector 😀, và nếu bạn muốn trả về một tham số, bạn không thể in trên màn hình từ hàm đó nữa.

Bạn có thể tìm thêm thông tin về các chức năng tại [url=https://blog.desdelinux.net/programando-en-bash-parte-3/]bài viết này từ Usemoslinux[/url].

9. Nhận được

Một trong những điều cuối cùng bạn cần biết về Bash để tạo các tập lệnh phức tạp là «đi lại«. Nó được sử dụng để chuyển các tùy chọn cho tập lệnh bất kể thứ tự. Nhược điểm duy nhất là nó chỉ ảnh hưởng đến các tùy chọn ngắn:

#! / bin / bash # - * - ENCODING: UTF-8 - * - VARC = 0 function help () {printf "Help message \ n" exit} if [[-z $ 1]]; sau đó trợ giúp fi while getopts: ha: b: c OPT; làm case $ OPT trong h) giúp với ;; :) Cứu giúp ;; a) VARA = $ OPTARG ;; b) VARB = $ OPTARG ;; c) VARC = 1 ;; \?) Cứu giúp ;; esac done # Khối chính của tập lệnh # thực hiện các việc với VARA, VARB và VARC

«getopts»Đọc từng tùy chọn một, vì vậy cần có một vòng lặp.

Có 2 loại tùy chọn có thể được thông qua bằng cách sử dụng «getopt":

  • Các tham số được gọi là cờ, trong trường hợp này là -c hoặc -h. Chúng được chỉ định bằng ký tự mà chúng tôi muốn sử dụng. Chúng giống như các biến Boolean, «đúng»(Đang) hoặc«sai”(Họ không có ở đây).
  • Các tham số với các đối số liên quan, -a bất kỳ, -b bất kỳ thứ gì. Chúng được chỉ định bằng ký tự mà chúng ta muốn với dấu hai chấm bên dưới. Đối số được lưu trữ trong OPTARG (tên này không thể thay đổi).
Điểm nhân đôi ban đầu là không có lỗi.

Tập lệnh này làm gì?

Hiển thị thông báo trợ giúp khi không có tùy chọn nào được truyền, khi tham số "-h" được truyền, khi một tham số không hợp lệ được truyền (ví dụ: "-x", điều này được thực hiện bởi "\?") Hoặc khi a tham số hợp lệ không có đối số (":"). Trong các trường hợp còn lại, nó lưu sự hiện diện của "-c" dưới dạng 1 trong VARC và các giá trị được chuyển với "-a" và "-b" trong VARA và VARB.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   sống động dijo

    CHÍNH THỨC. Tôi không nói thêm U_U

  2.   Miguel dijo

    Xin chào, bài viết rất hay.
    Này, bạn đặt quyền sudo + x thay vì chmod + x

    1.    đơn vị của tự cảm điện dijo

      $ sudo chmod + x script.sh
      (Chính xác hơn là hehe)

      Ah, xin chúc mừng và cảm ơn bạn!

  3.   chữa cháy dijo

    Bài viết rất hay, tôi thực sự chúc mừng bạn, hãy duy trì nó, Chúc mừng

  4.   Gustavo dijo

    Và nếu bạn muốn tập lệnh hiển thị khi nó được thực thi, từng bước một, ví dụ như cách các biến, điều kiện và mọi thứ hoạt động, bạn có thể sử dụng:

    tập lệnh sh -x

    Liên quan

  5.   Dago dijo

    PIECE của sự kèm cặp. Tuyệt vời và giải thích rất tốt.
    Cảm ơn bạn.

  6.   Gabriel dijo

    Bài đăng xuất sắc về chủ đề này 😉

  7.   Mario Guillermo Zavala Silva dijo

    Rất thú vị và rất quan trọng, cảm ơn vì thông tin….
    CHEERS !!!

  8.   notfrombrooklyn dijo

    Cảm ơn tất cả các bạn đã chúc mừng, đối với lệnh Miguel, anh ấy không cho phép tôi sửa đổi mục nhập sau khi nó được xuất bản. Nó sẽ phải làm elav tôi tưởng tượng.

  9.   Adrian dijo

    Rất tốt!

    Trước hết, tôi muốn chúc mừng bạn về bài đăng, tôi thấy nó rất dễ hiểu và nó thực sự hữu ích khi làm theo các hướng dẫn để lập trình tốt trong bash, đặc biệt là đối với những người mới bắt đầu lập trình.

    Tuy nhiên, tôi đã tìm thấy một vài chi tiết mà tôi nghĩ nên được sửa chữa.

    Đầu tiên: trong phần «2. CẤU TRÚC CỦA MỘT KHOẢNG CÁCH »hàm không được đóng, điều này sẽ gây ra sự cố khi thực thi nó trong một tập lệnh.
    Giải pháp sẽ là thêm một dấu ngoặc nhọn ngay sau lệnh "exit".

    Thứ hai: trong phần «4. ĐỌC NGƯỜI DÙNG ĐẦU VÀO ”bạn khẳng định rằng các tham số mà người dùng có thể nhập đi từ $ 0 đến vô cùng, tuy nhiên,“ bash ”sẽ chỉ diễn giải từ $ 0 đến $ 9, vì $ 10 sẽ bằng $ 1 + 0.
    Để giải quyết vấn đề này, bạn có thể sử dụng lệnh "shift" để lấy các biến sau. Hoặc chỉ định biến trong dấu ngoặc nhọn "$ {10}", để bash nhận các giá trị cùng nhau, không phải là $ 1 + 0.

    Không cần thêm lời chào, lời chào!

    1.    notfrombrooklyn dijo

      Cám ơn bạn đã góp ý. Nó hoàn toàn không giải thích được cách sử dụng đúng của exit, cả trong script và các hàm. Đối với $ {10}, tôi chưa bao giờ được thừa kế nhiều như vậy, vì vậy tôi không gặp phải vấn đề đó, thật tốt khi biết rằng có một giải pháp cho điều đó (tôi đã gạch bỏ điều mới học được hôm nay 😀).

  10.   chanio dijo

    Cảm ơn bạn rất nhiều về bài viết! Một số điều bạn đề cập vẫn còn thiếu rõ ràng. Ví dụ, getops.
    Trong phần kết quả màn hình, bạn không đề cập đến con mèo mà sau này bạn đề cập ...
    con mèo <
    ***************************************
    * MẪU NÀY RẤT RẤT RÕ RÀNG *
    ***************************************
    EOF

    Trong ví dụ của bạn:
    mèo << EOF >> test.sh
    Hai điều cần được đề cập ... >> chính là 'append', nghĩa là, nếu bạn lặp lại cùng một lệnh, bạn sẽ có toàn bộ tập lệnh bị trùng lặp ... Bạn chỉ nên sử dụng một ...
    cat << EOF> script.sh
    Có, nó cũng nên được gọi là script.sh
    Sau đó trong
    nếu [-z "$ 1"] || ["$ 1" == "-h"] || ["$ 1" == "–help"]]; sau đó
    giúp đỡ
    fi

    Tôi nghĩ nó nên được viết ...
    nếu [[-z "$ 1"] || ["$ 1" == "-h"] || ["$ 1" == "–help"]]; sau đó
    ...

    Còn nhiều điều hơn nữa để khám phá từ BASH.
    Bạn có thể đặt tên nó là "BASICS"? 🙂
    Ví dụ: tham số 'người kiểm tra' như -z để xem chúng có trống không hoặc -f để xem nó có tồn tại dưới dạng tệp hay không.

    Cảm ơn một lần nữa cho nỗ lực của bạn.
    alberto

  11.   clow_eriol dijo

    Một hướng dẫn kịch bản bash rất tốt!

  12.   OCZ dijo

    - PHÁT SINH: UTF-8 -

    Đây là lần đầu tiên tôi thấy dòng đó để đặt mã hóa ký tự trong một tập lệnh bash. Đối với tôi, nó giống Python hơn là Bash. Nó có thực sự cần thiết? Tôi đã tìm kiếm tài liệu tham khảo trên Google nhưng không tìm thấy gì cả, bạn có liên kết nào nói về vấn đề này không? Cụ thể là về mức độ phù hợp của dòng đó.

    Theo tôi, để viết script trong Bash bằng UTF-8, bạn chỉ cần lưu tệp văn bản như vậy (không có BOM) và có một số biến môi trường nhất định, (LANG và LC_ *), được đặt chính xác.
    Sau đó, rõ ràng, điều cần thiết là các lệnh được thực thi phải được chuẩn bị cho các mã hóa khác với ASCII. Ví dụ: nếu chúng ta muốn chuyển sang chữ hoa, điều này dường như không hoạt động:
    «Echo áéíóú | tr az AZ »
    o:
    «Echo áéíóú | tr [: dưới:] [: trên:] »
    và tốt hơn là sử dụng:
    «Echo áéíóú | awk '{print toupper ($ 0)}' ».

    1.    notfrombrooklyn dijo

      Về "mã hóa»Đã được đề cập trong blog này trước đây:

      Bash: cách làm cho một tập lệnh có thể thực thi được
      Đăng tập lệnh cài đặt tiện ích

    2.    muỗi như bạn dijo

      Ai đó sửa cho tôi, nhưng dòng mã hóa đó (# -- PHÁT SINH: UTF-8 --) Nó không liên quan gì đến bash hoặc shell: nó là một dòng chú thích (bắt đầu bằng #) và dùng để thông báo cho EDITOR biết rằng chúng tôi sử dụng để viết script (vim, emacs ...) mã hóa của tệp.

      Thực ra, bash không thấy dòng như vậy, vì nó là dòng chú thích.

  13.   JoRgE-1987 dijo

    Hướng dẫn tuyệt vời, vì Sysadmin biết Scripting trong Bash là điều cần thiết, nó hữu ích cho mọi thứ.

    Rất tốt!

    Chúc mừng!

  14.   Edward Cuomo dijo

    Trong trường hợp nó hữu ích cho bất kỳ ai, đây là một số cách sử dụng và ví dụ để tạo Tập lệnh của riêng bạn: https://github.com/reduardo7/hsabx

  15.   Lito đen dijo

    Rất tốt. Những điều mới để thêm vào kịch bản của tôi. Bộ mã hóa và printf không có nó.
    Cảm ơn bạn!!!

  16.   xxxtonixxx dijo

    Sooo bài viết hay! Tôi giữ cái này cho mục đích yêu thích, sẽ rất tốt nếu bạn sửa những gì sai và thậm chí mở rộng nó với nhiều nội dung hơn. Một tràng pháo tay cho tất cả thông tin này !!!!