Cómo escribir y utilizar un archivo de comando por lotes de texto

Cómo escribir y utilizar un archivo de comando por lotes de texto

¿Cómo puedo escribir y utilizar después un archivo de comando por lotes de texto típico?

Estoy hablando de un archivo que tiene los siguientes comandos:

sudo -i
sudo apt-get update
sudo apt-get upgrade
sudo apt-get autoremove
sudo apt-get autoclean
sudo apt-get check
exit

Supongo que puedo escribirlo con Leafpad, pero...

  1. ¿Dónde tengo que guardarlo?

  2. ¿Qué formato? ¿Qué nombre y extensión?

  3. ¿Cómo puedo usarlo, después de eso, en una sesión de LXTerminal, con un solo pedido (idealmente si hubiera una manera de usarlo automáticamente cada vez que se inicia el sistema)?

¡Muchas gracias por su tiempo!

Respuesta1

No existen archivos "por lotes" en el mundo tipo Unix. Usamos scripts que contienen "she-bangs". Para crear un script como este, abra un editor de texto (como Leafpad) y comience con una línea como esta:

#!/path/to/interpreter

¿Dónde /path/to/interpreterestá la ubicación del binario que se utilizará para interpretar su script? En Linux usualmente usamos "bash" (Bourne Again SHell), una "evolución" del viejo Bourne Shell. Lo que hace bash es básicamente ejecutar archivos binarios con argumentos especificados en el script a partir de rutas incluidas en la variable de entorno PATH (generalmente incluye /bin, /sbin, /usr/bin, /usr/sbin y otros).

Pero también puedes utilizar otros intérpretes como Python, Perl, Ruby, sh, csh, zsh, dash, ksh, además de toneladas de opciones.

Debajo del she-bang viene tu guión. En su caso específico, para ejecutar los comandos especificados, podemos usar bash, en un script como este:

#!/bin/bash

# the line above sets bash as the interpreter

# note that "sudo" is not required here because we will run the script as super user later.

apt-get update
# updates APT repositories

apt-get upgrade
# check for software upgrades and upgrade them

apt-get autoremove
# remove obsolete packages

apt-get autoclean
# remove stored .deb files

apt-get check
# update package cache and check for broken dependencies

Ahora guarde su archivo. No es necesaria una extensión, pero por razones simbólicas, asígnele el nombre con una extensión .sh. Ejecutaremos el script como superusuario, por lo que no es necesario cambiar los permisos del archivo.

Abra una terminal y acceda a la ruta donde guardó su script. Digamos que lo guardó como script.sh. Ejecute el siguiente comando:

chmod +x script.sh

chmodsignifica "modo de cambio" y se utiliza para cambiar quién puede hacer qué con su secuencia de comandos. +xagrega el permiso de ejecución para todos los usuarios, lo que permite que cualquiera ejecute el script como si fuera cualquier otro programa. No entraré en una lista completa de lo que significan los diferentes permisos, peroesta preguntalos resume bastante bien. Después de eso, puedes escribir:

sudo ./script.sh

No olvides la parte ./ y no dejes espacios entre ., / y s. El sudocomando se ejecutará ./script.shcon privilegios de root, por lo que se requerirá su contraseña (debe ser el administrador del sistema, por supuesto).

Respuesta2

Lo que en el mundo de Windows se llama archivo "por lotes", se llama "script" en el mundo *NIX. En su mayor parte, los scripts son un archivo con múltiples comandos o comandos organizados de maneras específicas. Aquí hay un par de cosas que debes saber:

Estructura basica

Normalmente verá algo como esto:

#!/bin/sh
# Comments 
printf "Hello world"

La primera línea especifica un intérprete (comúnmente denominado shebanglínea), la segunda es un comentario (lo que sigue #no se interpreta, solo texto sin formato), la tercera es el comando real.

En la terminal puedes llamar a un archivo sin la línea shebang. Eso hará que el script sea leído e interpretado por su shell actual (también conocido como intérprete de comandos). Por ejemplo, estoy ejecutando mkshshell. Especifico que #!/bin/shserá ejecutado por el shell predeterminado de Ubuntu: dash. Cada shell tiene algunos detalles sobre su sintaxis de comandos, por lo que debes adaptar tu script en consecuencia.

Escribir guion

Esto debe hacerse en un editor de texto, pero también puedes escribirlo en LibreOffice Writer y luego guardarlo en texto sin formato. Personalmente, sólo uso editores de texto de línea de comandos ( nanoen su mayor parte o vim); La analogía aquí sería editen las versiones de Windows anteriores a Windows 7.

Los nombres y extensiones de los archivos no importan en los sistemas *NIX, ya que el sistema lee los primeros bytes del archivo para determinar su tipo. Me acostumbré a agregar .shextensiones, pero en realidad, es innecesario.

Hacer que el script sea ejecutable

Eso se hace usando chmod 755 scriptName.shel comando. Significa read-write-executepermisos para el propietario (usted) read-executepara los usuarios que están en el grupo del propietario (por ejemplo, el propietario del archivo podría ser admin, por lo que si pertenece al admingrupo, puede leer y ejecutar el archivo), y read-executepara cualquier otra persona. ¡Nunca des permisos de escritura a otros! Si tiene privilegios de superusuario, eso podría resultar en algún mal juju (es decir, podría ser pirateado y un usuario malintencionado cambiará sus scripts para conservar su información personal).

Ejecución de scripts

Siempre puedes ejecutar un script navegando hasta la ubicación del script en la terminal y escribiendo ./scriptName.

Para ejecutar cualquier comando en cualquier lugar, incluidos los scripts, deben almacenarse en algún lugar del sistema incluido en la $PATHvariable. Esto es lo que quiero decir:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/xieerqi/bin

$PATHLa variable me dice que si un script o un archivo binario ejecutable se encuentra en /usr/local/sbino /usr/local/binen cualquier otro de esos directorios, puedo ejecutar ese comando simplemente escribiéndolo en la terminal.

Ahora, para sus propios scripts, debe crear binuna carpeta y almacenar los scripts allí. Si está utilizando bashsu .profilearchivo de configuración contiene las siguientes líneas:

# set PATH so it includes user's private bin if it exists
#if [ -d "$HOME/bin" ] ; then
#    PATH="$HOME/bin:$PATH"
#fi

Si descomentas (eliminas #) delante de las últimas tres líneas (de ifa fi), tu bincarpeta personal se incluirá en la $PATHvariable.

información relacionada