Zsh so với Bash Scripting. Có gì khác biệt?

Zsh so với Bash Scripting. Có gì khác biệt?
Những độc giả như bạn giúp ủng hộ MUO. Khi bạn mua hàng bằng các liên kết trên trang web của chúng tôi, chúng tôi có thể kiếm được hoa hồng liên kết. Đọc thêm.

Khi nói đến shell script trên các hệ điều hành giống Unix, có hai shell chiếm ưu thế: Bash (Bourne Again Shell) và Zsh (Z Shell). Nếu bạn là lập trình viên hoặc quản trị viên hệ thống, việc lựa chọn giữa hai điều này sẽ ảnh hưởng đáng kể đến hiệu quả và năng suất của bạn.





khu vực ứng dụng là gì
Video MUO trong ngày CUỘN ĐỂ TIẾP TỤC VỚI NỘI DUNG

Hiểu được sự khác biệt và tương đồng giữa hai shell này sẽ giúp bạn tối ưu hóa quy trình làm việc dòng lệnh của mình. Biết về các sắc thái của từng loại vỏ sẽ giúp bạn đưa ra quyết định sáng suốt.





Bash và Zsh là gì?

Bash phổ biến trên cả hệ thống Linux và macOS. Đó là một công cụ mạnh mẽ mà bạn có thể sử dụng để tương tác với hệ điều hành và chạy các lệnh. Bạn cũng có thể sử dụng Bash cho kịch bản shell , tự động hóa các tác vụ bằng cách viết các tập lệnh chứa nhiều lệnh.





Zsh (Z shell) là phiên bản mở rộng của Bash có nhiều tính năng hơn. Đây là shell mặc định trên macOS. Nó cũng ngày càng trở nên phổ biến trên các hệ thống Linux.

Cách chuyển từ Bash sang Zsh

Nếu bạn đang sử dụng hệ thống Linux và muốn chuyển sang Zsh, hãy bắt đầu bằng cách sử dụng trình quản lý gói của bạn để cài đặt nó . Ví dụ: trên Debian hoặc Ubuntu, hãy sử dụng lệnh sau:



 sudo apt install zsh

Sau khi cài đặt nó trên hệ thống của bạn, hãy chuyển sang nó bằng cách chạy lệnh sau:

 chsh -s $(which zsh)

Nếu bạn đang sử dụng macOS thì Zsh đã được cài đặt sẵn. Để chuyển sang nó chạy lệnh sau:





 chsh -s /bin/zsh

Để chuyển về Bash, hãy thay thế Zsh bằng Bash trong các lệnh trên.

Để kiểm tra xem bạn đang sử dụng shell nào, hãy chạy lệnh sau:





 echo $SHELL

Điều này sẽ giúp bạn xác nhận rằng bạn đang sử dụng shell mà bạn dự định.

Sự khác biệt giữa Zsh và Bash

Có một số khác biệt giữa Zsh và Bash. Việc xem xét những khác biệt này sẽ giúp bạn quyết định loại vỏ nào phù hợp nhất với mình.

1. Tùy chỉnh nhanh chóng

Zsh cung cấp một cách dễ dàng hơn để tùy chỉnh lời nhắc của bạn bằng cách sử dụng % dựa trên trình tự thoát. Điều này cho phép lời nhắc động có màu sắc và thông tin. Để tùy chỉnh dấu nhắc shell của bạn, hãy xác định PS1 (Lời nhắc chính).

 PS1="%F{green}%n@%m %F{blue}%~ %f$ " 

Lời nhắc tùy chỉnh ở trên hiển thị tên người dùng, tên máy chủ và thư mục hiện tại với các màu khác nhau:

  Tùy chỉnh lời nhắc Zsh trên thiết bị đầu cuối

Có nhiều các cách khác để tùy chỉnh lời nhắc Zsh , cho phép bạn đặt chỉ báo quản trị viên, bao gồm ngày và giờ cũng như lưu lời nhắc mới.

Bash sử dụng một cách tiếp cận hơi khác khi nói đến việc tùy chỉnh nhanh chóng. Nó sử dụng mã thoát để chỉ định các thay đổi về màu sắc và định dạng trong lời nhắc. Để đạt được tùy chỉnh tương tự như Zsh ở trên, bạn có thể sử dụng lời nhắc tùy chỉnh sau.

 PS1="\[3[32m\]\u@\h \[3[34m\]\w \[3[0m\]$ " 

sử dụng \[3[0m\] rất quan trọng vì nó đảm bảo rằng những thay đổi về màu sắc không ảnh hưởng đến văn bản theo sau lời nhắc.

2. Hỗ trợ mảng kết hợp

Zsh vốn hỗ trợ mảng kết hợp. Các mảng này cung cấp một cách thuận tiện để liên kết dữ liệu, giúp dễ dàng sắp xếp và truy xuất thông tin. Sử dụng tuyên bố -MỘT lệnh khai báo rõ ràng một mảng kết hợp:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

Sau đó bạn có thể gán giá trị cho mảng kết hợp:

 my_assoc_array=(key1 value1 key2 value2) 

Và cuối cùng, truy cập các giá trị bằng khóa của chúng:

 echo $my_assoc_array[key1] # Outputs: value1

Bash đã bao gồm hỗ trợ riêng cho mảng kết hợp kể từ phiên bản 4.0. Bạn khai báo và gán các giá trị giống như cách bạn làm trong Zsh. Nhưng khi truy cập các giá trị mảng, bạn cần bọc khóa bên trong dấu ngoặc nhọn:

 echo "${my_assoc_array[key1]}" 

Sự khác biệt chính là sự hỗ trợ của Zsh cho mảng kết hợp có nhiều tính năng và tiên tiến hơn Bash. Zsh cho phép các mảng kết hợp có các khóa thuộc nhiều loại dữ liệu khác nhau, không chỉ các chuỗi. Bash chỉ hỗ trợ các phím chuỗi.

Trong các phiên bản Bash trước, bạn cần tìm ra cách giải quyết hoặc có các công cụ bên ngoài để sử dụng mảng kết hợp.

tôi có thể nhận được bao nhiêu thông báo vi phạm bản quyền

3. Mô hình toàn cầu mở rộng

Các mẫu toàn cầu mở rộng cung cấp một cách mạnh mẽ và linh hoạt để chọn và thao tác các tệp và thư mục dựa trên các tiêu chí khác nhau. Chúng hữu ích khi bạn làm việc với các cấu trúc tệp phức tạp hoặc khi bạn cần kiểm soát chính xác các lựa chọn tệp.

Trong tập lệnh Zsh, bạn có thể kích hoạt các mẫu này bằng cách sử dụng cài đặt yêu cầu. Ví dụ, để phù hợp với tất cả .txt các tập tin trong thư mục hiện tại:

 setopt extended_glob 
txt_files=(*.txt)

Để khớp tất cả các tệp ngoại trừ những tệp có phần mở rộng .log:

 setopt extended_glob 
non_log_files=^(*.log)

Trong Bash, bạn cần kích hoạt chúng bằng cách sử dụng cửa hàng lệnh với extglob lựa chọn. Ví dụ, để phù hợp với tất cả .txt các tập tin trong thư mục hiện tại:

 shopt -s extglob 
txt_files=(*.txt)

Để khớp tất cả các tệp ngoại trừ những tệp có .log sự mở rộng:

 shopt -s extglob 
non_log_files=!(*.log)

Sự khác biệt chính giữa Zsh và Bash khi nói đến các mẫu hình cầu là lệnh được sử dụng để kích hoạt chúng. Tuy nhiên, lưu ý rằng một số toán tử khác nhau giữa hai shell.

4. Mở rộng tham số nâng cao

Zsh hỗ trợ mở rộng gián tiếp các tham số. Điều này cho phép bạn mở rộng giá trị của một biến có tên được lưu trong một biến khác. Để đạt được điều này, bạn cần đặt trước tên biến một dấu chấm than ! .

 name="foo" 
result="${!name}"
echo "$result"

Mặt khác, Bash không cho phép mở rộng gián tiếp nguyên bản. Cách giải quyết cho vấn đề này là sử dụng đánh giá lệnh tích hợp hoặc ${!was} cú pháp tham chiếu biến gián tiếp.

 name="world" 
var="name"
echo ${!var} # This will output: world

Điểm tương đồng giữa Bash và Zsh

Mặc dù có sự khác biệt giữa Bash và Zsh nhưng chúng cũng có một số điểm tương đồng.

1. Cú pháp dòng lệnh

Bash và Zsh có chung cú pháp dòng lệnh. Điều này thật tuyệt vì nó có nghĩa là hầu hết các lệnh và tập lệnh bạn viết sẽ hoạt động trong cả hai shell mà không cần sửa đổi. Zsh được xây dựng dựa trên Bash, vì vậy nó bao gồm tất cả các lệnh và tính năng cơ bản giống nhau.

Tuy nhiên, có những khác biệt rất nhỏ về cú pháp mà bạn cần xác định và điều chỉnh.

2. Tính nhất quán của việc thay thế lệnh

Thay thế lệnh là quá trình nhúng đầu ra của lệnh này vào lệnh khác. Nó nhất quán giữa cả hai vỏ.

 result=$(ls) 

Trong cả Bash và Zsh, bạn có thể sử dụng $(lệnh) cú pháp để thay thế đầu ra của lệnh thành một biến. Điều này cho phép dễ dàng di chuyển các tập lệnh giữa hai shell.

3. Tùy chọn gỡ lỗi tập lệnh

Cả Bash và Zsh đều sử dụng -x cờ để gỡ lỗi tập lệnh. Khi bạn chạy một tập lệnh có cờ này, nó sẽ hiển thị từng lệnh trước khi chạy. Điều này giúp bạn xác định các vấn đề trong tập lệnh của mình.

 # Debugging a script in both Bash and Zsh 
#!/bin/bash -x

echo "Debugging Bash script"

Trong tập lệnh Bash này, -x cờ cho phép gỡ lỗi. Bạn có thể sử dụng cách tiếp cận tương tự trong Zsh; chỉ cần thay thế đánh đập với zsh .

Những cân nhắc khi lựa chọn giữa Zsh và Bash

  • Khả năng tương thích và tính di động : Bash là shell mặc định trên nhiều hệ thống dựa trên Unix. Điều này làm cho nó trở thành một lựa chọn an toàn hơn cho việc viết kịch bản đa nền tảng. Nếu bạn cần tập lệnh của mình chạy trên nhiều hệ thống mà không cần sửa đổi, Bash là một lựa chọn tốt hơn.
  • Độ phức tạp của tập lệnh và các tính năng nâng cao : Zsh cung cấp các tính năng nâng cao như mảng kết hợp, mô hình toàn cầu mở rộng và mở rộng tham số nâng cao. Điều này đơn giản hóa các tác vụ kịch bản phức tạp. Nếu tập lệnh của bạn yêu cầu thao tác chuỗi hoặc cấu trúc dữ liệu nâng cao, Zsh là lựa chọn tốt hơn.
  • Hệ sinh thái cộng đồng và plugin : Cả Bash và Zsh đều có cộng đồng tích cực, nhưng Zsh có cộng đồng mạnh mẽ hơn và hệ sinh thái plugin và chủ đề rộng lớn. Nếu bạn coi trọng khả năng tùy chỉnh thì cộng đồng sôi động và hỗ trợ plugin của Zsh có thể là một lợi thế đáng kể.
  • Dễ học : Nếu bạn chưa quen với shell script, Bash là điểm khởi đầu dễ tiếp cận hơn. Nó có nhiều tài liệu và tài nguyên có sẵn cho người mới bắt đầu. Điều này làm cho việc tìm hiểu những điều cơ bản về shell script trở nên dễ dàng hơn.

Tự động hóa tác vụ bằng Shell Script

Biết cách tự động hóa các tác vụ bằng cách sử dụng tập lệnh shell là rất quan trọng. Bạn có thể tự động hóa các tác vụ lặp đi lặp lại và tiết kiệm rất nhiều thời gian.

Bạn cũng có thể sử dụng các tập lệnh này để quản lý tài khoản người dùng, giám sát tài nguyên hệ thống, sao lưu dữ liệu và thực hiện bảo trì định kỳ. Khi được viết cẩn thận, chúng cũng có thể làm giảm khả năng xảy ra lỗi của con người.