O que é um arquivo .sh?

92

Portanto, não tenho experiência em lidar com uma infinidade de tipos de arquivo e não consegui encontrar muitas informações sobre o que exatamente .shsão os arquivos. Aqui está o que estou tentando fazer:

Estou tentando baixar conjuntos de dados de mapas que estão organizados em blocos que podem ser baixados individualmente: http://daymet.ornl.gov/gridded

Para baixar uma série de blocos de uma vez, eles pedem para baixar seu script, que eventualmente leva a daymet-nc-retrieval.sh: https://github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh

Então, o que exatamente devo fazer com este código? O site não fornece instruções adicionais, presumindo que os usuários saibam o que fazer com ele. Suponho que você deve colar o código em algum outro aplicativo não mencionado para um navegador (usando o Chrome ou Firefox, neste caso). Quase parece algo que poderia ser colado no Firefox / Greasemonkey, mas não exatamente. Apenas por uma rápida pesquisa no Google sobre o tipo de arquivo, eu não consegui achar cara ou coroa.

Tenho certeza de que há uma explicação simples sobre o que fazer com esses arquivos, mas parece estar enterrada em muitos posts onde as pessoas já estão presumindo que você sabe o que fazer com esses arquivos. Alguém disposto a simplesmente dizer o que precisa ser feito desde a estaca zero, depois de chegar à página com o código, para realmente implementá-lo? Obrigado.

Tony H
fonte
7
A extensão .sh é para script de shell.
rai.skumar de
3
Você está em um sistema Unix? Porque senão esse script não vai ajudar muito.
melpomene

Respostas:

52

Se você abrir seu segundo link em um navegador, verá o código-fonte:

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

Portanto, é um script bash. Tem Linux?


Em qualquer caso, o script nada mais é do que uma série de recuperações HTTP. Tanto wget quanto curl estão disponíveis para a maioria dos sistemas operacionais e quase todas as linguagens têm bibliotecas HTTP, portanto, é bastante trivial reescrever em qualquer outra tecnologia. Existem também algumas portas do próprio bash para Windows (o git inclui uma). Por último, mas não menos importante, o Windows 10 agora tem suporte nativo para binários Linux .

Álvaro González
fonte
3
Não tenho Linux, estou executando o Windows 7. Isso está disponível apenas para usuários Linux?
Tony H
7
Está disponível para a maioria dos sistemas operacionais (Linux, Unix, MacOS ...), exceto Windows.
Álvaro González
1
Fiz uma pequena pesquisa em scripts bash no Windows e parece que este tópico foi abordado um pouco: stackoverflow.com/questions/6413377/… Vou tentar algumas coisas para ver como funciona.
Tony H
4
Tem Linux? Melhor resposta do dia
:)
122

O que é um arquivo com extensão .sh?

É um script de shell Bourne . Eles são usados ​​em muitas variações de sistemas operacionais semelhantes ao UNIX. Eles não têm "linguagem" e são interpretados pelo seu shell (intérprete de comandos do terminal) ou se a primeira linha estiver na forma

#!/path/to/interpreter

eles usarão esse intérprete específico. Seu arquivo tem a primeira linha:

#!/bin/bash

e isso significa que ele usa Bourne Again Shell, também chamado de bash. Para todos os efeitos práticos, é um substituto do bom e velho sh.

Dependendo do intérprete, você terá um idioma diferente no qual o arquivo foi escrito.

Lembre-se de que no mundo UNIX, não é a extensão do arquivo que determina o que o arquivo é (veja Como executar um script de shell).

Se você vem do mundo do DOS / Windows, deve estar familiarizado com os arquivos com as extensões .bat ou .cmd (arquivos em lote). Eles não são semelhantes em conteúdo, mas são semelhantes em design.

Como executar um script de shell

Ao contrário de alguns sistemas operacionais bobos, * nix não depende exclusivamente de extensões para determinar o que fazer com um arquivo. As permissões também são usadas. Isso significa que se você tentar executar o script de shell após baixá-lo, será o mesmo que tentar "executar" qualquer arquivo de texto. A extensão ".sh" existe apenas para sua conveniência para reconhecer esse arquivo.

Você precisará tornar o arquivo executável. Vamos supor que você tenha baixado seu arquivo como file.sh, pode então executar em seu terminal:

chmod +x file.sh

chmodé um comando para alterar as permissões do arquivo, +xdefinir as permissões de execução (neste caso para todos) e finalmente você tem o nome do arquivo.

Você também pode fazer isso na GUI. Na maioria das vezes você pode clicar com o botão direito do mouse no arquivo e selecionar propriedades, no XUbuntu as opções de permissão são assim:

Permissões de arquivo no XUbuntu

Se você não deseja alterar as permissões. Você também pode forçar o shell a executar o comando. No terminal, você pode executar:

bash file.sh

O shell deve ser o mesmo da primeira linha do seu script.

Quão seguro é isso?

Você pode achar estranho executar outra tarefa manualmente para executar um arquivo. Mas isso se deve parcialmente à grande necessidade de segurança.

Basicamente, quando você baixa e executa um script bash, é a mesma coisa que alguém dizendo "execute todos esses comandos em sequência no seu computador, prometo que os resultados serão bons e seguros". Pergunte a si mesmo se você confia na parte que forneceu este arquivo, pergunte-se se você tem certeza de que baixou o arquivo do mesmo lugar que você pensava, talvez até dê uma olhada dentro para ver se algo parece fora do lugar (embora isso exija que você sabe algo sobre comandos * nix e programação bash).

Infelizmente, além do aviso acima, não posso dar uma descrição passo a passo do que você deve fazer para evitar que coisas ruins aconteçam com seu computador; Portanto, lembre-se de que sempre que você obtém e executa um arquivo executável de alguém, na verdade está dizendo: "Claro, você pode usar meu computador para fazer algo".

v010dya
fonte
10
Esta deve ser a resposta selecionada.
Pacerier
36

shos arquivos são arquivos executáveis ​​do shell do Unix (linux), eles são equivalentes (mas muito mais poderosos) aos batarquivos do Windows.

Então você precisa executá-lo em um console Linux, apenas digitando seu nome da mesma forma que você faz com arquivos bat no Windows.

Nelson
fonte
2
Dependendo do sistema operacional específico, você pode precisar executarchmod +x file.sh
Pranav A.
Eu diria que o bash é mais parecido com VBS para windows, não batch para windows, já que batch era uma linguagem DOS.
Mudança de
4

Normalmente, um arquivo .sh é um script de shell que pode ser executado em um terminal. Especificamente, o script que você mencionou é um script bash, que você pode ver se abrir o arquivo e olhar a primeira linha do arquivo, que é chamada de shebang ou linha mágica.

David Bauer
fonte
1

Eu sei que esta é uma questão antiga e provavelmente não vou ajudar, mas muitas distribuições Linux (por exemplo, ubuntu) têm uma função "Live cd / usb", então se você realmente precisa executar este script, pode tentar inicializar seu computador no Linux. Basta gravar um .iso em uma unidade flash ( veja como http://goo.gl/U1wLYA ), iniciar o computador com a unidade conectada e pressionar a tecla F para o menu de inicialização. Se você escolher "... USB ...", inicializará no sistema operacional que acabou de colocar na unidade.

Sam
fonte
no entanto, o arquivo só será executado na versão ao vivo. o usuário precisaria copiar os arquivos de volta para o sistema operacional principal (Windows).
Pranav A.
-2

abra o local no terminal e digite estes comandos 1. chmod + x nome do arquivo.sh 2. ./ nome do arquivo.sh é isso

PRAKHAR GUPTA
fonte