Che cos'è un file .sh?


92

Quindi non ho esperienza nell'affrontare una pletora di tipi di file e non sono stato in grado di trovare molte informazioni su cosa .shsiano esattamente i file. Ecco cosa sto cercando di fare:

Sto cercando di scaricare i set di dati delle mappe che sono disposti in tessere che possono essere scaricate singolarmente: http://daymet.ornl.gov/gridded

Per scaricare una serie di tessere contemporaneamente, dicono di scaricare il loro script, che alla fine porta a daymet-nc-retrieval.sh: https://github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh

Allora, cosa dovrei fare esattamente con questo codice? Il sito Web non fornisce ulteriori istruzioni, presupponendo che gli utenti sappiano cosa farne. Immagino che dovresti incollare il codice in qualche altra applicazione non menzionata per un browser (usando Chrome o Firefox in questo caso)? Sembra quasi qualcosa che potrebbe essere incollato su Firefox / Greasemonkey, ma non del tutto. Solo da un rapido Google sul tipo di file non sono stato in grado di ottenere testa o croce su di esso.

Sono sicuro che c'è una semplice spiegazione su cosa fare con questi file là fuori, ma sembra essere sepolto in molti post in cui le persone stanno già presumendo che tu sappia cosa fare con questi file. Chiunque sia disposto a dire semplicemente cosa deve essere fatto dall'inizio dopo essere arrivato alla pagina con il codice per implementarlo effettivamente? Grazie.


7
L'estensione .sh è per lo script di shell.
rai.skumar

3
Sei su un sistema unix? Perché altrimenti quella sceneggiatura non aiuterà molto.
melpomene

Risposte:


52

Se apri il tuo secondo collegamento in un browser vedrai il codice sorgente:

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

Quindi è uno script bash. Hai Linux?


In ogni caso, lo script non è altro che una serie di recuperi HTTP. Sia wget che curl sono disponibili per la maggior parte dei sistemi operativi e quasi tutti i linguaggi hanno librerie HTTP, quindi è abbastanza banale riscriverli con qualsiasi altra tecnologia. Ci sono anche alcune porte Windows della stessa bash (git ne include una). Ultimo ma non meno importante, Windows 10 ora ha il supporto nativo per i binari di Linux .


3
Non ho Linux, sto funzionando su Windows 7. È disponibile solo per gli utenti Linux?
Tony H

7
È disponibile per la maggior parte dei sistemi operativi (Linux, Unix, MacOS ...) tranne Windows.
Álvaro González

1
Ho fatto un po 'di ricerca sugli script bash in Windows e sembra che questo argomento sia stato trattato un po': stackoverflow.com/questions/6413377/… Proverò per vedere come funziona.
Tony H

4
Hai Linux? Migliore risposta della giornata
:)

122

Che cos'è un file con estensione .sh?

È un script di Bourne shell . Sono utilizzati in molte varianti di sistemi operativi simili a UNIX. Non hanno "linguaggio" e sono interpretati dalla tua shell (interprete dei comandi del terminale) o se la prima rigaènella forma

#!/path/to/interpreter

useranno quel particolare interprete. Il tuo file ha la prima riga:

#!/bin/bash

e questo significa che utilizza Bourne Again Shell, la cosiddetta bash. È per tutti gli scopi pratici un sostituto per il buon vecchio sh.

A seconda dell'interprete, avrai una lingua diversa in cui è scritto il file.

Tieni presente che nel mondo UNIX non è l'estensione del file a determinare cosa sia il file (vedi Come eseguire uno script di shell).

Se vieni dal mondo DOS / Windows, conoscerai i file con estensione .bat o .cmd (file batch). Non sono simili nel contenuto, ma sono simili nel design.

Come eseguire uno script di shell

A differenza di alcuni stupidi sistemi operativi, * nix non si basa esclusivamente sulle estensioni per determinare cosa fare con un file. Vengono utilizzate anche le autorizzazioni. Ciò significa che se si tenta di eseguire lo script della shell dopo averlo scaricato, sarà come provare a "eseguire" qualsiasi file di testo. L'estensione ".sh" è disponibile solo per tua comodità per riconoscere quel file.

Dovrai rendere il file eseguibile. Supponiamo che tu abbia scaricato il tuo file come file.sh, puoi quindi eseguire nel tuo terminale:

chmod +x file.sh

chmodè un comando per modificare i permessi del file, +ximposta i permessi di esecuzione (in questo caso per tutti) e finalmente hai il nome del tuo file.

Puoi anche farlo nella GUI. La maggior parte delle volte puoi fare clic con il pulsante destro del mouse sul file e selezionare le proprietà, in XUbuntu le opzioni di autorizzazione sono simili a questa:

Autorizzazioni dei file in XUbuntu

Se non desideri modificare le autorizzazioni. Puoi anche forzare la shell a eseguire il comando. Nel terminale puoi eseguire:

bash file.sh

La shell dovrebbe essere la stessa della prima riga del tuo script.

Quanto è sicuro?

Potresti trovare strano che devi eseguire un'altra attività manualmente per eseguire un file. Ma questo è in parte dovuto al forte bisogno di sicurezza.

Fondamentalmente quando scarichi ed esegui uno script bash, è la stessa cosa di qualcuno che ti dice "esegui tutti questi comandi in sequenza sul tuo computer, prometto che i risultati saranno buoni e sicuri". Chiediti se ti fidi della parte che ha fornito questo file, chiediti se sei sicuro di aver scaricato il file dallo stesso posto in cui pensavi, magari dai un'occhiata all'interno per vedere se qualcosa sembra fuori posto (sebbene ciò richieda che sai qualcosa sui comandi * nix e sulla programmazione bash).

Sfortunatamente, a parte l'avvertimento di cui sopra, non posso fornire una descrizione dettagliata di cosa dovresti fare per evitare che accadano cose malvagie con il tuo computer; quindi tieni presente che ogni volta che ottieni ed esegui un file eseguibile da qualcuno in realtà stai dicendo: "Certo, puoi usare il mio computer per fare qualcosa".


10
Questa dovrebbe essere la risposta selezionata.
Pacerier

36

shi file sono file eseguibili di shell unix (linux), sono l'equivalente (ma molto più potente) dei batfile su Windows.

Quindi è necessario eseguirlo da una console Linux, semplicemente digitando il suo nome come si fa con i file bat su Windows.


2
A seconda del sistema operativo specifico, potrebbe essere necessario eseguirechmod +x file.sh
Pranav A.

Direi che bash è più simile a VBS per Windows, non batch per Windows poiché batch era un linguaggio DOS.
Cambia il

4

Tipicamente un file .sh è uno script di shell che puoi eseguire in un terminale. Nello specifico, lo script che hai menzionato è uno script bash, che puoi vedere se apri il file e guardi nella prima riga del file, che si chiama shebang o magic line.


1

So che questa è una vecchia domanda e probabilmente non sarò d'aiuto, ma molte distribuzioni Linux (ad es. Ubuntu) hanno una funzione "Live cd / usb", quindi se hai davvero bisogno di eseguire questo script, potresti provare ad avviare il tuo computer in Linux. Basta masterizzare un .iso su un'unità flash (ecco come http://goo.gl/U1wLYA ), avviare il computer con l'unità collegata e premere il tasto F per il menu di avvio. Se scegli "... USB ...", avvierai il sistema operativo che hai appena inserito nell'unità.


tuttavia il file verrà eseguito solo sulla versione live. l'utente dovrebbe copiare i file indietro nel sistema operativo principale (Windows).
Pranav A.

-2

apri la posizione nel terminale quindi digita questi comandi 1. chmod + x filename.sh 2. ./filename.sh il gioco è fatto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.