Bạn có thể chạy tập lệnh bash trong python không?

Với các tập lệnh bash, bạn có thể chạy các chuỗi lệnh. Chúng ngăn bạn lặp lại chính mình và cho phép bạn lưu trữ các lệnh dài và tẻ nhạt để nhập để sử dụng sau này. Trong bài viết này, bạn sẽ tìm hiểu cách tạo tập lệnh Bash. Bạn cũng sẽ học cách đọc đối số, sử dụng biến và tạo vòng lặp for để lặp lại hành động

Trước khi bạn bắt đầu tạo tập lệnh, hãy đảm bảo rằng bạn đã quen thuộc với các lệnh cơ bản của Linux

Mục lục

Tạo tập lệnh Bash

Tập lệnh dòng lệnh bắt đầu bằng shebang — một chuỗi gồm hai ký tự

#!/bin/bash
8. Sau hai ký tự này, bạn có thể đặt tên cho bất kỳ trình thông dịch nào và một loạt các đối số, như thế này

#!interpreter [optional arguments]

Tập lệnh trình bao thường dựa trên trình bao phổ biến nhất được gọi là Bash, vì vậy điều này đơn giản sẽ trở thành

#!/bin/bash

Đôi khi bạn sẽ thấy điều này thay vì

#!/usr/bin/env bash

Khi sử dụng 

#!/bin/bash
9, lệnh được cung cấp sẽ được tìm kiếm trong 
#!/usr/bin/env bash
0 hiện tại, thay vì mã hóa cứng nó vào vị trí 
#!/usr/bin/env bash
1. Bash hầu như sẽ luôn được tìm thấy tại 
#!/usr/bin/env bash
1, vì vậy phương pháp đầu tiên phù hợp với chúng tôi

Tuy nhiên, bạn có thể muốn sử dụng thủ thuật này để tạo tập lệnh Python có thể thực thi được. Python có thể được cài đặt ở bất cứ đâu, tùy thuộc vào cách cài đặt. Tôi đã xem nó trong 

#!/usr/bin/env bash
3, 
#!/usr/bin/env bash
4, và 
#!/usr/bin/env bash
5, chỉ kể tên một số. Nếu bạn đang chạy một môi trường ảo, nó có thể ở bất cứ đâu. Vì vậy, tìm kiếm 
#!/usr/bin/env bash
0 là một lựa chọn tốt, vì điều đó sẽ tìm thấy phiên bản Python từ môi trường ảo

Chúng ta sẽ bắt đầu tạo một tập lệnh shell thực tế trong giây lát. Nhưng trước tiên, chúng ta sẽ xem xét các biến và vòng lặp for để cải thiện một chút

biến bash

Cũng giống như các ngôn ngữ khác, Bash có các biến. Một điều đặc biệt về các biến trong Bash là bạn truy cập chúng bằng ký hiệu đô la, nhưng bạn đặt chúng mà không có nó. Để làm rõ, đây là một ví dụ

myvar="Hello world"
echo $myvar

Bash có một số biến dành riêng, được đặt tự động cho bạn. Bảng sau đây là danh sách không đầy đủ của một số bảng hữu ích hơn

VariableFunction$0Tên của tập lệnh hiện tại. $1 … $99 Đối số đầu tiên cho tập lệnh. $#Số đối số được chuyển đến tập lệnh. $@Tất cả các đối số được cung cấp cho tập lệnh. $USERTên người dùng của người dùng đang chạy tập lệnh. $HOSTNAMETên máy chủ của máy mà tập lệnh đang chạy trên đó. $SECONDSSố giây kể từ khi tập lệnh được bắt đầu. $RANDOM Trả về một số ngẫu nhiên khác nhau mỗi khi nó được nhắc đến. $LINENOTrả về số dòng hiện tại trong tập lệnh Bash. Biến dành riêng cho Bash

Đối số Bash Script

Bây giờ chúng tôi có thể tạo tập lệnh shell, nhưng tập lệnh này sẽ thực hiện công việc tương tự mỗi khi bạn chạy nó. Chúng ta có thể làm cho nó thú vị hơn vô cùng bằng cách sử dụng các đối số

Đây là một ví dụ, hãy gọi nó là 

#!/usr/bin/env bash
7

#!/bin/bash
echo "Hello $1, from $0"

Nếu chúng ta chạy cái này với một đối số, kết quả như sau

$ ./arguments.sh Weirdo
Hello Weirdo, from ./arguments.sh

Những gì Bash làm là cắt nhỏ toàn bộ lệnh của bạn và gán nó cho các biến không mấy giàu trí tưởng tượng 

#!/usr/bin/env bash
8, 
#!/usr/bin/env bash
9, 
myvar="Hello world"
echo $myvar
0, v.v. Như bạn có thể thấy, phần đầu tiên của lệnh của chúng tôi là tên của chính tập lệnh. Điều này có thể hữu ích, như có thể thấy trong phần tiếp theo

Tạo một mạng lưới an toàn

Trước khi chuyển sang nội dung nghiêm túc, tôi muốn dạy bạn về một mạng lưới an toàn quan trọng

Khi bạn bắt đầu tạo kịch bản, bạn sẽ không tránh khỏi sai sót. Tất cả chúng ta làm. Một lỗi rất phổ biến trong kịch bản có thể đặc biệt tai hại. Đó là biến không được đặt. Nếu bạn không hiểu ý tôi, hãy tiếp tục đọc vì nó sẽ trở nên rõ ràng trong giây lát

Chúng tôi có thể ngăn việc sử dụng các biến chưa đặt bằng cách bắt đầu tập lệnh của mình bằng lệnh sau

set -u

Đó là tất cả. Từ đây trở đi, tập lệnh của bạn sẽ xử lý các biến chưa đặt là lỗi khi bạn thay thế

Ví dụ: tập lệnh này sẽ thất bại

#!/bin/bash
set -u
rm -rf /$my_directory

Đầu ra

$ ./test.sh                                                          
./test.sh: 3: ./test.sh: my_directory: parameter not set

Đó là bởi vì tôi chưa bao giờ đặt 

myvar="Hello world"
echo $myvar
1. Nếu không có 
myvar="Hello world"
echo $myvar
2, nó sẽ không thất bại mà thay vào đó, chỉ cần bỏ qua biến trống, để lại cho chúng tôi lệnh 
myvar="Hello world"
echo $myvar
3. Tất cả chúng ta đều biết điều đó làm gì, phải không?

Tạo thói quen luôn bắt đầu tập lệnh của bạn bằng 

myvar="Hello world"
echo $myvar
2

Bash cho vòng lặp

Tính hữu ích của dòng lệnh và đặc biệt là các tập lệnh sẽ tăng theo cấp số nhân khi bạn thành thạo các vòng lặp Bash. Và mặc dù chúng trông có vẻ đáng sợ, nhưng chúng thực sự không khó đến thế

Cú pháp của vòng lặp Bash for-loop

Cú pháp cơ bản của một vòng lặp là

for VARIABLE in A LIST
do
  command1
  command2
  commandN
done

Ví dụ tập lệnh Bash

Phần

myvar="Hello world"
echo $myvar
6 có thể là bất cứ thứ gì. tên tệp, số hoặc chuỗi. Tuy nhiên, nó sẽ là một danh sách các tên tệp trong hầu hết các tập lệnh, vì đó là những gì chúng tôi thường làm việc với Bash. Bây giờ chúng ta đã biết cách tạo một vòng lặp, hãy xem tập lệnh đầu tiên của chúng ta

#!/bin/bash
0

Trong vòng lặp for cuối cùng, tôi đã sử dụng biểu thức 

myvar="Hello world"
echo $myvar
7. Điều này thực thi lệnh giữa các dấu ngoặc đơn và thay thế kết quả. Trong trường hợp này, 
myvar="Hello world"
echo $myvar
8 được thực thi và vòng lặp for được cung cấp các tên tệp mà _______12_______8 được in ra

Bắt đầu một tập lệnh Bash

Để bắt đầu tập lệnh này, chúng ta có thể làm hai việc. Đầu tiên, chúng ta có thể chạy nó với

#!/bin/bash
1

Cách thứ hai mà tôi khuyên dùng là làm cho tệp có thể thực thi được. Hệ điều hành sẽ biết cách thực thi tệp của chúng tôi vì dòng shebang của chúng tôi ở trên cùng. Làm cho tệp có thể thực thi được thực hiện bằng cách đặt "cờ thực thi" của tệp như thế này

#!/bin/bash
2

Bây giờ bạn có thể chạy tập lệnh với

#!/bin/bash
3

Đầu ra trong trường hợp của tôi là

#!/bin/bash
4

Nó có thể khác đối với bạn, tùy thuộc vào tệp nào trong thư mục mà bạn đang chạy tập lệnh trong đó

Bash lập trình có điều kiện

Đôi khi bạn chỉ muốn chạy một lệnh nếu một điều kiện nào đó là đúng. Đối với điều này, chúng ta có cấu trúc 

#!/bin/bash
echo "Hello $1, from $0"
0 trong bash

Kiểm tra các đối số trong tập lệnh bash

Chúng ta có thể sử dụng lập trình có điều kiện để cải thiện ví dụ trước của mình,

#!/usr/bin/env bash
7, vì nó có một vấn đề nhỏ. Nó mong đợi một cái tên trong 
#!/usr/bin/env bash
9 mà không cần kiểm tra xem nó có thực sự có một cái tên hay không. Hãy khắc phục điều này

Kiểm tra các đối số trong tập lệnh Bash của bạn

Nếu điều đó không hiệu quả, đây là phiên bản tĩnh của cùng một mã

#!/bin/bash
5

Lệnh kiểm tra trong bash

Với 

#!/bin/bash
echo "Hello $1, from $0"
3 chúng ta có thể kiểm tra xem độ dài của một biến có bằng 0 không. Nếu đúng như vậy, chúng tôi in một số hướng dẫn sử dụng thân thiện

#!/bin/bash
6

Lệnh test có thể kiểm tra nhiều thứ nên nó thực sự hỗ trợ trong lập trình có điều kiện. Danh sách đầy đủ có thể được nhìn thấy khi bạn nhập

#!/bin/bash
echo "Hello $1, from $0"
4 trên dòng lệnh. Đúng vậy, bạn không cần Google cho mọi thứ. Sử dụng các trang hướng dẫn là một phần của việc trở thành ninja dòng lệnh. Bạn sẽ thấy rằng có một trang hướng dẫn dành cho hầu hết mọi thứ bạn có thể làm trong thiết bị đầu cuối của mình. Xét cho cùng, ngày xưa, chúng ta không có Internet để google mọi thứ…

Đây là một ví dụ nữa trong đó chúng ta so sánh hai giá trị để xem chúng có giống nhau không

So sánh hai giá trị trong Bash

Đây là phiên bản tĩnh trong trường hợp không hoạt động

#!/bin/bash
7

Vòng lặp này chạy trong 10 lần lặp lại và mỗi lần kiểm tra xem 

#!/bin/bash
echo "Hello $1, from $0"
5 có bằng 3 không. Bạn có thể dự đoán đầu ra?

Python có thể chạy tập lệnh Linux không?

Để chạy tập lệnh trên Linux. Nhấp chuột phải vào màn hình của bạn và nhấp vào Terminal để mở terminal. Bạn cũng có thể mở terminal bằng cách nhấn Ctrl+Alt+T. Nhập python và nhấn Enter để bắt đầu viết mã của bạn .

Python có tốt cho shell scripting không?

Ngoài ra, Python và Bash đều là ngôn ngữ kịch bản Shell , được phát triển chủ yếu để xử lý hệ thống và các tệp của hệ thống.

Tôi có thể chạy bash trong sổ ghi chép Jupyter không?

Nhân R và Bash Jupyter . Nếu bạn cài đặt hạt nhân R và Bash Jupyter, bạn sẽ có thể sử dụng Jupyter Notebook làm sổ ghi chép cho các đường dẫn bằng một trong hai ngôn ngữ này .