Qu'est-ce qu'un fichier .sh?


91

Je n'ai donc pas d'expérience dans le traitement d'une pléthore de types de fichiers et je n'ai pas pu trouver beaucoup d'informations sur ce que .shsont exactement les fichiers. Voici ce que j'essaye de faire:

J'essaie de télécharger des ensembles de données cartographiques qui sont organisés en tuiles qui peuvent être téléchargées individuellement: http://daymet.ornl.gov/gridded

Afin de télécharger une gamme de tuiles à la fois, ils disent de télécharger leur script, ce qui conduit finalement à daymet-nc-retrieval.sh: https://github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh

Alors, que suis-je censé faire exactement avec ce code? Le site Web ne fournit pas d'autres instructions, en supposant que les utilisateurs sachent quoi en faire. Je suppose que vous êtes censé coller le code dans une autre application non mentionnée pour un navigateur (en utilisant Chrome ou Firefox dans ce cas)? Cela ressemble presque à quelque chose qui pourrait être collé dans Firefox / Greasemonkey, mais pas tout à fait. Juste par un rapide Google sur le type de fichier, je n'ai pas été en mesure de mettre la tête ou la queue dessus.

Je suis sûr qu'il existe une explication simple sur ce qu'il faut faire avec ces fichiers, mais cela semble être enterré dans de nombreux articles où les gens supposent déjà que vous savez quoi faire avec ces fichiers. Quelqu'un est-il prêt à dire simplement ce qui doit être fait à partir de la case départ après être arrivé à la page contenant le code pour l'implémenter? Merci.


7
L'extension .sh est pour le script shell.
rai.skumar

3
Êtes-vous sur un système Unix? Parce que sinon, ce script n'aidera pas beaucoup.
melpomene

Réponses:


51

Si vous ouvrez votre deuxième lien dans un navigateur, vous verrez le code source:

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

C'est donc un script bash. Vous avez Linux?


Dans tous les cas, le script n'est rien d'autre qu'une série de récupérations HTTP. Wget et curl sont disponibles pour la plupart des systèmes d'exploitation et presque tous les langages ont des bibliothèques HTTP, il est donc assez simple de réécrire dans toute autre technologie. Il existe également quelques ports Windows de bash lui-même (git en inclut un). Dernier point mais non le moindre, Windows 10 prend désormais en charge nativement les binaires Linux .


3
Je n'ai pas Linux, j'exécute sous Windows 7. Est-ce quelque chose uniquement disponible pour les utilisateurs Linux?
Tony H

7
Il est disponible sur la plupart des systèmes d'exploitation (Linux, Unix, MacOS ...) sauf Windows.
Álvaro González

1
J'ai fait une petite recherche sur les scripts bash dans Windows et il semble que ce sujet a été un peu couvert: stackoverflow.com/questions/6413377/ ... Je vais essayer des choses pour voir comment cela fonctionne.
Tony H

4
Vous avez Linux? Meilleure réponse du jour
:)

121

Qu'est-ce qu'un fichier avec l'extension .sh?

C'est un script Bourne shell . Ils sont utilisés dans de nombreuses variantes de systèmes d'exploitation de type UNIX. Ils n'ont pas de "langage" et sont interprétés par votre shell (interpréteur de commandes du terminal) ou si la première ligne est au format

#!/path/to/interpreter

ils utiliseront cet interprète particulier. Votre fichier a la première ligne:

#!/bin/bash

et cela signifie qu'il utilise Bourne Again Shell, appelé bash. C'est à toutes fins pratiques un remplacement pour le bon vieux sh.

En fonction de l'interprète, vous aurez une langue différente dans laquelle le fichier est écrit.

Gardez à l'esprit que dans le monde UNIX, ce n'est pas l'extension du fichier qui détermine ce qu'est le fichier (voir Comment exécuter un script shell).

Si vous venez du monde DOS / Windows, vous serez familiarisé avec les fichiers qui ont des extensions .bat ou .cmd (fichiers batch). Leur contenu n'est pas similaire, mais leur conception est similaire.

Comment exécuter un script shell

Contrairement à certains systèmes d'exploitation stupides, * nix ne s'appuie pas exclusivement sur les extensions pour déterminer quoi faire avec un fichier. Les autorisations sont également utilisées. Cela signifie que si vous essayez d'exécuter le script shell après l'avoir téléchargé, ce sera la même chose que d'essayer "d'exécuter" n'importe quel fichier texte. L'extension ".sh" n'est là que pour votre commodité pour reconnaître ce fichier.

Vous devrez rendre le fichier exécutable. Supposons que vous ayez téléchargé votre fichier en tant que file.sh, vous pouvez ensuite l'exécuter dans votre terminal:

chmod +x file.sh

chmodest une commande pour changer les permissions du fichier, +xdéfinit les permissions d'exécution (dans ce cas pour tout le monde) et enfin vous avez votre nom de fichier.

Vous pouvez également le faire dans l'interface graphique. La plupart du temps, vous pouvez cliquer avec le bouton droit sur le fichier et sélectionner les propriétés.Dans XUbuntu, les options d'autorisation ressemblent à ceci:

Autorisations de fichier dans XUbuntu

Si vous ne souhaitez pas modifier les autorisations. Vous pouvez également forcer le shell à exécuter la commande. Dans le terminal, vous pouvez exécuter:

bash file.sh

Le shell doit être le même que dans la première ligne de votre script.

Est-ce sûr?

Vous pouvez trouver étrange que vous deviez effectuer une autre tâche manuellement pour exécuter un fichier. Mais cela est en partie dû à un fort besoin de sécurité.

Fondamentalement, lorsque vous téléchargez et exécutez un script bash, c'est la même chose que quelqu'un vous disant "exécutez toutes ces commandes en séquence sur votre ordinateur, je vous promets que les résultats seront bons et sûrs". Demandez-vous si vous faites confiance à la partie qui a fourni ce fichier, demandez-vous si vous êtes sûr d'avoir téléchargé le fichier du même endroit que vous le pensiez, peut-être même jetez un coup d'œil à l'intérieur pour voir si quelque chose ne semble pas à sa place (bien que cela nécessite que vous savez quelque chose sur les commandes * nix et la programmation bash).

Malheureusement, mis à part l'avertissement ci-dessus, je ne peux pas vous donner une description étape par étape de ce que vous devez faire pour empêcher que des choses maléfiques ne se produisent avec votre ordinateur; alors gardez à l'esprit que chaque fois que vous obtenez et exécutez un fichier exécutable de quelqu'un, vous dites en fait: "Bien sûr, vous pouvez utiliser mon ordinateur pour faire quelque chose".


10
Cela devrait être la réponse choisie.
Pacerier

36

shles fichiers sont des fichiers exécutables shell unix (linux), ils sont l'équivalent (mais beaucoup plus puissant) des batfichiers sous Windows.

Vous devez donc l'exécuter à partir d'une console Linux, en tapant simplement son nom de la même manière que vous le faites avec les fichiers bat sous Windows.


2
Selon le système d'exploitation spécifique, vous devrez peut-être exécuterchmod +x file.sh
Pranav A.

Je dirais que bash ressemble plus à VBS pour Windows, pas à batch pour Windows car batch était un langage DOS.
Changez

4

En général, un fichier .sh est un script shell que vous pouvez exécuter dans un terminal. Plus précisément, le script que vous avez mentionné est un script bash, que vous pouvez voir si vous ouvrez le fichier et regardez dans la première ligne du fichier, appelée shebang ou ligne magique.


1

Je sais que c'est une vieille question et je n'aiderai probablement pas, mais de nombreuses distributions Linux (par exemple, ubuntu) ont une fonction "Live cd / usb", donc si vous avez vraiment besoin d'exécuter ce script, vous pouvez essayer de démarrer votre ordinateur sous Linux. Gravez simplement un .iso sur un lecteur flash (voici comment procéder http://goo.gl/U1wLYA ), démarrez votre ordinateur avec le lecteur branché et appuyez sur la touche F pour accéder au menu de démarrage. Si vous choisissez "... USB ...", vous démarrerez dans le système d'exploitation que vous venez de mettre sur le lecteur.


cependant, le fichier ne serait exécuté que sur la version live. l'utilisateur devra copier les fichiers sur le système d'exploitation principal (Windows).
Pranav A.

-2

ouvrez l'emplacement dans le terminal puis tapez ces commandes 1. chmod + x filename.sh 2. ./filename.sh c'est tout

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.