El término "secuencias de comandos de shell" se menciona a menudo en los foros de Linux, pero muchos usuarios no están familiarizados con él. Aprender este sencillo y poderoso método de programación puede ayudarlo a ahorrar tiempo, aprender mejor la línea de comando y desterrar las tediosas tareas de administración de archivos.
Ser usuario de Linux significa jugar con el comando- línea. 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, si bien son útiles, son una imitación barata de los scripts de shell.
Los scripts del shell nos permiten programar comandos en cadenas y hacer que el sistema los ejecute como un evento guionado, 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. Las secuencias de comandos le permiten usar funciones de programación, como bucles 'for', declaraciones if / then / else, etc., directamente dentro de 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.
Creo que ese es realmente el poder de los scripts. 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? ¡Escríbelo!
Antes de comenzar nuestra serie de scripting, cubramos algo de 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, mientras existan todos los comandos a los que se hace referencia, las secuencias de comandos pueden funcionar en múltiples plataformas con poco o ningún ajuste requerido.
Las secuencias de comandos pueden hacer uso de los privilegios de "administrador" o "superusuario", por lo que es mejor prueba 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, solo en caso de que las cosas vayan 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é.
Los scripts 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 esta secuencia de comandos, debería hacer un cd en el directorio apropiado y luego ejecutar la secuencia de comandos 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 crear eso. Esto es generalmente donde se almacenan los archivos ejecutables que pertenecen a su usuario y no a otros usuarios. Al colocar scripts aquí, puede simplemente ejecutarlos escribiendo su nombre, al igual que otros comandos, en lugar de tener que hacer cd y usar el prefijo './'.
Sin embargo, antes de nombrar un script, debe hacer lo siguiente comando para verificar si tiene un programa instalado que usa ese nombre:
que [comando]
Mucha gente llama a sus primeros scripts "prueba" y cuando intentan ejecutarlo en la línea de comandos, nada sucede. Esto se debe a que entra en conflicto con el comando de prueba, que no hace nada sin argumentos. Asegúrate siempre de que los nombres de tus scripts no entren en conflicto con los comandos, de lo contrario te encontrarás haciendo cosas que no intentas hacer.
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.
El Hack Hash-Bang
Cuando un shell analiza un archivo de texto, la forma más directa de identificar el archivo como un script es haciendo su primera línea:
# ! / bin / bash
Si usa otro shell, sustituya su ruta aquí. Las líneas de comentario comienzan con hashes (#), pero agregar bang (!) Y la ruta de shell después de que es una especie de hack que omitirá 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. Las sentencias If / 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.
Comentar 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 días anteriores, las sustituciones de comandos se realizaban con marcas de selección 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 debe 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.
Comencemos con un script simple que le permita copiar archivos y anexar fechas al final del nombre del archivo. Vamos a llamarlo "datecp". Primero, vamos a ver si ese nombre entra en conflicto con algo:
Puedes ver que no hay salida de ese comando, así que estamos listos para usar este nombre.
Vamos a crear un archivo en blanco en el ~ / bin carpeta:
toque ~ / bin / datecp
Y, cambiemos el permiso ahora, antes de que nos 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, vamos a poner la primera línea de requisitos previos y un comentario sobre lo que hace este script.
Siguiente, vamos a declarar 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 date.
Eche un vistazo a la captura de pantalla siguiente sobre cómo construir el resultado del comando date:
Puede ver eso agregando diferentes variables que comienzan con%, puedes cambiar la salida del comando a lo que quieras. 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 utilízalo 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 lo 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 proporcionan en lugar del nombre de la variable, "date_formatted".
Aquí hay un script de ejemplo y su salida:
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", el script no daría ningún resultado.
Volvamos a nuestro script. A continuación, agreguemos la parte de copia del comando.
cp -iv $ 1 $ 2. $ fecha_formatado
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 este último mostrará lo que está pasando 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 qué hace esto?
Esto es lo que sucede cuando se ejecuta el script:
Puede ver que el archivo de salida aparece como lo que ingresé por $ 2, seguido de un punto, 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.
¿Guionas? ¿Tienes algún consejo para los novatos? ¡Comparte tu opinión en los comentarios! ¡Hay más por venir en esta serie!
Cómo imprimir una hoja de trabajo con comentarios en Excel
Agregó comentarios a su hoja de cálculo y ahora desea imprimirla, con esos comentarios intactos. Sin embargo, Excel no imprime comentarios por defecto. Aquí hay dos maneras de hacerlo. Antes de imprimir comentarios en una hoja de trabajo, debe asegurarse de que los comentarios no se oculten con estas instrucciones.
5 servicios gratuitos de OCR en línea probados y revisados
¿Tiene un documento PDF o una imagen que le gustaría convertir a texto? Recientemente, alguien me envió un documento por correo que necesitaba editar y enviar con correcciones. La persona no pudo encontrar una copia digital, por lo que me encargaron de poner todo ese texto en formato digital.No había forma de que me pasara horas escribiendo todo, así que terminé sacando una buena foto de alta calidad del documento y luego me quemé un montón de servicios de OCR en línea para ver cuál me daría lo mejor resultados.En este ar