23Aug

La guía para principiantes de las secuencias de comandos de Shell: conceptos básicos

click fraud protection

El término "shell scripting" se menciona a menudo en los foros de Linux, pero muchos usuarios no están familiarizados con él. Aprender este método de programación fácil y poderoso puede ayudarlo a ahorrar tiempo, aprender mejor la línea de comando y desterrar tareas tediosas de administración de archivos.

¿Qué es Shell Scripting?

Ser usuario de Linux significa que juegas con la línea de comandos. Nos guste o no, hay algunas cosas que se hacen mucho más fácilmente a través de esta interfaz que apuntando y haciendo clic. Cuanto más utilice y aprenda la línea de comandos, más verá su potencial. Bueno, la línea de comandos en sí es un programa: el caparazón. La mayoría de las distribuciones de Linux hoy usan Bash, y esto es en lo que realmente está ingresando los comandos.

Ahora, algunos de ustedes que usaron Windows antes de usar Linux pueden recordar los archivos por lotes. Estos eran pequeños archivos de texto que podría llenar con comandos para ejecutar y Windows los ejecutaría sucesivamente. Era una forma inteligente y ordenada de hacer algunas cosas, como ejecutar juegos en el laboratorio de computación de tu escuela secundaria cuando no podías abrir carpetas del sistema o crear accesos directos. Los archivos por lotes en Windows, aunque útiles, son una imitación barata de scripts de shell.

instagram viewer

Los scripts de Shell nos permiten programar comandos en cadenas y hacer que el sistema los ejecute como un evento con guiones, al igual que los archivos por lotes. También permiten funciones mucho más útiles, como la sustitución de comandos. Puede invocar un comando, como la fecha, y usar su salida como parte de un esquema de nombres de archivo. Puede automatizar copias de seguridad y cada archivo copiado puede tener la fecha actual adjunta al final de su nombre. Los scripts no son solo invocaciones de comandos, tampoco. Son programas en sí mismos. La creación de secuencias de comandos le permite usar funciones de programación, como bucles "for", declaraciones /then/ else, etc., directamente en la interfaz de su sistema operativo. Y no tienes que aprender otro idioma porque estás usando lo que ya sabes: la línea de comandos.

Ese es realmente el poder de las secuencias de comandos, creo. Puedes programar con comandos que ya conoces, mientras aprendes las grapas de la mayoría de los principales lenguajes de programación.¿Necesitas hacer algo repetitivo y tedioso? Guión!¿Necesita un atajo para un comando realmente intrincado? Guión!¿Quieres construir una interfaz de línea de comandos realmente fácil de usar para algo? Guión!

Antes de comenzar

Antes de comenzar nuestra serie de scripts, cubramos información básica. Usaremos el shell bash, que la mayoría de las distribuciones de Linux usan de forma nativa. Bash está disponible para usuarios de Mac OS y Cygwin para Windows. Dado que es tan universal, debería poder realizar un script independientemente de su plataforma. Además, siempre que todos los comandos a los que se hace referencia existan, los scripts pueden funcionar en múltiples plataformas con poco o ningún ajuste requerido.

Scripting puede usar fácilmente los privilegios de "administrador" o "superusuario", por lo que es mejor probar los scripts antes de ponerlos a trabajar. También use el sentido común, como asegurarse de tener copias de seguridad de los archivos en los que está a punto de ejecutar un script. También es muy importante usar las opciones correctas, como -i para el comando rm, para que se requiera su interacción. Esto puede evitar algunos errores desagradables. Como tal, lee los scripts que descargas y ten cuidado con los datos que tienes, en caso de que las cosas salgan mal.

En esencia, los scripts son solo archivos de texto sin formato. Puede usar cualquier editor de texto para escribirlos: gedit, emacs, vim, nano. .. Esta lista continúa. Solo asegúrese de guardarlo como texto sin formato, no como texto enriquecido o como documento de Word. Como me encanta la facilidad de uso que proporciona nano, lo usaré.

Permisos de script y nombres Los scripts de

se ejecutan como programas, y para que esto suceda deben tener los permisos adecuados. Puede hacer que las secuencias de comandos sean ejecutables ejecutando el siguiente comando:

chmod + x ~ /somecrazyfolder/ script1

Esto permitirá que cualquiera ejecute esa secuencia de comandos en particular. Si desea restringir su uso solo a su usuario, puede usar esto en su lugar:

chmod u + x ~ /somecrazyfolder/ script1

Para ejecutar este script, debe ingresar al directorio apropiado y luego ejecutar el script de esta manera:

cd ~ / somecrazyfolder

. /script1

Para hacer las cosas más convenientes, puede colocar scripts en una carpeta "bin" en su directorio principal:

~ / bin

En muchas distribuciones modernas, esta carpeta ya no se crea de forma predeterminada, pero puede crearla. Esto es generalmente donde se almacenan los archivos ejecutables que pertenecen a su usuario y no a otros usuarios. Al colocar los scripts aquí, puede ejecutarlos escribiendo su nombre, al igual que otros comandos, en lugar de tener que usar el prefijo './'.

Sin embargo, antes de nombrar una secuencia de comandos, debe usar el siguiente comando para verificar si tiene instalado un programa que use ese nombre:

que [comando]

Mucha gente llama "prueba" a sus primeros scripts y cuando intentanejecutarlo en la línea de comandos, no pasa nada. Esto se debe a que entra en conflicto con el comando de prueba, que no hace nada sin argumentos. Siempre asegúrese de que los nombres de su secuencia de comandos no entren en conflicto con los comandos, de lo contrario, puede encontrarse haciendo cosas que no tiene la intención de hacer.

Scripting Guidelines

Como mencioné antes, cada archivo de script es esencialmente texto plano. Sin embargo, eso no significa que puedas escribir lo que quieras de todos modos. Cuando se intenta ejecutar un archivo de texto, las shells las analizarán en busca de pistas sobre si son scripts o no, y cómo manejarlo todo correctamente. Debido a esto, hay algunas pautas que necesita saber.

  1. Cada script debería estar con "#!/bin/ bash "
  2. Cada línea nueva es un nuevo comando
  3. Las líneas de comentario comienzan con un #
  4. Los comandos están rodeados por()

El Hash-Bang Hack

Cuando un shell analiza un archivo de texto, la forma más directa de identificarlo esun script es haciendo su primera línea:

#!/bin/ bash

Si usa otro shell, sustituya su ruta aquí.Las líneas de comentario comienzan con hash( #), pero agregar bang( !) Y la ruta de shell después de que es una especie de hack que saltará esta regla de comentario y obligará al script a ejecutarse con el shell al que apunta esta línea.

Nueva línea = Nuevo comando

Cada nueva línea debe considerarse un nuevo comando o un componente de un sistema más grande. Si las declaraciones de /then/ else, por ejemplo, tomarán múltiples líneas, pero cada componente de ese sistema está en una nueva línea. No permita que un comando se desborde en la próxima línea, ya que puede truncar el comando anterior y le puede dar un error en la siguiente línea. Si su editor de texto está haciendo eso, debe desactivar el ajuste de texto para estar seguro. Puede desactivar el ajuste de texto en nano bit presionando ALT + L.

Comente a menudo con #s

Si comienza una línea con un #, la línea se ignorará.Esto lo convierte en una línea de comentarios, donde puede recordar cuál fue la salida del comando anterior o qué hará el próximo comando. Nuevamente, apague el ajuste del texto o divídalo en varias líneas que comienzan con un hash. Usar muchos comentarios es una buena práctica para mantener, ya que le permite a usted y a otras personas ajustar sus guiones más fácilmente. La única excepción es el hack Hash-Bang antes mencionado, así que no sigas #s con! S.;-) Los comandos

están rodeados por paréntesis

En los días anteriores, las sustituciones de comandos se realizaban con marcas simples( `, comparte la tecla ~).No vamos a hablar de esto todavía, pero como la mayoría de la gente se va y explora después de aprender lo básico, probablemente sea una buena idea mencionar que debería usar paréntesis en su lugar. Esto se debe principalmente a que cuando anida, coloca comandos dentro de otros comandos, los paréntesis funcionan mejor.

Su primer script

Comencemos con un script simple que le permite copiar archivos y anexar fechas al final del nombre del archivo. Vamos a llamarlo "datecp".Primero, verifiquemos si ese nombre entra en conflicto con algo:

Puede ver que no hay salida de ese comando, así que estamos listos para usar este nombre.

Creemos un archivo en blanco en la carpeta ~ / bin:

touch ~ /bin/ datecp

Y, cambiemos el permiso ahora, antes de que olvidemos:

Comencemos a construir nuestro script entonces. Abre ese archivo en tu editor de texto de tu elección. Como dije, me gusta la simplicidad de nano.

nano ~ /bin/ datecp

Y, sigamos y coloquemos la primera línea de requisitos previos, y un comentario sobre lo que hace este script.

A continuación, declaremos una variable. Si alguna vez tomó álgebra, probablemente sepa qué es eso. Una variable nos permite almacenar información y hacer cosas con ella. Las variables pueden "expandirse" cuando se hace referencia en otro lugar. Es decir, en lugar de mostrar su nombre, mostrarán sus contenidos almacenados. Posteriormente puede indicarle a esa misma variable que almacene información diferente, y cualquier instrucción que ocurra después utilizará la nueva información. Es un marcador de posición realmente elegante.

¿Qué pondremos en variable? Bueno, ¡almacenemos la fecha y la hora! Para hacer esto, llamaremos al comando de fecha.

Eche un vistazo a la siguiente captura de pantalla para saber cómo crear el resultado del comando de fecha:

. Puede ver que al agregar diferentes variables que comienzan con%, puede cambiar el resultado del comando a lo que desee. Para obtener más información, puede consultar la página de manual del comando de fecha.

Usemos la última iteración del comando de fecha, "fecha +% m_% d_% y-% H.% M.% S", y usémoslo en nuestro script.

Si tuviéramos que guardar este script en este momento, podríamos ejecutarlo y nos daría el resultado del comando de fecha como esperaríamos:

Pero, hagamos algo diferente. Vamos a dar un nombre de variable, como date_formatted a este comando. La sintaxis adecuada para esto es la siguiente:

variable = $( comando -opciones argumentos)

Y para nosotros, lo construiríamos así:

date_formatted = $( date +% m_% d_% y-% H.%M.% S)

Esto es lo que llamamos sustitución de comando. Básicamente le estamos diciendo a bash que cada vez que aparezca la variable "date_formatted", ejecute el comando entre paréntesis. Luego, se debe mostrar el resultado que los comandos dan en lugar del nombre de la variable, "date_formatted".

Aquí hay un script de ejemplo y su resultado:

Tenga en cuenta que hay dos espacios en la salida. El espacio dentro de las comillas del comando echo y el espacio delante de la variable se muestran. No use espacios si no desea que aparezcan. También tenga en cuenta que sin esta línea agregada de "eco", la secuencia de comandos no daría ningún resultado.

Volvamos a nuestro script. A continuación, agreguemos la parte de copia del comando.

cp -iv $ 1 $ 2. $ date_formatted

Esto invocará el comando de copia, con las opciones -i y -v. El primero le pedirá la verificación antes de sobrescribir un archivo, y el último mostrará lo que está abajo en la línea de comandos.

A continuación, puede ver que agregué la opción "$ 1".Cuando se crean scripts, un signo de dólar( $) seguido de un número indicará el argumento numerado del script cuando se invocó.Por ejemplo, en el siguiente comando:

cp -iv Trogdor2.mp3 ringtone.mp3

El primer argumento es "Trogdor2.mp3" y el segundo argumento es "ringtone.mp3".

Mirando hacia atrás en nuestro script, podemos ver que estamos haciendo referencia a dos argumentos:

Esto significa que cuando ejecutamos el script, tendremos que proporcionar dos argumentos para que el script se ejecute correctamente. El primer argumento, $ 1, es el archivo que se copiará, y se sustituye como el primer argumento del comando "cp -iv".

El segundo argumento, $ 2, actuará como el archivo de salida para el mismo comando. Pero, también puedes ver que es diferente. Hemos agregado un período y hemos hecho referencia a la variable "date_formatted" desde arriba.¿Curioso en cuanto a lo que esto hace?

Esto es lo que sucede cuando se ejecuta la secuencia de comandos:

Puede ver que el archivo de salida se muestra como lo que ingresé por $ 2, seguido de un punto y luego el resultado del comando de fecha. Tiene sentido, ¿verdad?

Ahora cuando ejecuto el comando datecp, ejecutará este script y me permitirá copiar cualquier archivo a una nueva ubicación, y agregará automáticamente la fecha y la hora al final del nombre del archivo.¡Útil para archivar cosas!

La creación de scripts en Shell es fundamental para que su sistema operativo funcione para usted. No es necesario que aprenda un nuevo lenguaje de programación para hacerlo realidad. Intenta escribir guiones con algunos comandos básicos en casa y comienza a pensar en para qué puedes usar esto.

¿Eres un script?¿Tienes algún consejo para los novatos?¡Comparte tu opinión en los comentarios!¡Hay más por venir en esta serie!