什么是.sh文件?


90

因此,我在处理大量文件类型方面经验不足,并且我无法找到有关确切文件类型的大量信息.sh。这是我想要做的:

我正在尝试下载以可单独下载的图块形式排列的地图数据集:http//daymet.ornl.gov/gridded

为了立即下载一系列磁贴,他们说要下载脚本,最终导致daymet-nc-retrieval.shhttps : //github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh

那么,我到底应该用这段代码做什么?假设用户知道如何使用该网站,则该网站不再提供进一步的说明。我猜您应该将代码粘贴到其他未提及的浏览器应用程序中(在这种情况下使用Chrome或Firefox)?看起来几乎可以粘贴到Firefox / Greasemonkey中,但并非完全如此。仅仅通过快速的Google搜索文件类型,我还是无法得出正面或反面的结论。

我敢肯定,对于这些文件的处理方式,有一个简单的解释,但是它似乎被埋在大量的帖子中,人们已经在假设您知道如何处理这些文件。任何人只想简单地说一遍代码所在的页面之后再实际实现它,从平方一开始需要做什么?谢谢。


7
.sh扩展名用于Shell脚本。
rai.skumar 2012年

3
您在Unix系统上吗?因为否则该脚本将无济于事。
melpomene

Answers:


49

如果您在浏览器中打开第二个链接,则会看到源代码:

#!/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

所以这是一个bash脚本。有Linux吗?


无论如何,该脚本不过是一系列HTTP检索。wget和curl都可用于大多数操作系统,并且几乎所有语言都具有HTTP库,因此以任何其他技术进行重写都是相当简单的。bash本身也有一些Windows端口(git包括一个)。最后但并非最不重要的一点是,Windows 10现在具有对Linux二进制文件的本地支持


3
我没有Linux,我在Windows 7上运行。这仅适用于Linux用户吗?
Tony H

7
除Windows外,它可用于大多数操作系统(Linux,Unix,MacOS等)。
阿尔瓦罗·冈萨雷斯

1
我在Windows中的bash脚本上做了一些搜索,看起来这个话题已经涵盖了一点:stackoverflow.com/questions/6413377/… 我将尝试一些方法以查看其工作原理。
Tony H

4
有Linux吗?今日最佳答案
亚当·埃里克森

121

什么是扩展名为.sh的文件?

这是一个Bourne shell脚本。它们用于类似UNIX的操作系统的许多变体中。它们没有“语言”,由您的shell(终端命令的解释器)解释,或者如果第一行采用以下形式

#!/path/to/interpreter

他们将使用该特定的解释器。您的文件的第一行:

#!/bin/bash

这意味着它使用了Bourne Again Shell,即所谓的bash。出于所有实际目的,它可以代替旧的sh。

根据口译员的不同,您将使用不同的语言编写文件。

请记住,在UNIX世界中,文件的扩展名不是文件的扩展名(请参阅如何执行Shell脚本)。

如果您来自DOS / Windows,那么您将熟悉具有.bat或.cmd扩展名的文件(批处理文件)。它们在内容上不相似,但在设计上相似。

如何执行shell脚本

与某些愚蠢的操作系统不同,* nix并不完全依赖扩展名来确定如何处理文件。还使用权限。这意味着,如果您尝试在下载后运行Shell脚本,则与尝试“运行”任何文本文件相同。“ .sh”扩展名仅是为了方便您识别该文件。

您将需要使文件可执行。假设您已将文件下载为file.sh,然后可以在终端中运行:

chmod +x file.sh

chmod 是用于更改文件权限的命令, +x设置执行权限(在本例中为每个人),最后您有了文件名。

您也可以在GUI中进行操作。大多数时候,您可以右键单击文件并选择属性,在XUbuntu中,权限选项如下所示:

XUbuntu中的文件权限

如果您不想更改权限。您也可以强制外壳程序运行命令。在终端中,您可以运行:

bash file.sh

该外壳程序应与脚本的第一行相同。

它有多安全?

您可能会觉得很奇怪,必须手动执行另一个任务才能执行文件。但这部分是由于对安全性的强烈需求。

基本上,当您下载并运行bash脚本时,就像有人告诉您“按顺序在计算机上运行所有这些命令,我​​保证结果将是安全的”一样。问问自己是否信任提供此文件的一方,问问自己是否确定已从您认为的相同位置下载了文件,甚至还可以浏览一下内部以查看是否存在异常(尽管这需要您了解* nix命令和bash编程知识)。

不幸的是,除了上述警告之外,我无法逐步介绍如何防止计算机发生恶意事件。因此,请记住,任何时候您实际上都是从一个人那里获得并运行一个可执行文件,说“当然,您可以使用我的计算机来做某事”。


10
这应该是选定的答案。
Pacerier's

36

sh文件是UNIX(Linux)Shell可执行文件,它们等同bat于Windows上的文件(但功能更强大)。

因此,您需要从linux控制台运行它,只需输入其名称即可,就像在Windows上对bat文件一样。


2
根据特定的操作系统,您可能需要运行chmod +x file.sh
PranavA。17年

我会说bash更像是Windows的VBS,而不是Windows的批处理,因为批处理是一种DOS语言。
切换

4

通常,.sh文件是可以在终端中执行的Shell脚本。具体而言,您提到的脚本是bash脚本,您可以查看是否打开了文件并查看了文件的第一行,即shebang或magic行。


1

我知道这是一个老问题,我可能会帮不上忙,但是许多Linux发行版(例如ubuntu)都具有“ Live cd / usb”功能,因此,如果您确实需要运行此脚本,则可以尝试启动计算机进入Linux。只需将.iso刻录到闪存驱动器(这是http://goo.gl/U1wLYA的方式),插入驱动器即可启动计算机,然后按F键启动菜单。如果选择“ ... USB ...”,则将启动到刚放在驱动器上的操作系统。


但是该文件只能在实时版本上运行。用户需要将文件复制回主操作系统(Windows)。
Pranav A.

-2

在终端中打开位置,然后键入以下命令1. chmod + x filename.sh 2. ./filename.sh就是这样

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.