¿Qué es un archivo .sh?

91

Así que no tengo experiencia en tratar con una gran cantidad de tipos de archivos y no he podido encontrar mucha información sobre qué .sharchivos son exactamente . Esto es lo que estoy tratando de hacer:

Estoy intentando descargar conjuntos de datos de mapas que están organizados en mosaicos que se pueden descargar individualmente: http://daymet.ornl.gov/gridded

Para descargar una variedad de mosaicos a la vez, dicen que descarguen su script, que eventualmente conduce a daymet-nc-retrieval.sh: https://github.com/daymet/scripts/blob/master/Bash/daymet-nc-retrieval.sh

Entonces, ¿qué se supone que debo hacer exactamente con este código? El sitio web no proporciona más instrucciones, asumiendo que los usuarios saben qué hacer con él. Supongo que se supone que debes pegar el código en alguna otra aplicación no mencionada para un navegador (usando Chrome o Firefox en este caso). Casi parece algo que se puede pegar en Firefox / Greasemonkey, pero no del todo. Solo con un rápido Google en el tipo de archivo, no he podido obtener ni cara ni cruz.

Estoy seguro de que hay una explicación simple sobre qué hacer con estos archivos, pero parece estar enterrado en muchas publicaciones donde la gente ya está asumiendo que sabe qué hacer con estos archivos. ¿Cualquiera que esté dispuesto a decir simplemente lo que se debe hacer desde el punto de partida después de llegar a la página con el código para implementarlo realmente? Gracias.

Tony H
fuente
7
La extensión .sh es para el script de shell.
rai.skumar
3
¿Estás en un sistema Unix? Porque de lo contrario, ese guión no ayudará mucho.
melpomene

Respuestas:

51

Si abre su segundo enlace en un navegador, verá el código fuente:

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

Entonces es un guión bash. ¿Tienes Linux?


En cualquier caso, el script no es más que una serie de recuperaciones HTTP. Tanto wget como curl están disponibles para la mayoría de los sistemas operativos y casi todos los lenguajes tienen bibliotecas HTTP, por lo que es bastante trivial reescribir en cualquier otra tecnología. También hay algunos puertos de Windows de bash (git incluye uno). Por último, pero no menos importante, Windows 10 ahora tiene soporte nativo para binarios de Linux .

Álvaro González
fuente
3
No tengo Linux, estoy ejecutando Windows 7. ¿Es esto algo solo disponible para usuarios de Linux?
Tony H
7
Está disponible para la mayoría de los sistemas operativos (Linux, Unix, MacOS ...) excepto Windows.
Álvaro González
1
Hice una pequeña búsqueda en scripts de bash en Windows y parece que este tema se ha cubierto un poco: stackoverflow.com/questions/6413377/ ... Probaré cosas para ver cómo funciona.
Tony H
4
¿Tienes Linux? La mejor respuesta del día
:)
121

¿Qué es un archivo con extensión .sh?

Es un script de shell de Bourne . Se utilizan en muchas variaciones de sistemas operativos similares a UNIX. No tienen "lenguaje" y son interpretados por su shell (intérprete de comandos de terminal) o si la primera línea está en el formulario

#!/path/to/interpreter

usarán ese intérprete en particular. Su archivo tiene la primera línea:

#!/bin/bash

y eso significa que usa Bourne Again Shell, llamado bash. Es a todos los efectos prácticos un sustituto del pescado viejo.

Dependiendo del intérprete, tendrá un idioma diferente en el que esté escrito el archivo.

Tenga en cuenta que en el mundo UNIX, no es la extensión del archivo lo que determina cuál es el archivo (consulte Cómo ejecutar un script de shell).

Si viene del mundo de DOS / Windows, estará familiarizado con los archivos que tienen extensiones .bat o .cmd (archivos por lotes). No son similares en contenido, pero son similares en diseño.

Cómo ejecutar un script de shell

A diferencia de algunos sistemas operativos tontos, * nix no se basa exclusivamente en extensiones para determinar qué hacer con un archivo. También se utilizan permisos. Esto significa que si intenta ejecutar el script de shell después de descargarlo, será lo mismo que intentar "ejecutar" cualquier archivo de texto. La extensión ".sh" está ahí solo para su conveniencia para reconocer ese archivo.

Deberá hacer que el archivo sea ejecutable. Supongamos que ha descargado su archivo como file.sh, luego puede ejecutarlo en su terminal:

chmod +x file.sh

chmod es un comando para cambiar los permisos del archivo, +x establece permisos de ejecución (en este caso para todos) y finalmente tienes tu nombre de archivo.

También puede hacerlo en GUI. La mayoría de las veces puede hacer clic derecho en el archivo y seleccionar propiedades, en XUbuntu las opciones de permisos se ven así:

Permisos de archivos en XUbuntu

Si no desea cambiar los permisos. También puede forzar al shell a ejecutar el comando. En la terminal puedes ejecutar:

bash file.sh

El shell debe ser el mismo que en la primera línea de su script.

¿Qué tan seguro es?

Puede resultarle extraño que deba realizar otra tarea manualmente para ejecutar un archivo. Pero esto se debe en parte a la gran necesidad de seguridad.

Básicamente, cuando descargas y ejecutas un script bash, es lo mismo que alguien te dice "ejecuta todos estos comandos en secuencia en tu computadora, te prometo que los resultados serán buenos y seguros". Pregúntese si confía en la parte que le ha proporcionado este archivo, pregúntese si está seguro de haber descargado el archivo desde el mismo lugar en el que pensaba, tal vez incluso eche un vistazo al interior para ver si algo parece fuera de lugar (aunque eso requiere que sabe algo sobre los comandos * nix y la programación bash).

Desafortunadamente, aparte de la advertencia anterior, no puedo dar una descripción paso a paso de lo que debe hacer para evitar que sucedan cosas malas con su computadora; así que tenga en cuenta que cada vez que obtiene y ejecuta un archivo ejecutable de alguien, en realidad está diciendo: "Claro, puede usar mi computadora para hacer algo".

v010dya
fuente
10
Esta debería ser la respuesta seleccionada.
Pacerier
36

sh Los archivos son archivos ejecutables de shell de Unix (Linux), son el equivalente (pero mucho más poderoso) de bat archivos de Windows.

Por lo tanto, debe ejecutarlo desde una consola Linux, simplemente escribiendo su nombre de la misma manera que lo hace con los archivos bat en Windows.

Nelson
fuente
2
Dependiendo del sistema operativo específico, es posible que deba ejecutarchmod +x file.sh
Pranav A.
Yo diría que bash es más como VBS para Windows, no por lotes para Windows, ya que por lotes era un lenguaje DOS.
Cambio
4

Normalmente, un archivo .sh es un script de shell que puede ejecutar en una terminal. Específicamente, el script que mencionaste es un script bash, que puedes ver si abres el archivo y miras en la primera línea del archivo, que se llama shebang o línea mágica.

David Bauer
fuente
1

Sé que esta es una pregunta antigua y probablemente no ayude, pero muchas distribuciones de Linux (por ejemplo, ubuntu) tienen una función "Live cd / usb", así que si realmente necesita ejecutar este script, puede intentar arrancar su computadora en Linux. Simplemente grabe un .iso en una unidad flash (así es como http://goo.gl/U1wLYA ), inicie su computadora con la unidad conectada y presione la tecla F para el menú de inicio. Si elige "... USB ...", iniciará el sistema operativo que acaba de colocar en la unidad.

Sam
fuente
sin embargo, el archivo solo se ejecutará en la versión en vivo. el usuario necesitaría copiar archivos al sistema operativo principal (Windows).
Pranav A.
-2

abre la ubicación en la terminal y luego escribe estos comandos 1. chmod + x filename.sh 2. ./filename.sh eso es todo

PRAKHAR GUPTA
fuente