Tệp .sh là gì?


91

Vì vậy, tôi không có kinh nghiệm xử lý nhiều loại tệp và tôi không thể tìm thấy nhiều thông tin về chính xác .shtệp là gì . Đây là những gì tôi đang cố gắng làm:

Tôi đang cố tải xuống các tập dữ liệu bản đồ được sắp xếp trong các ô có thể tải xuống riêng lẻ: http://daymet.ornl.gov/gridded

Để tải xuống một loạt các ô cùng một lúc, họ yêu cầu tải xuống tập lệnh của họ, cuối cùng dẫn đến daymet-nc-retrieval.sh: https://github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh

Vì vậy, chính xác thì tôi phải làm gì với mã này? Trang web không cung cấp thêm hướng dẫn, giả sử người dùng biết phải làm gì với nó. Tôi đoán bạn phải dán mã vào một số ứng dụng chưa được đề cập khác cho trình duyệt (sử dụng Chrome hoặc Firefox trong trường hợp này)? Nó gần giống như một thứ gì đó có thể được dán vào Firefox / Greasemonkey, nhưng không hoàn toàn như vậy. Chỉ bằng một Google nhanh chóng về loại tệp, tôi không thể tìm hiểu rõ về nó.

Tôi chắc rằng có một lời giải thích đơn giản về việc phải làm gì với những tệp này, nhưng nó dường như bị chôn vùi trong rất nhiều bài đăng mà mọi người đã cho rằng bạn biết phải làm gì với những tệp này. Có ai sẵn sàng chỉ đơn giản nói những gì cần phải làm từ ô vuông sau khi truy cập vào trang có mã để thực sự triển khai nó không? Cảm ơn.


7
Phần mở rộng .sh dành cho tập lệnh shell.
rai.skumar 10/12/12

3
Bạn có đang sử dụng hệ thống unix không? Bởi vì nếu không thì script đó sẽ không giúp được gì nhiều.
melpomene 10/12/12

Câu trả lời:


51

Nếu bạn mở liên kết thứ hai trong trình duyệt, bạn sẽ thấy mã nguồn:

#!/bin/bash
# Script to download individual .nc files from the ORNL
# Daymet server at: http://daymet.ornl.gov

[...]

# For ranges use {start..end}
# for individul vaules, use: 1 2 3 4 
for year in {2002..2003}
do
   for tile in {1159..1160}
        do wget --limit-rate=3m http://daymet.ornl.gov/thredds/fileServer/allcf/${year}/${tile}_${year}/vp.nc -O ${tile}_${year}_vp.nc
        # An example using curl instead of wget
    #do curl --limit-rate 3M -o ${tile}_${year}_vp.nc http://daymet.ornl.gov/thredds/fileServer/allcf/${year}/${tile}_${year}/vp.nc
     done
done

Vì vậy, nó là một kịch bản bash. Bạn có Linux?


Trong mọi trường hợp, tập lệnh chỉ là một chuỗi các truy xuất HTTP. Cả wget và curl đều có sẵn cho hầu hết các hệ điều hành và hầu như tất cả các ngôn ngữ đều có thư viện HTTP nên việc viết lại bằng bất kỳ công nghệ nào khác là khá đơn giản. Ngoài ra còn có một số cổng bash của Windows (git bao gồm một). Cuối cùng nhưng không kém phần quan trọng, Windows 10 hiện đã có hỗ trợ riêng cho hệ nhị phân Linux .


3
Tôi không có Linux, tôi đang chạy trên Windows 7. Đây có phải thứ chỉ dành cho người dùng Linux không?
Tony H

7
Nó có sẵn cho hầu hết các hệ điều hành (Linux, Unix, MacOS ...) ngoại trừ Windows.
Álvaro González

1
Tôi đã tìm kiếm một chút về các tập lệnh bash trong windows và có vẻ như chủ đề này đã được đề cập một chút: stackoverflow.com/questions/6413377/… Tôi sẽ thử mọi thứ để xem nó hoạt động như thế nào.
Tony H

4
Bạn có Linux? Câu trả lời hay nhất trong ngày:)
Adam Erickson

121

Tệp có đuôi .sh là gì?

Nó là một tập lệnh shell Bourne . Chúng được sử dụng trong nhiều biến thể của hệ điều hành giống UNIX. Chúng không có "ngôn ngữ" và được thông dịch bởi trình bao của bạn (trình thông dịch các lệnh đầu cuối) hoặc nếu dòng đầu tiên ở dạng

#!/path/to/interpreter

họ sẽ sử dụng trình thông dịch cụ thể đó. Tệp của bạn có dòng đầu tiên:

#!/bin/bash

và điều đó có nghĩa là nó sử dụng Bourne Again Shell, được gọi là bash. Nó là cho tất cả các mục đích thực tế thay thế cho sh cũ tốt.

Tùy thuộc vào thông dịch viên, bạn sẽ có ngôn ngữ khác nhau mà tệp được viết.

Hãy nhớ rằng trong thế giới UNIX, phần mở rộng của tệp không phải là phần mở rộng của tệp xác định tệp đó là gì (xem Cách thực thi tập lệnh shell).

Nếu bạn đến từ thế giới DOS / Windows, bạn sẽ quen thuộc với các tệp có phần mở rộng .bat hoặc .cmd (tệp hàng loạt). Chúng không giống nhau về nội dung, nhưng giống nhau về thiết kế.

Cách thực thi một tập lệnh shell

Không giống như một số hệ điều hành ngớ ngẩn, * nix không chỉ dựa vào các phần mở rộng để xác định những việc cần làm với một tệp. Quyền cũng được sử dụng. Điều này có nghĩa là nếu bạn cố gắng chạy tập lệnh shell sau khi tải xuống, nó sẽ giống như cố gắng "chạy" bất kỳ tệp văn bản nào. Phần mở rộng ".sh" chỉ ở đó để bạn thuận tiện nhận ra tệp đó.

Bạn sẽ cần làm cho tệp thực thi được. Giả sử rằng bạn đã tải xuống tệp của mình file.sh, sau đó bạn có thể chạy trong thiết bị đầu cuối của mình:

chmod +x file.sh

chmodlà lệnh để thay đổi quyền của tệp, +xđặt quyền thực thi (trong trường hợp này là cho mọi người) và cuối cùng bạn có tên tệp của mình.

Bạn cũng có thể làm điều đó trong GUI. Hầu hết thời gian, bạn có thể nhấp chuột phải vào tệp và chọn thuộc tính, trong XUbuntu các tùy chọn quyền sẽ giống như sau:

Quyền đối với tệp trong XUbuntu

Nếu bạn không muốn thay đổi quyền. Bạn cũng có thể buộc trình bao chạy lệnh. Trong thiết bị đầu cuối, bạn có thể chạy:

bash file.sh

Vỏ phải giống như trong dòng đầu tiên của tập lệnh của bạn.

Làm thế nào là an toàn nó?

Bạn có thể thấy lạ khi bạn phải thực hiện một tác vụ khác theo cách thủ công để thực thi một tệp. Nhưng điều này một phần là do nhu cầu bảo mật mạnh mẽ.

Về cơ bản khi bạn tải xuống và chạy một tập lệnh bash, nó cũng giống như việc ai đó nói với bạn "chạy tất cả các lệnh này theo trình tự trên máy tính của bạn, tôi hứa rằng kết quả sẽ tốt và an toàn". Hãy tự hỏi bản thân xem bạn có tin tưởng bên đã cung cấp tệp này hay không, tự hỏi bản thân xem bạn có chắc chắn đã tải tệp xuống từ cùng một nơi như bạn nghĩ hay không, thậm chí có thể nhìn vào bên trong để xem có thứ gì đó không phù hợp hay không (mặc dù điều đó yêu cầu mà bạn biết gì đó về lệnh * nix và lập trình bash).

Rất tiếc, ngoài cảnh báo ở trên, tôi không thể đưa ra mô tả từng bước về những gì bạn nên làm để ngăn chặn những điều xấu xa xảy ra với máy tính của bạn; vì vậy, chỉ cần lưu ý rằng bất cứ khi nào bạn nhận và chạy một tệp thực thi từ một người nào đó mà bạn đang thực sự nói, "Chắc chắn rồi, bạn có thể sử dụng máy tính của tôi để làm gì đó".


10
Đây sẽ là câu trả lời được chọn.
Pacerier

36

shtệp là tệp thực thi shell unix (linux), chúng tương đương (nhưng mạnh hơn nhiều) battệp trên windows.

Vì vậy, bạn cần chạy nó từ bảng điều khiển linux, chỉ cần gõ tên của nó giống như cách bạn làm với tệp bat trên windows.


2
Tùy thuộc vào hệ điều hành cụ thể, bạn có thể cần phải chạychmod +x file.sh
Pranav A.

Tôi có thể nói bash giống như VBS cho windows, không phải batch cho windows vì batch là một ngôn ngữ DOS.
Chuyển

4

Thông thường, tệp .sh là một tập lệnh shell mà bạn có thể thực thi trong một thiết bị đầu cuối. Cụ thể, tập lệnh bạn đã đề cập là tập lệnh bash, bạn có thể thấy nếu bạn mở tệp và nhìn vào dòng đầu tiên của tệp, dòng này được gọi là shebang hoặc dòng ma thuật.


1

Tôi biết đây là một câu hỏi cũ và có lẽ tôi sẽ không giúp, nhưng nhiều bản phân phối Linux (ví dụ: ubuntu) có chức năng "Live cd / usb", vì vậy nếu bạn thực sự cần chạy tập lệnh này, bạn có thể thử khởi động máy tính của mình vào Linux. Chỉ cần ghi tệp .iso vào ổ đĩa flash (đây là cách thực hiện http://goo.gl/U1wLYA ), khởi động máy tính của bạn với ổ đĩa được cắm vào và nhấn phím F cho menu khởi động. Nếu bạn chọn "... USB ...", bạn sẽ khởi động vào hệ điều hành mà bạn vừa đặt trên ổ đĩa.


tuy nhiên tệp sẽ chỉ được chạy trên phiên bản trực tiếp. người dùng sẽ cần sao chép tệp trở lại hệ điều hành chính (Windows).
Pranav A.

-2

mở vị trí trong terminal rồi nhập các lệnh này 1. chmod + x filename.sh 2. ./filename.sh thế là xong

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.