Làm cách nào để tạo một tệp script cho các lệnh đầu cuối?


114

Trong Windows tôi có thể viết một tệp chứa các lệnh cho cmd (thường .cmdhoặc .batcác tệp). Khi tôi nhấp vào các tệp đó, nó sẽ mở cmd.exevà chạy các lệnh mà tệp chứa.

Làm thế nào tôi có thể làm điều này trong Ubuntu?

Tôi chắc chắn đây là một bản sao, nhưng tôi không thể tìm thấy câu trả lời của mình.
Nó tương tự như những câu hỏi này, nhưng họ không trả lời câu hỏi:

Lưu trữ các lệnh đầu cuối được sử dụng thường xuyên trong một tệp

Trình giả lập CMD.exe trong Ubuntu để chạy tệp .cmd / .bat

Câu trả lời:


150

Có hai phương pháp.

Đầu tiên, phổ biến nhất là viết một tập tin, đảm bảo dòng đầu tiên là

#!/bin/bash

Sau đó lưu tập tin. Đánh dấu tiếp theo nó có thể thực thi được bằng cách sử dụngchmod +x file

Sau đó, khi bạn bấm (hoặc chạy tệp từ thiết bị đầu cuối), các lệnh sẽ được thực thi. Theo quy ước, các tệp này thường không có phần mở rộng, tuy nhiên bạn có thể làm cho chúng kết thúc theo .shbất kỳ cách nào khác.

Một vài lưu ý:

  • Bất kỳ tệp nào (và ý tôi là bất kỳ) đều có thể được thực thi trong Linux với điều kiện dòng đầu tiên là đường dẫn đến chương trình sẽ diễn giải tệp. Ví dụ phổ biến bao gồm /bin/python, /bin/sh, /bin/dash, nhưng ngay cả lẻ bóng mọi thứ làm việc như/bin/mysql
  • Bash là một ngôn ngữ đầy đủ. Nó phức tạp hơn nhiều so với cmd.exe trong windows. Nó có một ngôn ngữ lập trình mạnh mẽ hỗ trợ các hàm, vòng lặp, điều kiện, hoạt động chuỗi, v.v.
  • Những tài liệu này có thể giúp đỡ nếu bạn gặp vấn đề.
  • Nếu bạn không muốn làm cho tập tin thực thi thì bạn có thể chạy nó bằng cách chuyển nó dưới dạng đối số cho bash: bash file/to/run.sh

Một ví dụ Bash đơn giản

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

Phương pháp thứ hai là ghi lại các lệnh bằng cách sử dụng script. Chạy scriptrồi chỉ làm đồ. Khi bạn hoàn thành việc thực hiện loại công cụ exitvà tập lệnh sẽ tạo một tệp cho bạn với tất cả "công cụ" bạn đã làm. Điều này ít được sử dụng nhưng hoạt động khá tốt để làm những thứ như macro. man scriptđể biết thêm.


Bạn có thể muốn thay đổi điều đó /bin/bashthành /bin/sh, bash thậm chí không phải là mặc định cho Ubuntu.
TC1

@ TC1 Nó được cài đặt theo mặc định, vì vậy nó không quan trọng nếu nó là mặc định hay không.
Carlos Campderrós

1
Tôi muốn chỉ ra rằng /bin/dash( /bin/shthường được liên kết với nhau), nhanh hơn rất nhiều so với bash (tôi đo nhanh hơn khoảng 15 lần). Nếu có thể, hãy sử dụng /bin/dashcho các kịch bản shell :)
MiJyn

4
Nếu bạn trong cùng thư mục với tệp, hãy đảm bảo ./file.sh
coteyr

1
Tôi đã thử cả hai phương pháp, nhưng nếu tôi cố bấm đúp vào tệp bash script, nó chỉ mở tệp văn bản trong geany / gedit sẵn sàng để chỉnh sửa. Tôi muốn tập lệnh được thực thi khi nhấp đúp chuột. Câu hỏi này giữ chi tiết hơn về những gì tôi muốn làm.
thymaro

15

Bạn có nghĩa là viết vào một tập tin bằng cách sử dụng một kịch bản shell? Dưới đây là một vài cách:

touch file

Phương pháp này chỉ đơn giản là tạo một tệp, nhưng nếu tệp đã tồn tại, nó chỉ đơn giản là thay đổi ngày sửa đổi thành thời gian bạn sử dụng lệnh đó.

echo "text" > file

Đó là phương pháp ghi đè nội dung của fileđể text. Nếu bạn muốn xóa một tập tin, bạn chỉ cần làm điều này:

echo "" > file

Giả sử bạn muốn viết nhiều hơn một dòng cho nó và bạn không muốn sử dụng hàng ngàn echolệnh, bạn sẽ sử dụng lệnh này:

cat << EOF > file
test
test1
foo
bar
EOF

Điều đó cho phép bạn viết nhiều dòng trong một lệnh. Nội dung filesau đó sẽ là:

test
test1
foo
bar

Nếu bạn muốn thêm vào một tập tin, thay thế >vào >>.

Hi vọng điêu nay co ich!


EDIT : Ồ, tôi hiểu rồi, vì vậy bạn sẽ viết tệp bằng gedit, sử dụng .shtiện ích mở rộng (tùy chọn, nhưng đó là một ý tưởng hay), sau đó trên trình quản lý tệp, nhấp chuột phải vào tệp, chọn Thuộc tính-> Quyền và kiểm tra Allow executing file as program. Sau đó, bạn có thể nhấp đúp vào nó và nó sẽ chạy :). Ngoài ra, nếu bạn muốn làm như vậy trong thiết bị đầu cuối, bạn có thể chạy lệnh này để làm cho nó có thể thực thi được (bạn có thể muốn trả trước sudonếu nó không thuộc về bạn):

chmod +x file

Và để chạy:

./file

Trên thực tế những gì tôi muốn làm là viết một tập tin, nói gedit, có chứa các lệnh đầu cuối. Sau đó, khi tôi nhấp đúp vào tệp này, nó sẽ chạy các lệnh đó trong thiết bị đầu cuối.
Seth

Câu trả lời tuyệt vời, cập nhật ân cần. Để chỉ cần tạo một tệp, tôi luôn luôn sử dụngtouch filename
TryTryAgain

@TryTryAgain, vâng đó là một phương pháp dễ dàng, có thể nhanh hơn echo "" > file. Có ổn không nếu tôi đưa phương pháp đó vào câu trả lời của mình?
MiJyn

@MiJyn Hoàn toàn bao gồm nó, cảm thấy tự do. Cảm ơn
TryTryAgain

Làm thế nào tôi có thể làm cho nó chạy bất kỳ nơi nào trong thiết bị đầu cuối ... như một lệnh toàn cầu?
Omer

14

Tương đương với các tệp bó của Windows là các tập lệnh shell và một hướng dẫn bắt đầu tuyệt vời là Bash Scripting .

Đối với hầu hết các phần, các lệnh mà bạn có thể nhập vào dòng lệnh có thể được đặt trong tập lệnh shell.

Một vài điều khác với các tệp bó của Windows:

  • Có các phiên dịch lệnh khác nhau, được gọi là shell. Mặc định là bash, nhưng nếu bạn quan tâm, có những cái khác, chẳng hạn như zsh, ksh, dash, perl, python, v.v.

  • Để chạy tập lệnh shell, bạn cần làm cho tập tin thực thi, bạn có thể làm với chmod +x <filename>

  • Trong Ubuntu, thư mục hiện tại không phải là đường dẫn tìm kiếm chương trình, vì vậy bạn cần chạy ./<filename>chứ không phải<filename>

  • Tên biến là $<varname>, không%<varname>%

  • Các lệnh trong tập lệnh shell không được in theo mặc định, như trong một tệp bó.

  • Phần mở rộng của tên tệp có thể .shhoặc (thông thường hơn) bạn không cần sử dụng tiện ích mở rộng. Đặt #!/bin/bashdòng đầu tiên của tệp , cho Ubuntu biết chương trình nào sẽ sử dụng để chạy tệp.

  • Bình luận bắt đầu với #, không rem.

Hy vọng điều này sẽ giúp và có kịch bản thú vị!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.