Programación en bash - parte 2

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
Grazas Juan Carlos Ortiz!

O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

13 comentarios, deixa os teus

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.

  1.   Medio Difícil dixo

    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 ...

  2.   Miguel Anxo dixo

    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

  3.   Pamela galaviz dixo

    Moitas grazas pola contribución 🙂

  4.   Mario Xavier dixo

    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

  5.   xoan dixo

    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

  6.   imos usar linux dixo

    É o artigo anterior. Podes acceder a el en http://usemoslinux.blogspot.com

    Abrazo! Paul.

  7.   Franco dixo

    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

  8.   Saito Mordraw dixo

    Dúas partes extraordinarias, os meus sinceros parabéns.

    Simplemente marabilloso.

  9.   Fredy dixo

    Ben

  10.   Hugo dixo

    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.

  11.   DAPAMA 21 dixo

    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.

  12.   Luis dixo

    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.

  13.   charly dixo

    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