¿Cómo creo un archivo de script para comandos de terminal?


114

En Windows puedo escribir un archivo que contiene comandos para cmd (generalmente .cmdo .batarchivos). Cuando hago clic en esos archivos, se abrirá cmd.exey ejecutaré los comandos que contiene el archivo.

¿Cómo haría esto en Ubuntu?

Estoy seguro de que esto es un duplicado, pero no puedo encontrar mi respuesta.
Es similar a estas preguntas, pero no responden la pregunta:

Almacene comandos de terminal usados ​​frecuentemente en un archivo

Emulador CMD.exe en Ubuntu para ejecutar el archivo .cmd / .bat

Respuestas:


150

Hay dos métodos

Primero, lo más común es escribir un archivo, asegúrese de que la primera línea sea

#!/bin/bash

Luego guarda el archivo. Luego márquelo como ejecutable usandochmod +x file

Luego, cuando hace clic (o ejecuta el archivo desde el terminal), se ejecutarán los comandos. Por convención, estos archivos generalmente no tienen extensión, sin embargo, puede hacer que terminen de .shcualquier otra manera.

Algunas notas

  • Cualquier archivo (y quiero decir cualquier) puede ejecutarse en Linux siempre que la primera línea sea una ruta al programa que debería interpretar el archivo. Los ejemplos más comunes incluyen /bin/python, /bin/sh, /bin/dash, pero incluso las cosas funcionan como impares bola/bin/mysql
  • Bash es un idioma completo. Es mucho más complejo que cmd.exe en Windows. Tiene un lenguaje de programación fuerte que admite funciones, bucles, condicionales, operaciones de cadena, etc.
  • Estos documentos pueden ayudar si tiene problemas.
  • Si no desea que el archivo sea ejecutable, puede ejecutarlo pasándolo como argumento a bash: bash file/to/run.sh

Un ejemplo simple de Bash

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

El segundo método es grabar comandos usando script. Corre y scriptluego haz cosas. Cuando termine de hacer cosas, el tipo exity el script generarán un archivo para usted con todas las "cosas" que hizo. Esto se usa menos, pero funciona bastante bien para hacer cosas como macros. man scriptpara más información.


Es posible que desee que el cambio /bin/basha /bin/sh, fiesta ni siquiera es el valor por defecto para Ubuntu.
TC1

@ TC1 Está instalado por defecto, por lo que no importa si es el predeterminado o no.
Carlos Campderrós

1
Me gustaría señalar que /bin/dash(que /bin/shgeneralmente se enlaza simbólicamente), es mucho más rápido que bash (midí aproximadamente 15 veces más rápido). Si es posible, /bin/dash
úselo

44
Si está en la misma carpeta que el archivo, asegúrese de ./file.sh
coteyr

1
Probé ambos métodos, pero si trato de hacer doble clic en el archivo de script bash, simplemente abre el archivo de texto en geany / gedit listo para editar. Me gustaría que el script se ejecute con doble clic. Esta pregunta contiene más detalles sobre lo que quiero hacer.
thymaro

15

¿Te refieres a escribir en un archivo usando un script de shell? Aquí hay algunas maneras:

touch file

Este método simplemente creará un archivo, pero si el archivo ya existe, simplemente cambia la fecha de modificación a la hora en que usó ese comando.

echo "text" > file

Ese método sobrescribe el contenido de fileto text. Si desea borrar un archivo, simplemente puede hacer esto:

echo "" > file

Supongamos que desea escribir más de una línea en él y no desea usar miles de echocomandos, usaría este comando:

cat << EOF > file
test
test1
foo
bar
EOF

Eso le permite escribir varias líneas en un solo comando. El contenido de filesería entonces este:

test
test1
foo
bar

Si desea agregar a un archivo, reemplace >a >>.

¡Espero que esto ayude!


EDITAR : Ah, ya veo, por lo que escribiría el archivo en gedit, usando la .shextensión (opcional, pero es una buena idea), y luego en un administrador de archivos, haga clic derecho en el archivo, seleccione Propiedades-> Permisos y verifique Allow executing file as program. Luego puede hacer doble clic en él y se ejecutará :). Además, si desea hacerlo en la terminal, puede ejecutar este comando para que sea ejecutable (es posible que desee anteponer sudosi no le pertenece):

chmod +x file

Y para correr:

./file

En realidad, lo que quiero hacer es escribir un archivo, digamos gedit, que contenga comandos de terminal. Luego, cuando hago doble clic en este archivo, ejecutará esos comandos en el terminal.
Seth

Gran respuesta, actualización considerada. Para crear simplemente un archivo, siempre lo he usadotouch filename
Try TryAgain

@ Try TryAgain, sí, es un método fácil, probablemente más rápido que echo "" > file. ¿Está bien si incluyo ese método en mi respuesta?
MiJyn

@MiJyn Absolutamente inclúyalo, siéntase libre. Gracias
Try TryAgain

¿Cómo puedo hacer que se ejecute en cualquier parte de la terminal ... como un comando global?
Omer

14

El equivalente a los archivos por lotes de Windows son los scripts de shell, y una excelente guía de inicio es Bash Scripting .

En su mayor parte, los comandos que puede ingresar en la línea de comandos se pueden colocar en un script de shell.

Un par de cosas que son diferentes de los archivos por lotes de Windows:

  • Hay diferentes intérpretes de comandos, llamados shells. El valor predeterminado es bash, pero si está interesado, hay otros, como zsh, ksh, dash, perl, python, etc.

  • Para ejecutar un script de shell, debe hacer que el archivo sea ejecutable, lo que puede hacer con chmod +x <filename>

  • En Ubuntu, el directorio actual no es la ruta de búsqueda del programa, por lo que debe ejecutar ./<filename>, no<filename>

  • Los nombres de las variables son $<varname>, no%<varname>%

  • Los comandos en un script de shell no se imprimen por defecto, como en un archivo por lotes.

  • La extensión del nombre de archivo puede ser .sho (más habitual) no necesita usar una extensión. Coloque #!/bin/bashen la primera línea del archivo , que le dice a Ubuntu qué programa usar para ejecutar el archivo.

  • Los comentarios comienzan con #, no rem.

Espero que esto ayude y diviértete con las secuencias de comandos.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.