Programación Bash
language: ES
WEBVTT A ver, mira, lo voy a dejar de compartir y vuelve a compartir ya. Ok. A ver, ya lo volví a compartir. Ok. ¿Sí? Ok. Pero ¿sí puedo entrar aquí en Internet? Sí, abre tu navegador acá. Sí tienes tu navegador. Ok. Más potencia, ¿verdad? Sí, más potencia símbolo y ahí te va a aparecer. ¿Te aparece? A ver. ¿Te aparece otra cosa? A ver. A ver, voy a abrir tu máquina que es como lo has puesto. Creo que lo he puesto. Más potencia. Ajá. Ahí está, ¿ves? Sí, sí. Control Shift V también puedes, te funciona. Te debería funcionar, Control Shift V. Bueno, ya está. Ahora es más dólar, después son más S, es más dólar. Después del 0 a 9. Después del 0 a 9. Has puesto más S y es más dólar. Ah, más dólar sí. Sí, sí. Ahí está. Ahí. ¿Y ya? Sí, creo que ya. Sí, yo creo que ya. Es que no hay ninguna... Sí, ahí, pruébalo, pruébalo. Sí, aquí, voy a pasar y aquí tengo que estar. Mmm, ¿qué que hay ya? A ver. A ver, X, perfecto. ¿Y aquí? Muy bien, ahí está, perfecto. Ya, ahora presiona una R. Ah, listo, ya funciona. Ajá. ¿No? Ya funciona. Sí, ya. Muy bien. Ya quedó. Sí, sí, ya quedó, ya quedó. Seguimos entonces, seguimos. Entonces, ya también con este ejercicio hemos aprendido a ver las comparaciones con patrones, ¿no? Ajá. ¿Ya? Bien. A ver, ¿con cuál otro nos vamos ahora? Ya, una, una con condicional. Este... Verifica si un año es viciesto. Ok. ¿Sabes cuándo un año es viciesto, no? Ehh... Cuando... ¿Qué se llama? Cada cuatro años. Exacto. No es. Pasa doscientos años, no es. Pasa trescientos años, no es. Pasa cuatrocientos años, sí es. Pasa quinientos años, no es. ¿Ya? Sí, me dejó entender, ¿verdad? Sí. Ya. Entonces, ahí tenemos las condiciones. Ponemos entonces, read menos p introduce un año. Y lo vamos a leer la variable año. ¿Ya? Entonces acá empezamos. Nuestra primera condición ahora. Sí. Dólar. Y lo primero que tenemos que hacer es ver si es que es divisible entre cuatro o no. ¿Cierto? Entonces, si el resto de esta división es igual a cero, vamos bien. ¿Vamos? O sea, va a ser, puede ser viciesto. ¿Sí? Ahora tenemos que ver las otras condiciones. ¿Sí? Tenemos que ver que no sea divisible entre cien. ¿Verdad? Entonces, no tiene que ser divisible entre cien. Y porque no sea divisible entre cien, le ponemos not equal. Cero. Cero. O, o acuérdate que lo es, que se cumple el uno o el otro. Ajá. Significaría como, a no ser que, lo podemos leer así, de que el año sea divisible de cuatrocientos. Termina este fi. Este, acá. Si es que no cumple esa condición, tampoco es viciesto, ¿no? Bueno, ajá. Y termina. Esto debería funcionar. Entonces, ya estamos poniendo todas las condiciones. Si es divisible entre cuatro, entonces posiblemente es viciesto. ¿Qué nos falta determinar? De que no sea divisible entre cien, pero sí divisible entre cuatrocientos. Para que sea viciesto. ¿Sí? Lo vamos a probar. A ver. Bash. No dejé espacios, ¿no? Bueno. El año cien. Uh, error en la línea nueve. Me faltó acá. No, esto, hay un doble. Sí, acá hay un doble, gracias. Y acá le vamos a poner el espacio. Bien, ahora sí. El año cien. No es viciesto. De hecho, no puede ser viciesto. O sea, ahora te dijimos que cada cien años no puede ser viciesto. ¿Verdad? Este, pero el año cuatrocientos debería ser viciesto. ¿Sí? Estamos bien. El año dos mil veinticuatro. Ah, qué gracioso soy. Dos mil veinticuatro. Es viciesto. Porque es múltiplo de cuatro. No es divisible entre cien. Entonces sí funciona, ¿verdad? Sí, sí. ¿Sí? Ya. Pruebalo, por favor, tú. Pruebalo. Entonces acá era el uso del hecho de no es igual y el uso de la o. ¿Todo? Perfecto. Ya. Bien, Laura, ¿salimos para almorzar? Sí. Ya, perfecto. Nos vemos entonces en una hora, ¿sí? Muy bien. Ya, listo. Gracias. Gracias. Listo. ¿Continuamos? Sí. Perfecto. Un segundo, voy a compartir la pantalla. Confirma si veis la ventana. Sí. Mostrándolo como una celda, como celdas. ¿Ya? Vamos a ver cómo hacemos eso. ¿Estamos? Para después. Bien. Eso es en la carpeta bucles. Touch. Tabla. Multiplica. Punto SH. Y empezamos a trabajar. Ya. A ver. Vamos a poner nuestro bin bash. Hecho. Vamos a publicar tabla de multiplicar. Y vamos a hacer un read. Minus P. Ingresa un número. Para calcular su tabla de multiplicar. Y lo vamos a llamar. Número. ¿Aca? Sí. Perdona. Tengo una duda en la parte de echo. ¿Lo que va a seguir la tabla de que vamos a publicar? Ya lo arreglé. Ah, sí. Gracias. Gracias. Gracias. Listo. Entonces, como es una tabla de multiplicar, se supone que vamos a hacer dos bucles. Por y Ing. Y acá vamos a poner. Uno. Te pregunto. ¿Será correcto poner esto? Tú me lo vas a decir. ¿No? Tú me vas a decir si eso es correcto o no es correcto. Sí, porque estamos... Bueno, se va a estar ingresando lo que es el número. Y ahora sí que el por va a estar incrementando. Bueno, no sé si se va a incrementar. Del uno hasta el número que nosotros... A ver. Que vayamos a... A ver, pruébalo si funciona. Pruébalo si funciona eso. Me avisas cómo te va. Sí. No. ¿No, verdad? Me sale el cinturito. Y vamos a ver por qué. Por ejemplo, yo puedo hacer esto. Del uno al diez. Este, puedo poner hecho, dólar y... ¿Qué pasó? Ah, me olvidé del... Del do. Do, hecho, dólar y, da. Y me va del uno al diez. Pasa de que esto de acá, lamentablemente, solo admite números literales y no variables. ¿Estamos? Ese es un problema. Entonces nosotros tenemos otra opción. Y es utilizando el comando sec. De secuencia, sucesión. ¿Eh? Ah, ¿qué pasó? Ah, ¿qué pasó, qué pasó? Ah, ¿qué hice? ¿Por qué no está publicando solo diez? Ah, sí, sí. Sí, sí. Ahora sí. Ahora sí. ¿No? Entonces, yo puedo utilizar el comando sec. Que también me va a dar ya una lista. Pero que este sí, este casi me va a permitir trabajar con variables. A diferencia de este otro que solamente admite números literales. ¿Estamos? Entonces, para hacerlo dinámico, no puedo utilizar esto. Ya, por eso quería hacer este ejercicio. Bueno, por dos cosas quiero hacer este ejercicio. Entonces acá voy a utilizar sec1. Y acá ya puedo utilizar $num. ¿Estamos? Acá ya puedo utilizar el $num. Ahora sí. Ese sí no debe fallar. A ver, vamos a probarlo. Ya, vamos a probarlo. Por ejemplo, 34 y me va a dar uno 34. ¿Estamos? 12, me va a dar uno 12. Entonces, sí, ese sí funciona. ¿Ya? Pruebalo por favor que te esté funcionando. ¿Sí? Sí, perfecto. Listo, entonces vamos ahora. Ya que tenemos eso y tenemos que hacer una tala de multiplicar, necesito tener otro for. ¿Sí? Este, y que también recorra del 1 hasta $num. ¿Ya? Listo. Y acá, y acá, este, vamos a imprimir, pero no voy a utilizar el echo. Voy a utilizar el comando printf. ¿Estamos? En ese comando printf, le voy a decir de que me deje cuatro espacios. O en todo caso, perdón, que utilice cuatro espacios en total. ¿Ya? Y le vamos a poner acá y por j. ¿Sí? Entonces, como el resultado que fuese, acá siempre va a poner cuatro espacios. Siempre. ¿Estamos? Ajá. Bien, entonces, a ver, vamos a analizar qué estaría haciendo acá. Va a entrar, va a entrar, va a imprimir una fila. ¿Sí? Se sale. Si no hago un salto de línea acá, todo lo va a poner en una sola línea. ¿Cierto? Entonces, yo quiero que cuando termine el primer recorrido de I, me ponga un espacio. Es suficiente que ponga echo. Con echo solito me va a poner un espacio. Si manda error, ya le mandamos un texto en blanco. O un texto vacío. No debería mandar algo. Entonces, vamos a ver. Esta tabla de multiplicar. ¿Sí la has copiado para poderlo probar? ¿O te espero todavía? Ya. Ya, vamos a probarlo entonces ahora. Tabla de multiplicar, vamos a poner la famosa tabla del 12. Y ya nos está poniendo con cuatro espacios. ¿Sí? Uno, dos, tres, cuatro espacios. Todos tienen cuatro espacios. Ya, para que aparezca en forma correcta. ¿Sí? Tabla de multiplicar, le pongo, por ejemplo, 10. Y me tiene que dar del uno al 10. Ya está, funciona. ¿Ya? Entonces, lo interesante de este ejercicio. Haber aprendido a hacer una sucesión de números con sec. Para poderlas poner en forma dinámica dentro de un bucle for. Utilizar el printf para poderle dar espacios fijos al texto que quiero publicar. Esas dos cosas han sido interesantes en este ejercicio. ¿Ya? Sí. Listo. Vamos a ver si hacemos... Ya. ¿Tú crees que podrías hacer la número 4? O la voy yo. ¿Cuál es, perdón? La 4, generador de contraseñas. Yo la voy, ¿ya? ¿Sí? Ok. Tú dime, o yo la hago. Tú la haces o yo la hago. O intentas un rato o yo la hago de frente. No hay problema, tú dime. ¿Puedo intentar? Ya, inténtalo. ¿Ya? Si en cinco minutos te das cuenta que te has trabado, me dices yo lo hago. No hay problema. Ok. Bueno, tiene que ser alfamérico. Como tú gustes. Aunque, pero si es alfamérico tendríamos que poner letras también, ¿no? Tú dime, lo hago, si no yo lo hago. No hay problema. Bueno, está ahí mi intención de elaborar el random, pero ya no sé cómo poner la parte del... Ya. ...que ya con caracteres entonces. Ya, no te preocupes. Mira, yo lo voy a hacer. Yo lo hago, yo lo hago, yo lo hago, ¿ya? De paso que vamos a aprender también nuevos comandos y nuevas formas de trabajar. ¿Está bien? Yo lo voy a hacer de dos formas. Una forma, que es una sola línea, pero que no tiene mucho, digamos, idea de escribir, pero que lo pongo por si lo necesitas en algún momento. Y la otra que sí es utilizando Google, random y todo lo demás, ¿ya? Que es más interesante. Entonces vamos a poner touch 02 creando contrasegna. ¿Ya? Nano 02. ¿Estamos? Bim Bash. Bien, ya. Quiero... Déjame probar algo antes de... de hacerlo. Ajá. Bien, ya. Déjame seguir probando un segundito. Si a esto... le mando... este R... de C... a Z... de la A a la Z, de la A... en la múscula de la Z mayúscula... Z y 9. Ya está. Y... esto... le mando... C, de ejemplo 5. Le mando... 10. Sí. Ya. Mira, este... esto de acá me genera una contrasegna aleatoria. Con la cantidad de dígitos. Claro que no es lo que nosotros esperamos en el script, porque yo lo tengo que hacer como un script, pero lo que te quería mostrar es de que podemos nosotros... crear contraseñas con comandos y con redirecciones pipas. Ya. Te voy a explicar primero qué cosa es el Urandom que se encuentra en D. Ya. El Urandom en realidad es un archivo especial que tienen los UNIX, en este caso Linux, y que te van a dar siempre valores aleatorios. ¿Estamos? Se va a generar datos aleatorios. Entonces acá y ya te lo están dando. Es que cuando dices cuenta que me da un montón de cosas aleatorias... Sí. Mira, si yo lo ejecuto... Me da todo aleatorio. Pero ahí está en la A, la B, todo está, todo, todo. ¿Estamos? Bien. Entonces, esto ya sabes para qué sirve. Me da datos aleatorios. Ahora, acá lo estoy, con el G, lo estoy obteniendo, esos valores. Y se los estoy basando al TR. ¿Te acuerdas qué era el TR? ¡Eeeeh! ¡Ay, qué bueno! Convierte, ¿no? Claro, se transforma, ¿no? Convierte. Sí. Ajá. El TR significa de que va... Bueno, vamos a empezar a transformar. El DC, ¿te acuerdas qué es el DC? ¿Qué es el D? ¡Eeeeh! Ay, ahorita no, perdón. Que elimine caracteres, ¿ya? D significa que elimine todos los caracteres. Y C, que lo invierta. Es decir, que inicialmente va a eliminar todos estos caracteres. Después los va a invertir y me va a dejar solo estos caracteres. ¿Vamos? Y luego, nuevamente, este resultado lo paso como tipa. Y me va a empezar a devolver los valores. ¿Ya? 15. Por eso de que me está devolviendo. ¿Ya? Entonces, este comando, este comando puedes anotarlo. Te sirve para generar passwords. Laves aleatorias. ¿Ya? Es lo primero que te quería mostrar. Existe esa forma para hacerlo. ¿Sí? Lo voy a copiar. ¿Ya? Para probarlo dentro de un script y después hacemos el verdadero script. ¿Ya? ¡Todo! Listo. No, no debemos usar vingamilla. Siento raro usando nano. Es que no lo uso. Realmente no lo uso nano. Vamos a probar con este. ¿Sí? Le vamos a decir read-p. Introduce la longitud de la contraseña y la vamos a llamar longitud. ¿Sí? Ahora. Si quiero utilizar este comando, la única diferencia sería que tendríamos que este, ponerla en una variable. Password igual un dólar para que se ejecute y el 15 viene a ser una variable. DólarLongitud. Y después acá publicaríamos este password. ¿Sí? No me olvidas de nada, ¿no? Voy a probarlo. Voy a probarlo. Contigo. Debe funcionar y si no, bueno, y de hecho después lo probamos el otro, lo que tenemos que hacer. Bash. Introduce la longitud que hay que alterar, es 15. Ahí está. 12. 24. Y ahí ya me está generando mi password aleatorio. ¿Verdad? Entonces, sí funciona, pero no es lo que deseamos. ¿Verdad? Funciona, pero no es lo que deseamos. No queremos resolverlo de esa forma. Bien. Entonces, en líneas generales vamos a a ver cómo lo realizamos eso. La contraseña. Y para eso nosotros le damos en una variable este, qué tipos de datos debe tener la contraseña. En líneas generales. O sea, los caracteres, números, mayúsculas, minúsculas. Exacto. Todos esos los ponemos acá. ¿Sí? Los números. Y si quieres algún otro carácter especial para que sea más más complicado. No sé. Ya lo que queramos le podemos seguir agregando. ¿Está? O sea, pues se tiene que poner todo en la vezera. En realidad todo lo que tú quieras como carácter. Eso en realidad se hace en cualquier lenguaje de programación cuando tú generas claves aleatorios. Tú determinas qué tipo de caracteres van a ser utilizados para esa clave. ¿Ya? Ahora, quiero mostrarte algo. Mira. Quiero mostrarte algo. ¿Qué crees que me devuelve esto? Lo probemos. Lo probamos. ¿Estamos? Para que lo veas. No te preocupes. Lo probamos. Me está devolviendo 67. Y siempre me devuelve 67. ¿Por qué? Porque es la cantidad de caracteres que tiene este de acá. Me está devolviendo la longitud de caracteres de este. Es lo que hemos puesto por número al adelante. ¿Ya? Listo. Ahora, la idea es que nosotros vamos a tener que recorrer todos estos caracteres. Y estos caracteres van a empezar en la posición cero. No te olvides de eso. ¿Ya? Va a empezar en la posición cero. Entonces, esto lo comento porque solamente fue para mostrarlo. No nos sirve para nada. Vamos a definir nuestra variable password inicialmente como nada. ¿Ya? Y vamos a hacer nuestro GoogleFor. Y igual 1. Y menor igual. Acá debe ser dólar longitud. Tengo una duda. Esto lo vamos a revisar. De repente va sin el dólar. Porque estamos dentro de esto. No, no va con el dólar. Estamos dentro de las dos llaves. No va con el dólar. Longitud. Y más más. Mira, esta es una forma también de hacer el recorrido. ¿Cuál era la otra forma de hacer el recorrido? ¿Te acuerdas? Or, y, in, sec. ¿Te acuerdas o no? Sec 1. Ah, sí, el que vimos hace rata. Longitud. Así era, ¿no? La que vimos ese momento. ¿Sí? Sí, solamente... Ah, no, ya lo vi. Era para preguntar sobre dónde lo habíamos puesto. Pero ya vi que la longitud es lo que se nos pareció. Pero quiero probarla de esta otra forma. Si no me sale con esta forma, pues ya cambiamos a la que sabemos que sí funciona. Sino que quiero intentar hacer... Variar, ¿no? Para ver múltiples opciones. Bien. A ver, lo que yo necesito es poder encontrar un índice de acá. Ese tiene que ir en la posición 0 hasta la longitud menos 1. ¿Estamos? Así. Entonces voy a definir acá... Índice. Y eso quiero que sea de forma aleatoria, ¿o no? Sí, eso quiero que sea de forma aleatoria. Entonces acá es donde viene el random. ¿Estamos? ¿Hasta qué número quiero que vaya? Hasta la longitud menos 1. ¿Sí? Entonces acá nosotros le vamos a poner... Numeral... Ya vimos de qué... El numeral hace que nos devuele la longitud. Como es menos 1 y se supone que se le suma 1, pues ya no hago nada, ¿no? No entiendo ya. Ya no... Está mal, esto es así. Pues ya no hago nada. Con eso ya tengo mi número de 0 al 66, que es lo que yo espero. Y si cambio el valor de arriba no hay ningún problema porque esto está en forma dinámica. ¿Ya? Entonces, ¿qué vamos a hacer a password? Password... Va a ser... Lo que era password, que inicialmente es vacío. ¿Ya? Y le vamos a concatenar... Este... El carácter en la posición que hemos obtenido en forma aleatoria. ¿Estamos? Entonces, ¿cómo hacemos eso? Decimos caracteres... ¿Estamos? Pues si le pongo solo caracteres me va a dar todo y eso no quiero. Entonces ya le voy a decir... Quiero que... Quiero que... Te ubiques en la posición índice, que es la que he obtenido aleatoriamente. ¿Ya? Y que tomes solo una posición. ¿Entendió? A ver otra vez porque... Ya... Te lo quiero explicar, mira. Caracteres por sí solo me va a devolver todo esto. Yo no quiero que me devuelva todo esto. Yo lo que quiero es decirle... Decirle, ¿sabes qué? Te vas a ubicar en esta posición y me vas a tomar un elemento. Esta posición es un elemento al azar de esta de acá. Y me va a tomar uno. Y me va a tomar uno. Si le pongo la posición uno, toma solo esa posición. Si le hubiera puesto dos, hubiera tomado dos posiciones. ¿Ya? Ah, ok. Ya. Entonces este bucle va a recorrer, recorrer, recorrer, recorrer... Hasta que llegue a ser longitud, que es lo que nosotros hemos puesto como máximo. ¿No? Sí. Sí, entonces vamos a ver. Techo. La contraseña generada es... Y le vamos a poner el... Pascuoto. ¿Sí? Tal vez no lo copies porque como te dije quiero ver si esta forma me está funcionando o no. Debería funcionar, pero no. Pero tengo todavía mi pequeña duda. Mi pequeña duda, pero sí debería funcionar. ¿Ya? Este... Vamos con bash. Longitud 14. Listo. Sí funciona. ¿Sí? Está funcionando perfectamente. Entonces sí, también de esta forma nosotros podemos hacer un recorrido, un bucle, ¿no? Y puedes probarlo ahora, este, Laura. Ok. Si tienes alguna pregunta, por favor me dices. No, por el momento creo que ha sido muy claro. Ya, perfecto, gracias. Sí. ¿Funcionó? Sí, sí funcionó. Ya, perfecto. Perfecto. Vamos con otra. Nos queda una hora, ¿no? Sí, sí. Vámonos al nivel avanzado. Vamos a hacer un sistema de tareas. Quiero un simple sistema de tareas que permita agregar, eliminar y marcar como completadas las tareas. ¿Ya? Yo lo voy a hacer este, no te preocupes. Tú haces el otro ejercicio que te voy a decir. ¿Ya? Entonces vamos a hacer un sistema de tareas. Acá, este, no debe haber mucho problema acá. Vamos a ver si estamos en Google, ¿no? Vamos a poner en touch. Sistema, estamos poniendo algún número sí. SistemaTareas.sh Bien, va. Ya. A ver, ¿qué nos está pidiendo el ejercicio? Déjame volverlo, creo que lo cerré. Lo cerré. ¿Lo tienes a la mano? ¿Lo que pedía? Es el de sistema de tareas, perdón. Sí, sí, creo que ya lo tengo. Sí, crea un simple sistema de tareas que permita agregar, eliminar y marcar como completadas las tareas. Agregar, eliminar, ¿qué más? Marcar. Y marcar. Y marcar. Como completadas las tareas. Ajá. Ya está. Bien. Vamos entonces a trabajar el medio. ¿Ya? Ajá. Acá lo importante es que vamos a tener que trabajar con un array. ¿Estamos? Ese array se va a encargar de almacenar nuestras tareas. O sea, no voy a trabajar obviamente con base de datos ni nábor, no es el caso de la tarea. Entonces, vamos a definir tareas igual. Y con esto le estoy diciendo que es un array vacío. ¿Estamos? Esto es un array vacío. Que la usaremos... ...a almacenar las tareas. ¿Ya? Bien. No voy a usar funciones. Vamos a hacer diferente. Acá vamos a poner nuestro menú. Hecho. Uno. Agregar. Tarea. Entonces, si te percatas, la idea es que yo voy a agregar elementos al array. Ya. Ese array le voy a mandar, lo voy a poder eliminar porque tiene una posición. Y le voy a poner a esa tarea, ese nombre de tarea le voy a agregar adicionalmente una palabra de pendiente o completado. ¿No hacemos la idea, verdad? Entonces, dos. La segunda era eliminar tarea, ¿no? Eliminar. Eliminar tarea. La tres. Marcar como completada. Marcar tarea como completada. Cuatro. Bueno, tenemos que mostrar las tareas, ¿no? Claro, si no, ¿cómo vamos a hacer? ¿Qué vamos a eliminar, pues? Sí. ¿Sí? Necesitamos ver las tareas para ver cuál eliminamos. Cinco. Salir. Ya está. ¿Ya? Cinco salir. Listo. Ese es mi menú. Ese es mi menú. Y nosotros ya sabemos de que para los menús es mucho más fácil trabajar con case, ¿no? Sí, pero necesitamos pedirle una opción. Entonces le vamos a poner read menos p. Seleccione una opción. Listo. Case. Lo terminamos. Case, doble la opción. Y ya. Caso uno. Y caso uno es agregar una tarea. Entonces le vamos a decir read menos p. Ingrese la tarea. Ya, la vamos a leer en la variable tarea. Ya. Y nosotros tenemos nuestras tareas, que es una variable global, que es una raíz. Y para agregar un elemento a la raíz le ponemos más igual. Y le ponemos el texto que queremos agregar. Ya. En este caso le vamos a agregar tarea. Sí, pero adicionalmente le voy a poner que está en un estado de pendiente. ¿Se entiende esa parte? Entonces, ya. Pues nada más, vamos a hacer de... ¿Cómo decirlo? Vamos a agregar como tarea de matemáticas o algo así. Claro. Y aquí se estaría, bueno, aquí se estaría, vamos a agregar un elemento que es la tarea de matemáticas. Tarea de matemáticas o algo así. Claro. Y aquí se estaría, bueno, en este caso se va a estar imprimiendo o almacenando, la verdad no sé muy bien cómo se hace ahorita, pero tendría que indicar adelante de matemáticas pendientes. Exacto. Y se está agregando a tareas, y acuérdate que tareas es una raíz vacío que tenemos. Entonces acá está agregando esa raíz. En la posición 0, en la posición 1, lo estamos agregando. Ya lo que nosotros hemos escrito acá. Sí. Bien. Vámonos con otra. La otra es eliminar, ¿no? Entonces vamos a poner... Ingrese el número de tarea a eliminar. Y lo ponemos en la variable num. ¿Sí? ¿Y cómo lo sacamos? Este... Ese valor. Ya. Ese valor se saca con unset. Vamos. Unset. Eso lo ponemos en tareas. Cochete num menos 1. ¿Por qué num menos 1? Porque parte en cero, ¿no? De esta. Se estaría eliminando, ¿no? Sí. Se estaría restando. Exacto. Se estaría sacando un unset. Lo elimina. ¿Ya? Bien. Ahora. Pero aquí, bueno, me está surgiendo la duda. Por ejemplo, ¿no? Vamos a agregar la tarea así como te comentaba, ¿no? Matemáticas. Ajá. Y en la parte de eliminar, entonces nosotros... ¿Por qué estás agregando como la parte de número? Entonces ahí nosotros estaríamos... Matemáticas. Poniendo o ingresando este número nada más un valor numérico. No. Y así se estarían como eliminando las tareas. A ver, te explico. ¿Cómo? Te explico. Lo explico acá. Mira. Nosotros tenemos un array. ¿Sí? Ajá. El array se llama tareas. Ajá. Entonces, como es un array, este tarea tiene posiciones. Posición cero. Posición uno. ¿Estamos? Estamos hablando de posición. Posición. Dos, tres. Pero en la posición cero, por ejemplo, puede tener el texto matemáticas. Y con la parte que le hemos agregado nosotros pendiente. Pendiente. Ajá. ¿Sí? Luego el otro puede tener este otro texto similar. Por ejemplo, no sé, estructura de datos. El otro puede tener este base de datos. El otro puede tener algoritmia. Entonces, el contenido en la posición cero es esta. El contenido en la posición uno es esta. ¿Verdad? Es lo que nosotros estamos haciendo. Cuando nosotros hacemos acá, le ponemos el más igual. Lo que está haciendo es, no tienes ninguno. Ok. El más igual, le vamos a crear la posición cero. Y en la posición cero le voy a poner tu tarea más el pendiente. Vuelvo a agregar otra. Le vamos a crear ahora el uno y le voy a poner estructura de datos pendiente. ¿Estamos? Y así sucesivamente. Cuando yo utilizo el anset y le digo anset tareas uno, por ejemplo, posición cuatro, estoy diciendo posición dos, estoy diciendo, ubícate en la posición dos y esta hazle un anset. Sácala. Ok. Ya. ¿Sí? Sí. Perfecto. Bien. Sigamos entonces. Sigamos. La tres es mostrar tarea como completada. ¿No? Tres. Tres. Mostrar tarea como completada. Que en realidad lo que vamos a tener que hacer es cambiar la palabra pendiente por completada, ¿o no? Sí, es lo que vamos a tener que hacer. Entonces vamos a poner un read. Mire ese, el número que realiza posición, ¿no? A marcar como completada. Y también va a ser nuestro número. ¿Ya? Y acá entonces le vamos a poner tareas, un menos uno, igual. Y acá lo que tenemos que hacer es hacer el cambio en esa posición. ¿Estamos? Tenemos que hacer el cambio en esa posición. Entonces vamos a utilizar. Hola. Tareas. En la posición número uno. Y le voy a decir. Dame un segundo, voy a callar ese perrito ya, por favor. Sí. Entonces lo que tenemos que hacer como te decía era reemplazarlo, ¿sí? ¿Te acuerdas de que nosotros habíamos visto cómo reemplazarlo utilizando el dólar llaves, ¿no? Cuando vimos la diferencia de usar llaves y no usar llaves en una variante. Entonces de esta forma utilizo el backlash porque esto es un corchete, ¿ya? Para que lo identifique como corchete. Un carácter de escape. ¿Ya? Es por eso que acá también utilizo el backlash para que lo identifique los corchetes. ¿Sí? Y lo mismo acá. Podría reemplazarlo pendiente por completado, pero quiero que te des cuenta que estoy utilizando esa variable de escape, ¿ya? Ese carácter de escape. Completado. Completado. ¿Ya? Entonces nuevamente para que me reconozca el corchete uso la variable de escape backlash. Por eso es que todos antes del corchete tienen el backlash. ¿Ya? Bien. Entonces con esto se supone que estamos cambiando el estado a la tarea por completado. ¿Sí? La cuatro es listar las tareas. Vamos a listar las tareas. ¿Ya? Vamos a listarlas. Entonces vamos a poner techo. Tareas. Vamos a poner un techo. Y acá vamos a hacer un for, ¿ya? For y in. ¿Tú sabes cuántos elementos tenemos? No. Entonces lo que nosotros necesitamos es hacer todo un recorrido para que lo liste. Ahora lo voy a poner y quiero que tú intentes interpretar lo que estoy poniendo. ¿Ya? ¿Puedes interpretarlo? Acá está mala la variable. Acá está mala la variable. Acá le falta esto. Ya está. ¿A quién se dice que hasta qué? Sino que tengamos en el i o en el valor en i. Ya. Esto lo pongo fácil. ¿Cómo se diferencia? Esto te devuelve los índices. ¿Estamos? Eso te devuelve los índices. Es por eso que si te devuelve los índices vamos a empezar a poderlos literar. ¿Sí? Entonces el diferente aquí, bueno, el signo de admiración. No, es que acá no es, acuérdate que esto no es una condicional. Todo esto te devuelve todos los índices de la red loterías. Todo eso. Si tú no le pones estos, lo que te va a devolver simplemente es la cantidad. Y tú quieres que te devuelva todos los elementos. Ya. Ya. Si no tendríamos que hacer otro tipo de booklet. Acuérdate que eso trabaja con una lista. Entonces esto te está dando la lista de los elementos. ¿Está bien? Sí. Perfecto. Luego la opción 5, ¿qué cosa es? Está bien creo, ¿no? Sí, está bien. Opción 5 es abrir. Por lo tanto, salir para nosotros es un salir del bucle, que es un break. Y cualquier otra cosa que no sea del 1 al 5 es una opción inválida, ¿verdad? Y nada más ahí termina el case y termina el DOM. ¿Sí? El y. Igual. ¿Lo pruebo o lo terminas de quitar para probarlo? Si quieres, entonces probarlo. Lo vamos a probar mejor, ¿ya? Vamos a probarlo. De repente no funciona y quedamos mal. Uy, está diciendo en línea 44. ¿Qué tiene malo? No leo nada malo en la línea 44. Nos estamos olvidando de cerrar unas llaves, creo. Creo que nos estamos olvidando de cerrar unas llaves porque los colores no están... No están siendo... Mira, acá esas tareas no están igual que el color de acá arriba. Pero... ¿Qué luce más? Quiero ver algo acá. Pues no es eso porque sigue como... Sin cambiar los colores, ¿no? Uh-huh. A ver. Tan tan tan tan tan tan tan. Luce tarea, tarea pendiente. Ah, a ver cuál es el error. Ya lo vi. Ya lo vi. ¿Te percatas del error, no? No. ¿No? Faltaba acá la llave. Ya está. Esa es la que faltaba. Así estaba, ¿verdad? Sí. Faltaba. Pero mira... No, es que como yo lo que hago es cuando abro llaves, la cierro de una vez y a veces creo que no lo veía. Claro. A ver, mira. Sí. Te quiero mostrarte en nano algo. Mira, en nano... ¿Te manda algún error de color? No, ¿verdad? No. Ya. Y en PI... Si, tiene un marker. Uh-huh. Es un signo. Sí. No, y PI tiene 50.000 millones de ventajas sobre nano. O sea, te lo digo. Está muy, muy superior a todo. Listo, ahora vamos a ver si funciona, ¿ya? Llegó el momento de... Dice agregar tareas. Vamos a ponerle... Hacer cinco ejercicios de matemática. ¿Qué pasó? Ah, que tengo que poner uno, ¿no? Uh-huh. Pero, mira, estoy poniendo uno. Selecciono una opción. No me está funcionando. Uh-huh. Uno. Ingresa la tarea. Ah, nos nos estaría faltando poner un eco para... Indicar que se debe de ingres... Ah, no, mira. No, ahí está. El que nos está deteniendo, lo estoy poniendo. Y no está entrando a la... Ah, qué gracioso que soy. Jejeje. Estaba mandándole el read y nunca le había mandado la opción. La variable. ¿Verdad? Es gracioso, ¿eh? Sí, sí. Ahora sí, uno. Ingresa la tarea. Realizar cinco ejercicios de... Bash. ¿Sí? Vamos a ver. Cuatro, me debería mostrar... Uno, realizar cinco ejercicios de Bash en estado pendiente. Voy a agregar otra. Ingresa la tarea. A ver, este... No, ya no realizar. Ir al curso de posores. ¿Sí? Cuatro. ¿Sí? Entonces la opción uno, la opción cuatro está funcionando. ¿Sí? ¿Sí? Ahora, vamos a marcar como completada. ¿Sí? Ya sabemos que tenemos uno y dos. Marcar tareas como completadas es la opción tres. Ingresa el número de tareas a marcar como completada. Voy a poner que hemos ido al curso de posores. La posición dos. ¿Sí? Y voy a volver a mostrar las tareas. Cuatro. Ir al curso de posores, completada. Realizar cinco ejercicios de Bash pendiente. Ahora, ya no voy a hacer el ejercicio uno, la voy a eliminar. Entonces, vamos a la segunda, que es eliminar tarea. Dos, voy a eliminar la tarea uno. Y voy a mostrar cuatro. Ir al curso de posores. Ten en cuenta de que ya no hay la posición uno. Es posición dos. Es por eso que estamos utilizando la lista de posiciones de nuestro array. Y listo. Cinco, salir y funciona. Perfectamente. Listo. Puedes verlo ahora. Hazlo y pruébalo. Ok. Nada más puedo ver el final. Ah, sí claro. Sí, sí funciona. Perfecto. Perfecto. Bien. Vamos a hacer ahora un menú que simule la creación de un backup, que me liste los backups, que envíe a un servidor remoto. Así se me escucha. Puse mute. ¿Cuántas veces me ha pasado? ¿Tres, cuatro? Bueno, ya. Te decía, vamos a simular. Vamos a crear un menú donde vamos a simular crear un backup de una base de datos. O de archivos, no sé. Vamos a listar todos los backups que hemos generado. Vamos a enviar el backup a un servidor remoto, en este caso a otra computadora. Y vamos a simular la restauración de un backup y vamos a salir. ¿Ya? Ok. Ya. Yo te voy a enseñar un comando de cómo copiar de un servidor a otro servidor. ¿Estamos? Y tú vas a intentar hacer esto, con unas botas que te voy a dar. ¿Ya? ¿Cómo qué? Voy a entrar a mi máquina. Un segundo, por favor. Porque tendríamos que tener, estar en la misma red. Ya. Listo. Ya. Primero voy a ver. ¿Lo verás las letras? Sí, se ven un poquito chiquitas. Ya, lo cambié, lo cambié. Espérame. Y acá cómo se cambia en stem. Creo en new profile. Es new profile. Apariencia. Cambiamos de color. Acá están. Qué feo de interfaces que han puesto. ¿No? No veo bien. Ya. Creo que ahí estaría. Sí, ahí estaría. Ya. A ver. Tú también necesito que hagas. IP espacio A. Tengo que estar... ¿En dónde? Porque ahorita estoy todavía en la parte de scripts. No, donde tú gustes. Ese es un comando que nos va a determinar la IP de nuestra máquina. Vas a cualquier lado. Ah, ok. IP espacio A. Ya, busca una línea. La tercera línea de la segunda parte. Ya. En mi caso la IP es 10.0.3.15. La tuya debe ser 10.0.3. y algo. A ti sí igual 10.0.3.15. No puede ser. Porque yo estoy en tu máquina. No quiero estar en tu máquina. No. No puede ser. 10.0.3.15. Es que no puede ser. Entonces estamos en redes distintas y no vamos a poder simular la copia de una máquina a otra. Rayos. Bueno, usaré mis computadoras. Espérame. Lo voy a hacer en el mío para que sepas cómo funciona un copiador remoto. Dame un segundo. Ya, ya tengo dos computadoras. Una que es la máquina virtual que es con la que trabajo y la otra que es mi máquina normal. Ya. Esta tiene como IP 192.168.80. ¿Verdad? Y la mía que es la que está con este otro color. Tiene la 85. Son distintos. ¿Está bien? Ya. Aunque mis dos usuarios se llaman Christian. Ya. Si te das cuenta, ese usuario Christian y mi computadora se llama Christian Reisen. Y esa se llama Cursovash. Ya. Bien. A ver, la voy a abrir acá. Voy a separarlo en dos. Tengo dos. El de lado izquierdo me voy a conectar a la otra máquina. ¿Qué puede suceder con el comando SSH? Ah, sí. Se puede que el pones ese. Como se llama? La IP. O el nombre. Está todo. En este caso, la otra máquina es .80. Le pongo 10 y servidor X. Entonces, esta ya es la máquina del curso, lo que estoy haciendo anteriormente. Y esta es mi máquina. Ya. Ya. Voy a crear en mi máquina una carpeta que se llama Curso Subbion Bash. Y voy a entrar a esa. Curso Subbion Bash. Que obviamente no tengo nada. ¿Estamos? Ya. Ahora, en la otra máquina, en esta máquina nosotros tenemos la carpeta Scripts. ¿Estamos? ¿Sí? Sí. Imagínate de que mi idea es que este archivo Scripts, esa carpeta Scripts, yo la comprima y la mande acá. ¿Sabes hacer eso? No. Ya. Lo vamos a hacer primero. El comando para comprimir es star. Menos Xzvf. Perdón. C. Zvf. Ya. Eso es el comando. Luego viene que es lo que quiero comprimir y al final viene el nombre. Y le voy a llamar Scripts.tar.gz. Ya. Entonces, el tar.gz significa que lo que va a hacer tar es ponerlo en un solo archivo y el gz lo va a comprimir. ¿Está bien? Eso es lo que está haciendo este comando. ¿Qué pasó? Voy a ir al revés, dame un segundo. Sí, era al revés. Disculpa. Bien. Sí, 85. 6.85. Dos puntos y ahí le digo dónde quiero que se copie. Dentro de Home, Christian Cursovage. Nuevamente, solamente para que veas. No tengo nada ahora. Al momento de hacer SCP, le pongo yes, me pide la contraseña y lo ha copiado. Por lo tanto, voy a hacer un ls acá y ya lo tenemos. Entonces, el comando SCP nos permite transmitir archivos de nuestra máquina o de este servidor hacia otro servidor. No lo voy a hacer, pero es posible, generando certificados RSA, de que no me pida la contraseña para automatizarlo. Que haya, darle confianza entre máquina y máquina. Pero eso es un tema de configuración. Y podría ejecutar comando sin que me pida la contraseña. Y todo se automatiza de 100%. ¿Ya? Sí, sí. Bien, entonces, como nos queda poco tiempo, yo voy a realizar el ejercicio. ¿Ya? Ok. Entonces, vamos a hacerlo lo más rápido posible. Ya salgo de acá. Ya salgo de acá. Acá vamos a hacer... Acá mismo, lo vamos a crear el archivo. Touch. Menu Caps. Punto SH. ¿Ya? Voy a hacer con Beam. El dato normal, voy a hacerlo con NaM. Ok. Entonces, acá, a este le ponemos... Beam Bash. ¿Ya? Vamos a poner donde se va a crear los backups. Vamos a poner entonces Backups Div. ¿Sí? Esto va a ser la carpeta Home. Slash. Backups. ¿Ya? Vamos a poner en Remote Server donde quiero que se copie. Y nosotros ya hemos visto ese momento que necesita un usuario. Arroba una IP. Dos puntos. Slash la ruta donde quiero que se copie. ¿Estamos? Listo. Ahora, vamos ya a hacerlo un poco más profesional nuestro backup. Nuestro script. Acá le vamos a decir si es que no existe el directorio. Si no existe nuestro directorio de backups, entonces quiero que lo cree. ¿Ya? MKDIR-P, por si es que necesita rutas complicadas. Y le ponemos... Un dólar. Backups Div. ¿Sí? Hasta ahí está claro. Solo estamos diciendo que si no existe esa carpeta de backups, que la cree. ¿Ya? Listo. Vamos a necesitar una función de backups. Vamos a tener que crear una función. Crear backups. Acá ya pues dependiendo de la base de datos con que trabajen o no trabajen. Ya se hace ese proceso. Nosotros lo vamos a simular. ¿Ya? Primero vamos a necesitar un nombre de archivo. A eso le vamos a llamar backup file. ¿Ya? Ese nombre de archivo yo quiero que tenga el nombre de backup sub-bion. ¿Sí? Y quiero que tenga la fecha de creación. Para eso voy a utilizar el comando Day. Day te devuelve toda la fecha completa. Pero quiero que me lo devuelva en este formato. Este año, mes. Tú puedes cambiarlo, ¿no? Año, mes, día. Sub-bion. Minuto. Segundo. ¿Sí? Entonces sería 2004, 08, 23, sub-bion. Tres, no, sería 15 porque está en mayúscula. Es 48 con la cantidad de segundos. Estamos con el año mes. ¿Sí? No quiero tener problemas. Punto tar.gz. Ya sabemos de que lo que vamos a hacer es, ese archivo lo vamos a comprimir. ¿Ya? ¿Sí? Ya. A ver, voy a simular que este torch está creando un backup. ¿Ya? Vamos a simularlo con backups.deal. Slash. Dollar. Backup file. Supongamos que este archivo que lo estoy creando con torch es mi backup que se ha creado. ¿Ya? ¿Sí? Le vamos a poner un texto. Backup subió a un file. ¿Ya? Entonces, asumimos que ese es nuestro backup de la base de datos. Y lo que vamos a hacer ahora es crear, lo vamos a comprimir, lo que hicimos hace un momento. Y ahora vamos a ver cómo se va a hacer. ¿Sí? ¿Sí? Lo vamos a comprimir, lo que hicimos hace un momento. ¿Estamos? Sí. Entonces pondríamos el nombre del backup name y lo vamos a poner en la carpeta backups. Backups. Here. Slash. Backup name. Entonces, este es el que tiene el nombre de tarje z. ¿Y qué quiero comprimir? Lo que quiero comprimir es el backups.dir. Backup file. ¿Sí? ¿Se está entendiendo ese comando? Ya. Como se supone este es mi backup, ¿Ya? Lo que estoy haciendo acá es, lo acabo de comprimir. Como ya lo he comprimido, ya está compreso, este archivo ya no me sirve. ¿Cierto? Ese archivo ya no me sirve. El backup file. Entonces, para que no me ocupe espacio, vamos a hacerle un rm $backups.dir.slash.backup file. ¿Sí? Entonces acá comprimo, una vez que termine de comprimir, borro el archivo. Si todo está bien, acá yo ya tengo que comprobarlo. Todo está bien. Entonces acá le digo, si la salida, acuérdate de este comando, ¿Qué te hace este comando? ¿Te acuerdas? Sí, una cosa que lo vimos, pero ya fue. O sea, esto. En la práctica. Sí, no, claro, de hecho, eso ya te devuelve el código del último comando ejecutado. ¿Estamos? Entonces, si es que no ha habido ningún error, espérate, este no viene acá. Si es que no ha habido ningún error, ya de crearlo, entonces significa que se ha creado el backup. ¿Ya? Vamos a poner, hecho, backup creado. Dollar, backup no creado. Sí. De lo contrario, backup no creado. Hay muchas formas de hacerlo. Estoy intentando hacerlo más rápido posible. Lo ideal es generar un check soon, ver si el archivo existe, que sea mayor que cero, ver todas esas condiciones. Eso quiero que lo sepas. Estoy intentando hacerlo, pero el tiempo tampoco nos va a dar mucho. Ya, vamos a poner listar backups. Listar backups. Vamos a poner, si el directorio existe, ahora ya tenemos que verlo de esa forma. Backups, si el directorio existe, entonces vamos a publicarlos. Lo voy a hacer con ls, nada más. Pero no lo hagamos lo bien. Aunque nos demoremos un poco más. Sí, podemos pasarnos unos minutos. No tienes por el tiempo. No, muy temen. Ah, ya. Estaba preocupado por si es que no podías. Si nos demoramos un poco más, no hay problema. Lo voy a hacer como tiene que ser. Ok. Backup gear. Ya, lo que pasa es que si solamente le pongo ls, me va a dar toda la ruta completa. Yo solo quiero que me visualice el nombre de archivo. Ok. No. No? No, no cuenta. Ya, pero ya sabes. ¿Te acuerdas cómo hemos utilizado esto al principio cuando te expliqué verdad? Si esto te manda un código verdadero, ejecutalo de acá. Si esto te manda un código falso, no ejecutalo de acá. Lo que se está diciendo acá es, si existe este archivo, entonces me lo publicas. Pero solo su nombre. Ok. Ya. Ya. Si. Ya. A ver, vamos a hacer de estos dos. Ya. Vamos a hacer de estos dos. Listar backups. Ya vamos a hacer el menú. Vamos a hacer un menú. Vamos a poner igual true. True. Ya. Ya. Vamos a poner un hecho. Este uno. Llegar un backup. Hecho. Un dos. Este listar backups. Eso los vas a acabar tú. Tres. Enviar backup a servidor remoto. Hecho cuatro. Restaurar backup. Y cinco. Salir. Ya. Ya. Ya. Entonces, acá le vamos a poner read-p. Seleccione una opción. Y le vamos a llamar opción. Y nuevamente nuestros case. Le vamos a poner opción. In. In. Primero le habíamos llamado crear backups. Crear backups. Entonces, la opción uno es de frente. Crear backups. Llamamos a la función. .com. Dos. Es listar backups. Y le hemos llamado listar backups. Listar backups. Y terminamos. No vamos a hacer todas nomás. Terminemos bien. La otra que todavía no tenemos es enviar backups. Que en un momento lo hacemos ya. Ya backups. La otra es. Restaurar backups. Y a cinco va a salir. Y cualquier otra opción distinta. Echo. Ingrese una opción. Entonces vamos a crear ahora. La función de enviar backups. Y restaurar backups. Aunque restaurar backups. Solo pondremos un echo nada más. La de enviar sí. Enviar backups. ¿Backups era? Enviar backups. Enviar backups. ¿Ya? Lo primero que tenemos que hacer. Es que liste los backups. ¿Cierto? Listar backups. Eso ya lo tenemos en la función. Por eso simplemente lo ejecuto. Hecho. Vamos a ponerle. Este. Ingresa. El nombre del backup. Y. Mejor lo ponemos de frente con. Read-P. Y lo vamos a llamar backup-read. ¿Ya? Ahora vamos a probar. Si es que el archivo existe y es regular. O sea con "-f". Ya. Ponemos dólar. Ya sabemos que va a estar. En la carpeta backup-read. Y es una variable global. Dólar. Backup-main. Si es que existe. Entonces sí podemos. Copiarlo. Ten. Usamos el comando. Ssp. Ya. Este. Vamos a copiar este archivo. ¿A dónde lo vamos a copiar? Ya lo tenemos en una variable remota. Con su copiar. Si. El ssp que te he mostrado hace un momento. Ya lo está copiando. ¿Verdad? ¿Cómo sé de que lo ha copiado correctamente? O sea que no ha habido ningún tipo de error. Nosotros acá le vamos a poner. El dólar. Para saber. ¿Cómo salió el último comando? ¿Te acuerdas? Si esto es igual. A cero. Significa que se envió correctamente. Din. Hecho. Enviado. Correctamente. De lo contrario. Hecho. Error al enviar. El backup. Si. Ya. Y si es que no existe el archivo. Entonces le vamos a poner un else. Hecho. No existe el backup. Backup. Si. Ya está. Restar el backup no lo vamos a hacer. ¿Verdad? Vamos a ver si esto funciona. Vamos a ver si esto funciona. Línea 6. ¿Qué hay en la línea 6? Escape 6GG. Esta es la línea 6. Espacio ¿no? Espacio. Espacio. ¿Y por qué no se detuvo? Rear backups, restart backups, enviar backups. Ah, porque nunca hemos llamado al menú ¿no? Esto lo hemos puesto por funciones y nunca lo hemos llamado al menú. ¿Cierto? Porque menos una función. Entonces no va a ser absolutamente nada. Listo. A ver. Voy a poner 1. Está mal hice. Escrito date. A ver. Vamos a revisar. No creo que sea por el tema de... ...espacios. Y vamos a probarlo. State. Vamos a probar este momento. Algo está mal. En el comando que está mal. A ver. Year. De año. Indic, ¿qué es la primera en mayores? ¿La year? Sí, para que sea 2024. Si no, diría 24. Ok. A ver. Tenemos dólar. Date. Más. Porcentaje Y, porcentaje M, porcentaje T. ¿Por qué está mal? Eso es sin espacio. Más. El más es sin espacio. Esto es así. ¿Ves? Eso es así. ¿Verdad? Listo. A ver. Un bash. Listo. Vamos a ver. Uno. Crear un backup. Listo. Mira. Eso es normal. Ya. Eso es normal que aparezca. Eso no es un error. Y ha creado... Y ha creado la carpeta backups que no la trae. Teníamos y ha creado este archivo. Luego ha creado este backup. Bueno. Y después no lo hemos publicado, pero debe haber borrado las opciones. A ver. Dos. No está mostrando. A ver. Déjame revisar. LS. Con Christian. Ya. Sí está. ¿Verdad? Vamos a borrarlos todos otra vez. ¿Ya? ¡Oh! ¡No! ¡No! ¡No! Lo borré. En vez de borrar la carpeta, borré esta carpeta. Borré nuestra script. No hay dilema. Espérame. No hay dilema. Lo que pasa es que yo ya tengo... Yo hice ese ejercicio antes de la semana pasada. Yo lo debo tener hecho. Espérame. Lo voy a buscar en mi máquina. ¿Cómo lo borré? ¿Quisí borrar los de atrás? Yo lo tengo. Yo lo he preparado. Yo lo hice. ¿Listo? Está. Este creo que es. A ver. Sí. Sí, sí. Lo tengo. Lo tengo. Y lo tengo completo. Sí, lo tengo. Ya. A ver. Bien. Este... Menú backups.sh. Escribe y lo copio. Ya está. Eso lo hice la semana pasada, justamente para preparar esta. Ya. A ver. Debe ser muy similar. Este es el remote server. ¿Ves? El remote server que dijimos que iba a ser. Christian, arroba, la IP. Bueno, que va a fallar igual. La carpeta. Dime. ¿Quién quiere? ¿Quién? ¿Quién? ¿Quién? ¿Quién? Sí. Pero igual va a fallar. Porque este es otro. O no sé. Vamos a ver. ¿Quién quiere? ¿Quién quiere? ¿Quién quiere? ¿Quién quiere? ¿Quién quiere? O no sé. Vamos a ver. Vamos a ver si lo copio. Pero si debería. Está moda. No, sí, sí, sí. Debe funcionar. Debe funcionar. Y la vamos a copiar en la carpeta. Voy a crear una. Creé una carpeta Curso Bash, ¿no? En mi máquina. A ver, déjame revisar. Sí. En mi máquina creé una carpeta Curso Bash que está en los scripts.cargz. ¿Te acuerdas? Sí. Ya. Entonces, ahí lo vamos a copiar. Con Christian Curso Bash. ¿Ya? Y el backup. Listo. Entonces, esto era. Si es que no existe, se va a crear el directorio con su eco. Perfecto. Este es lo que se crea del backup. Que es similar a lo que hemos hecho. Es lo mismo que hemos hecho. Tengo memoria fotográfica acá. Pues mire, ya acá está bien. Ya creamos el backup. Creamos todo. Este es mi backup de Postgres. Acá hay un error. Porque acá debería estar el backup.
on 2024-08-23