¿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:
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.
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):
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?
¿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.
/bin/bash
a/bin/sh
, fiesta ni siquiera es el valor por defecto para Ubuntu./bin/dash
(que/bin/sh
generalmente 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
¿Te refieres a escribir en un archivo usando un script de shell? Aquí hay algunas maneras:
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.
Ese método sobrescribe el contenido de
file
totext
. Si desea borrar un archivo, simplemente puede hacer esto:Supongamos que desea escribir más de una línea en él y no desea usar miles de
echo
comandos, usaría este comando:Eso le permite escribir varias líneas en un solo comando. El contenido de
file
sería entonces este: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
.sh
extensión (opcional, pero es una buena idea), y luego en un administrador de archivos, haga clic derecho en el archivo, seleccione Propiedades-> Permisos y verifiqueAllow 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 anteponersudo
si no le pertenece):Y para correr:
fuente
touch filename
echo "" > file
. ¿Está bien si incluyo ese método en mi respuesta?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
.sh
o (más habitual) no necesita usar una extensión. Coloque#!/bin/bash
en la primera línea del archivo , que le dice a Ubuntu qué programa usar para ejecutar el archivo.Los comentarios comienzan con
#
, norem
.Espero que esto ayude y diviértete con las secuencias de comandos.
fuente