131 votes

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

Je n'ai donc pas l'expérience de la gestion d'une pléthore de types de fichiers, et je n'ai pas pu trouver beaucoup d'informations sur ce qu'il faut faire exactement. .sh Les fichiers sont. Voici ce que j'essaie de faire :

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

Afin de télécharger une série 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, qu'est-ce que je suis censé faire exactement avec ce code ? Le site Web ne fournit pas d'instructions supplémentaires, supposant que les utilisateurs savent ce qu'ils doivent faire avec. 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. En effectuant une recherche rapide sur le type de fichier, je n'ai pas été en mesure d'y voir clair.

Je suis sûr qu'il existe une explication simple sur ce qu'il faut faire avec ces fichiers, mais elle semble être enterrée dans de nombreux messages où les gens supposent déjà que vous savez ce qu'il faut faire avec ces fichiers. Quelqu'un est-il prêt à dire simplement ce qu'il faut faire à partir de la case départ, de l'accès à la page contenant le code jusqu'à sa mise en œuvre ? Merci.

156voto

Volodya Points 382

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

Il s'agit d'un Bourne shell script . 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 de terminal) ou si la première ligne est de la forme

#!/path/to/interpreter

ils utiliseront cet interpréteur particulier. Votre fichier contient la première ligne :

#!/bin/bash

et cela signifie qu'il utilise le Bourne Again Shell, appelé bash. Il s'agit, à toutes fins utiles, d'un remplacement du 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 de DOS/Windows, vous connaissez les fichiers portant l'extension .bat ou .cmd (fichiers batch). Ils ne sont pas similaires en termes de contenu, mais se ressemblent en termes de conception.

Comment exécuter un shell script

Contrairement à certains systèmes d'exploitation peu sûrs, *nix ne se base pas exclusivement sur les extensions pour déterminer ce qu'il faut faire avec un fichier. Les permissions sont également utilisées. Cela signifie que si vous essayez d'exécuter le shell script 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 confort afin de 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 que vous pouvez ensuite exécuter dans votre terminal :

chmod +x file.sh

chmod est une commande permettant de modifier les permissions d'un fichier, +x définit les autorisations 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 faire un clic droit sur le fichier et sélectionner les propriétés, dans XUbuntu les options de permissions ressemblent à ceci :

File permissions in XUbuntu

Si vous ne souhaitez pas modifier les permissions. 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 que c'est sûr ?

Vous pouvez trouver bizarre de devoir effectuer une autre tâche manuellement afin d'exécuter un fichier. Mais cela s'explique en partie par un fort besoin de sécurité.

Fondamentalement, lorsque vous téléchargez et exécutez un script bash script, c'est la même chose que quelqu'un qui vous dit "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 pensiez, peut-être même jetez un coup d'oeil à l'intérieur pour voir si quelque chose ne semble pas à sa place (bien que cela nécessite que vous connaissiez quelque chose aux commandes *nix et à la programmation bash).

Malheureusement, en dehors de l'avertissement ci-dessus, je ne peux pas 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 ; gardez donc à l'esprit que chaque fois que vous recevez 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".

59voto

Álvaro G. Vicario Points 57607

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

Donc c'est un bash script. 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 tous deux disponibles pour la plupart des systèmes d'exploitation et presque tous les langages ont des bibliothèques HTTP, il est donc assez trivial de le réécrire dans toute autre technologie. Il existe également quelques ports Windows de bash lui-même (git en inclut un). Enfin, Windows 10 dispose désormais de support natif pour les binaires Linux .

46voto

Nelson Points 19623

sh sont des fichiers exécutables du shell unix (linux), ils sont l'équivalent (mais beaucoup plus puissant) de bat sous Windows.

Vous devez donc l'exécuter à partir d'une console linux, en tapant simplement son nom, comme vous le faites avec les fichiers bat sous Windows.

5voto

David Bauer Points 389

Typiquement, un fichier .sh est un shell script 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, qui est appelée shebang ou ligne magique.

1voto

Sam Points 11

Je sais que c'est une vieille question et que je ne vais probablement pas aider, 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 pourriez essayer de démarrer votre ordinateur dans Linux. Il suffit de graver un .iso sur un lecteur flash (voici comment faire http://goo.gl/U1wLYA ), démarrez votre ordinateur avec le disque branché, et appuyez sur la touche F pour le menu de démarrage. Si vous choisissez "...USB...", vous démarrerez dans le système d'exploitation que vous venez de placer sur le disque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X