Parte segunda disto mini-titorial programación en Bater, onde aprendemos a usar ciclos e outras ferramentas que nos axudarán a mellorar as funcionalidades do noso scripts. |
O If condicional
A función de If é aplicar un filtro e realizar unha operación ou tarefa para cada tipo de filtro aplicado. A súa estrutura é a seguinte:
Se [condición]; entón elif manda [condición]; entón outra vez manda; fi manda
Un exemplo móstrase xunto ao bucle For na súa respectiva sección.
ciclos
1. While: executará todos os comandos especificados entre do e done sempre que a condición sexa certa. Se queremos pasarlle operadores de comparación, a expresión debe estar entre parénteses.
mentres que CONDITION / COMMAND fai comandos feitos
Exemplo: táboa de multiplicar dun número
#! / bin / bash X = 1 eco "Introduza un número e prema ENTER" lea M # O bucle controla que X é menor ou igual a 10 mentres que [$ X –le 10] fai # En R almacenamos a multiplicación de X por MR = $ [X * M] #Esta multiplicación está impresa na pantalla eco "$ M * $ X = $ R" #Con deixar, aumentamos o valor de X en 1 unidade deixamos X = $ X + 1 feito
2. Para: almacena unha lista de elementos nunha variable, que se usará para realizar certas operacións con cada ciclo.
para VARIABLE en ELEMENTS facer comandos feitos
Exemplo: programa que copia un ficheiro dun cartafol a outro substituíndo un ficheiro antigo.
# / bin / bash # Establecemos directorios de orixe e destino ORIGIN = / home / usuario / Descargas DESTINATION = / home / usuario / Documentos # Posicionámonos no CD de orixe $ ORIXE #De todos os ficheiros, só queremos o que is # call FILE for FILE in * do ARCH-DESTINATION = "$ DESTINATION / $ FILE" # -f fíltranos ficheiros habituais, xa que os directorios #non son bos para nós. –No filtra # ficheiros "máis novos" que os # atopados no cartafol de destino se [-f $ FILE] && [$ FILE –nt $ ARCH-DESTINATION]; logo fai eco de "Copiando $ FICHEIRO ..." # copiamos o ficheiro con cp cp $ FICHA $ ARCH-DESTINATION fi feito #Cd para saír do cartafol de orixe cd
Outro exemplo: script onde o usuario debe adiviñar un número aleatorio xerado polo ordenador.
# / bin / bash # Xérase un número aleatorio do 1 ao 10, # gárdase en RANDOM RANDOM = $ [$ RANDOM% 10 + 1] mentres [1] fai eco –n “Introduza un número:“ lea NUM # Compare se o número escollido polo usuario é #igual a RANDOM; lembre de usar $ para avaliar os #valores das variables e non os seus nomes se ["$ NUM –eq" $ RANDOM "]; entón fai eco de "Acertaches!" #break permite rematar o bucle mentres se rompe #Se o número é inferior a RANDOM elif [“$ NUM –gt“ $ RANDOM ”]; entón fai eco de "É menos" "Se non, é maior que RANDOM senón fai eco de" É maior "
3. Ata: estrutura bastante similar a While, agás que o código sempre se executa mentres a avaliación da condición é negativa, é dicir, o programa segue executándose "ata que se produce a condición"
ata que CONDITION / COMMAND faga os comandos feitos
Exemplo: imprima os números 10-20 en orde descendente
#! / bin / bash CONT = 20 # Sempre que o contador sexa inferior a 10 (-lt, "menor # que") o código execútase ata [$ CONT -lt 10]; fai eco de "COUNTER $ CONT" #A CONT é restada por unha unidade deixamos CONT- = 1 feito
4. Seleccionar: este último ciclo é un caso especial, xa que normalmente úsase para facer menús rapidamente. Funciona de xeito similar ao loop For.
selecciona VARIABLE na LISTA de comandos feitos
Exemplo: dálle ao usuario a posibilidade de continuar ou rematar o script.
#! / bin / bash #item é unha variable que responde ao que elixe #usuario, Continuar e Rematar son as #opcións dispoñibles, aínda que se poden engadir outras opcións # máis seleccione elemento en Continuar Rematar facer #Se o usuario elixe rematamos o programa e logo con pausa saímos do ciclo. se [$ item = "Rematar"]; logo rompe a fin
13 comentarios, deixa os teus
Creo que algo así: tar -cf - Directorio | (cd / other / directory; tar -xvf -)
Entón parecería / outro / directorio / Directorio
Deste xeito comprei un directorio e descomprimilo noutro lugar ...
Ola, bo titor, estou aprendendo sobre o tema e todo está ben, só que non fun quen de facer un programa que me axude, a ver se me podes axudar.
Necesito facer un ciclo, no que recibirá como parámetros a lista dun ficheiro fonte, esta lista só trae nomes (sen extensión), para que o ciclo faga o seguinte, busque o nome recibido nun directorio (que é a que buscaremos), extraer e copiar o ficheiro (nome completo xa con extensión) e a ruta absoluta e crealo noutro ficheiro de destino.
Ata agora teño o seguinte:
mentres se le a liña
do
eco -e "$ liña"
find / home / myuser / dof "$ line" -exec ligazón de lectura -f {};
feito <testlist.txt Ata agora lin o ficheiro, cada liña que ten, pero non podo facelo buscar ese ficheiro e extraer a información, se me podes axudar, grazas. Graciñas
Moitas grazas pola contribución 🙂
ola ... Espero que poidas axudar na próxima práctica ... Descomprimir o ficheiro en tgz no directorio especificado, ademais de especificar usuario e grupo para todos os directorios e ficheiros existentes e asignar permisos a ficheiros e directorios
nota: ficheiros listos para ler e escribir
permiso de execución de directorios
ARCH-DESTINATION é unha variable na que queremos gardar a ruta do ficheiro de destino, salvo redundancia. Despois, a esta variable indicámoslle a variable DESTINACIÓN, que anteriormente contén o camiño cara ao cartafol Documentos e engadimos o FICHEIRO "variable", que contén o nome do ficheiro. Se ese ficheiro fose, por exemplo, list.doc, a variable ARCH-DESTINATION sería igual a /home/Usuario/Documentos/listado.doc
É o artigo anterior. Podes acceder a el en http://usemoslinux.blogspot.com
Abrazo! Paul.
Bo día compañeiro, grazas, moi ben o teu blog, pero non podo conseguir a primeira parte de Programación en Bash, onde o recibo grazas, saúdos
Dúas partes extraordinarias, os meus sinceros parabéns.
Simplemente marabilloso.
Ben
Ola, estou a facer un programa cun CASE, que quero que faga e non sei como, por exemplo:
echo Escolle unha opción:
perder
eco 1. opción 1
eco 2. opción 2
eco 3. opción 3
eco 4. opción 4
eco 5. Saír
ler var
maiúsculas "$ var" en
1)
echo "Seleccionaches a opción 1"
;;
2)
echo "Seleccionaches a opción 2"
;;
3)
botou "... .."
;;
4)
botou fóra "..."
;;
5)
botou "..."
;;
*)
eco da "opción incorrecta"
;;
que C
ok o que non sei como facer é que cando selecciono a opción 4 que é marchar, pregunte se realmente quero marchar e dame 2 opcións S e N
e a outra é que cando seleccionas algo diferente aos números 1..5 non me votes do guión ...
Poderías axudarme grazas.
Ola, comecei a facer scripts hai un mes e grazas ás túas publicacións de script. Farei uns 1-15. Moitas grazas por adiantado. Pero agora o noso profesor deunos un traballo no que me estancei. Xa que o profesor pregunta:
pasando un directorio, copie á súa casa todos os ficheiros que están nese directorio alfabeticamente e nomeándoos file1 file2 etc ... etc ...
Agora estou no momento de atopar ou localizar, quería usar find pero ao darlle un código de erro mentres o poño a través de dev null, os permisos denegados entón equivócome e poñendo a localización estou aquí:
localiza $ 1 | grep "/ $ {1} \ $"
pero claro con isto saen todos ...
Moitas grazas se o liches.
Se me podes axudar sería un gran favor.
Gustaríame que me axudases nisto.
1.-Introduce un número enteiro no teclado e amosa dúas e tres veces ese número na pantalla. 2.- Fai un programa para decidir se un número introducido polo teclado é divisible por 3 ou non.
3.- Fai un programa para atopar a suma de: ???????? + ???????? + ???????? + ???????? + ⋯? ???????
4.- Fai un programa para atopar a suma 1 + 3 + 5 + 7 + 9 · · · + (2n + 1).
5.-Fai un programa que imprima a palabra Linux na pantalla 10 veces
6.-Fai un programa que imprima na pantalla a palabra Linux o número de veces indicado por un usuario.
7.-Introduce unha cantidade en horas e convérteo en minutos e segundos.
8.-Calcula a área dun triángulo
9.-Introduce un número no teclado, entón se introduces 2 debería ser cadrado, 3 en cubos, 4 ao cuarto e así ata 6.
10-Calcula a pensión que debe pagar un estudante, debe introducirse o código de especialidade e os días atrasados:
CÓDIGO
ESPECIALIDADE
CANTIDADE
DURANTE O DÍA
1
INFORMÁTICA
160
1
2
ENFERMERÍA
150
1.5
3
SECRETARÍA
140
2
4
VISITACIÓN
180
2.5
5
CONTABILIDADE
160
1
Debe mostrar a especialidade que estuda, o custo da pensión, o impago e o importe total a pagar.
Ola, alguén me pode axudar?
Necesito «Solicitar tres palabras polo teclado e amosalas por orde alfabética de A a z»
En lingua bash ou sh para LINUX porfaborrrr