Chạy một .sh để thực thi nhiều lệnh


9

Tôi tò mò làm thế nào tôi có thể chạy nhiều lệnh thông qua shell script.

Ví dụ: chỉ để dùng thử, tôi muốn có thể kết nối .desktop với .sh sẽ chạy tất cả các mã cập nhật để tôi không phải gõ nó. Tôi biết cách thực hiện một lệnh đơn thông qua một .sh, không phải nhiều.

Dù sao?

Câu trả lời:


10

Đơn giản thực sự - bạn cần tách các lệnh. Ví dụ:

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade

sẽ cập nhật danh sách gói, và sau đó là các gói. Một khả năng khác là điều này (có thể tốt hơn, vì && sẽ chỉ cho phép upgradelệnh chạy nếu updatethoát thành công) :

#!/bin/bash
sudo apt-get update && sudo apt-get upgrade

Điều này sẽ chạy các lệnh để cập nhật danh sách các gói và sau đó chính gói đó. Điều này sẽ cần phải được lưu vào một tệp văn bản (ví dụ updatescripttrong thư mục chính). Sau đó, bạn có thể làm cho nó thực thi được bằng cách chạy:

 chmod +x ./updatescript

hoặc bằng cách nhấp chuột phải vào tệp và làm cho nó có thể thực thi được trong các thuộc tính của nó:

và chạy nó với cái này trong terminal:

 ./updatescript

Lưu ý:

Có một tùy chọn ( -y) có sẵn có thể được sử dụng với upgradelệnh để nó không nhắc trước khi nâng cấp các gói. Đó là một ý tưởng tốt để kiểm tra những gì apt-getđang làm trước khi nâng cấp các gói, vì nó có thể / sẽ làm điều gì đó ngu ngốc hoặc điều gì đó bạn không muốn nó làm. Thông tin thêm về các tùy chọn như thế này có thể được tìm thấy bằng cách chạy man apt-get.

Điều này cũng có nghĩa là lý tưởng hơn khi sử dụng thiết bị đầu cuối để chạy tập lệnh, vì bạn có thể kiểm tra những gì nó đang cập nhật, và sau đó chạy nó. Nếu bạn muốn có một cách GUI để chạy các bản cập nhật, hãy sử dụng trung tâm phần mềm vì đó là mục đích của nó.


5

Chỉ cần thêm một vài điểm vào câu trả lời xuất sắc của @Wilf,

bạn có thể chạy các lệnh theo paralell nếu bạn muốn vì bất kỳ lý do gì, ví dụ, một autostarttập lệnh cho OpenBox có thể trông như thế này:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Điều này sẽ thiết lập một hình ảnh nền bằng cách sử dụng nitrogen, khởi động bảng điều khiển tint2và khởi động bảng điều khiển thả xuống kiểu Quake3 tilda, tất cả cùng một lúc. Điều này hữu ích nếu bạn không cần một chương trình để kết thúc trước khi bạn khởi chạy chương trình tiếp theo. Không phải trường hợp apt-get updateapt-get upgrademặc dù!

Lưu ý &dấu hiệu ở cuối mỗi dòng. Điều này sẽ khiến shell rẽ nhánh quá trình đó vào nền và tiếp tục thực hiện. Lưu ý rằng nó khác với &&, về cơ bản là một anddấu hiệu, command_1 && command_2sẽ thực thi command_1và nếu nó thoát thành công, chỉ sau đó chạy command_2, trong khi command_1 & command_2sẽ bắt đầu lần thứ hai ngay sau lần đầu tiên.


Ngoài ra, bạn chỉ có thể xếp chồng các lệnh để chúng được thực thi ser seri, như vậy:

#!/bin/bash

apt-get update
apt-get upgrade

Điều này sẽ chạy apt-get upgradesau khi apt-get updateđược hoàn thành , nhưng bất kể kết quả. Vì vậy, ngay cả khi, ví dụ, bản cập nhật thoát khỏi lỗi mạng, bản nâng cấp vẫn sẽ được chạy.

Bạn cũng có thể làm điều này trong một dòng, sử dụng ;dấu : apt-get update ; apt-get upgrade. Một lần nữa, giải pháp này không tối ưu cho các lệnh cụ thể này, nhưng nó có thể có ích trong các tình huống khác.


Một điểm cuối cùng nhanh chóng, bạn cũng có thể ngắt các dòng có chứa &&như sau:

command_1 &&
command_2

Điều này sẽ giống như command_1 && command_2.

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.