Diferencia entre revisiones de «Supuestos Linux»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 75: Línea 75:
 
fi #Fin Condición
 
fi #Fin Condición
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Test permite avaliar unha expresión e ver se é verdadeira ou falsa. Utilizase con frecuencia nas condicións do if. A expresión pode ser:
 +
{| class="wikitable
 +
! Expresión
 +
! Descrición
 +
|-
 +
| -r
 +
| ficheiro o ficheiro existe e se pode ler
 +
|-
 +
| -w
 +
| ficheiro o ficheiro existe e se pode escribir
 +
|-
 +
| -x
 +
| ficheiro o ficheiro existe e se pode executar
 +
|-
 +
| -f
 +
| ficheiro o ficheiro existe e é un ficheiro normal
 +
|-
 +
| -d
 +
| ficheiro o ficheiro é un directorio
 +
|-
 +
| -c
 +
| ficheiro é un ficheiro especial de tipo carácter
 +
|-
 +
| -b
 +
| ficheiro é un ficheiro especial de tipo bloque
 +
|-
 +
| -s
 +
| ficheiro o ficheiro ten un tamaño maior que cero
 +
|-
 +
| -z
 +
| s1 a lonxitude da cadea s1 é cero
 +
|-
 +
| -n
 +
| s1 a lonxitude da cadea s1 non é cero
 +
|-
 +
| s1 = s2
 +
| as dúas cadeas son iguais
 +
|-
 +
| s1 != s2
 +
| as dúas cadeas son distintas
 +
|-
 +
| s1
 +
| a cadea s1 existe
 +
|-
 +
| n1 –eq n2
 +
| n1 e n2 teñen o mesmo valor numérico
 +
|-
 +
| n1 –ne n2
 +
| n1 e n2 teñen distinto valor numérico
 +
|-
 +
| n1 –gt n2
 +
| n1 ten un valor maior que n2
 +
|-
 +
| n1 –lt n2
 +
| n1 ten un valor menor que n2
 +
|-
 +
| n1 –ge n2
 +
| n1 ten un valor maior ou igual que n2
 +
|-
 +
| n1 –le n2
 +
| n1 ten un valor menor ou igual que n2
 +
|-
 +
| -a
 +
| And lóxico
 +
|-
 +
| -o
 +
| Or lóxico
 +
|}
  
 
== Bucles ==
 
== Bucles ==

Revisión del 19:19 16 may 2021

Scripts

Tipo de comillas

Exemplo para comprender a diferenza entre comillas simples, dobres e inclinadas

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 a=ls #Definimos variable a co valor ls
3 echo '$a' #Comillas simples, non interpreta caracteres especiais coma o carácter $ (neste caso amosará $a)
4 echo "$a" #Comillas dobres, interpreta caracteres especiais coma o carácter $ e todo o que se atope entre elas e considerado como un só parámetro (neste caso amosará ls)
5 echo `$a` #Comillas inclinadas, executa o contido dentro das comillas (neste caso amosa o contido do directorio actual)

Tipo de parámetros $ existentes

Exemplo para entednder o tipo de parámetros $ existentes

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 echo "O parámetro cero, $0, é o propio nome do script"
3 echo "Primeiro parámetro que recibo: $1, segundo: $2…"
4 echo "O número total de parámetros pasados na execución do script(excluido $0) é: $#"
5 echo "A lista completa de parámetros(excluido $0), separados por un espacio, é $*"
6 echo "O Identificador do proceso (PID) é $$"
7 echo "A saída da execución do último comando pode ser correcta(valor cero) ou errónea(valor distinto de cero),
8 sendo neste caso $?"

Operacións matemáticas con enteiros

Exemplo de operacións matemáticas con números enteiros

1 #!/bin/bash#Liña necesaria para saber que shell executará o script
2 expr 2 \* 2 #Fai a operación 2*2
3 echo "2 * 2" | bc #Fai a operación 2*2
4 echo $((2*2)) #Fai a operación 2*2

Lectura de variables

Exemplo para pedir variables por teclado

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 echo Dáme o teu nome #Pedimos o nome do usuario
3 read nome #O que se introduce por teclado gárdase como variable nome
4 echo Ola $nome #Ensinamos por pantalla Ola e o contido da variable nom

Condicionáis

Exemplos para comprender as condicións.

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 echo Dáme un número #Pedimos un número
3 read n1 #O que se introduce por teclado gárdase como variable n1
4 if test $n1 –lt 100 #Inicio Condición: Si o valor de n1 é menor que 100
5 then #entón
6 echo O número $n1 é menor que 100 #Ensina por pantalla unha mensaxe
7 else #senón
8 echo O número $n1 é maior que 100 #Ensina por pantalla unha mensaxe
9 fi #Fin Condición
 1 #!/bin/bash #Liña necesaria para saber que shell executará o script
 2 echo Dáme un número #Pedimos un número
 3 read n1 #O que se introduce por teclado gárdase como variable n1
 4 if test $n1 –le 100 #Inicio Condición: Si o valor de n1 é menor ou igual que 100
 5 then #entón
 6 if test $n1 –lt 100 ; then # I nicio Condición-2:Si o valor de n1 é menor que 100
 7 echo O número $n1 é menor que 100 #Ensina por pantalla unha mensaxe
 8 else #senón
 9 echo O número é igual a 100 #Ensina por pantalla unha mensaxe
10 fi #Fin Condición-2
11 else #senón
12 echo O número $n1 é maior que 100 #Ensina por pantalla unha mensaxe
13 fi #Fin Condición

Test permite avaliar unha expresión e ver se é verdadeira ou falsa. Utilizase con frecuencia nas condicións do if. A expresión pode ser:

Expresión Descrición
-r ficheiro o ficheiro existe e se pode ler
-w ficheiro o ficheiro existe e se pode escribir
-x ficheiro o ficheiro existe e se pode executar
-f ficheiro o ficheiro existe e é un ficheiro normal
-d ficheiro o ficheiro é un directorio
-c ficheiro é un ficheiro especial de tipo carácter
-b ficheiro é un ficheiro especial de tipo bloque
-s ficheiro o ficheiro ten un tamaño maior que cero
-z s1 a lonxitude da cadea s1 é cero
-n s1 a lonxitude da cadea s1 non é cero
s1 = s2 as dúas cadeas son iguais
s1 != s2 as dúas cadeas son distintas
s1 a cadea s1 existe
n1 –eq n2 n1 e n2 teñen o mesmo valor numérico
n1 –ne n2 n1 e n2 teñen distinto valor numérico
n1 –gt n2 n1 ten un valor maior que n2
n1 –lt n2 n1 ten un valor menor que n2
n1 –ge n2 n1 ten un valor maior ou igual que n2
n1 –le n2 n1 ten un valor menor ou igual que n2
-a And lóxico
-o Or lóxico

Bucles

Exemplo de contador con for

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 for i in $(seq 1 100) #Comeza bucle contador onde a variable i toma o valor de 1 a 100
3 do #facer
4 echo Valor de i: $i #Ensina o valor da variable i para cada valor do bucle, así ensina os números de 1 ata 100
5 done #feito


Exemplo con while

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 i=1 #Definimos variable i co valor un.
3 while [ $i –le 100 ] #Comeza bucle contador onde a variable i toma o valor de 1 a 100: Namentras i sexa menor ou igual a 100
4 do #facer
5 echo Valor de i: $i #Ensina o valor da variable i para cada valor do bucle, sendo o primeiro valor un
6 i=$(($i+1)) #Aumenta unha unidade o valor anterior, se era un, entón agora valor igual a dous
7 done #feito

Exemplo con until

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 i=1 #Definimos variable i co valor un.
3 until [ $i –ge 101 ] #Comeza bucle contador onde a variable i toma o valor de 1 a 100: Ata que i sexa maior ou igual a 101
4 do #facer
5 echo Valor de i: $i #Ensina o valor da variable i para cada valor do bucle, sendo o primeiro valor un
6 i=$(($i+1)) #Aumenta unha unidade o valor anterior, se era un, entón agora valor igual a dous
7 done #feito

Exemplo de menú

Exemplo de funcionamiento de CASE

 1 #!/bin/bash #Liña necesaria para saber que shell executará o script
 2 echo Opcion1. Ver directorio actual #Amosa por pantalla
 3 echo Opcion2. Ler /tmp #Amosa por pantalla
 4 echo Opcion3. Sair #Sair
 5 echo Elixe opcion:1,2,3? #Escoller opcion
 6 read opcion #A opción escollida gárdase como valor na variable opcion
 7 case $opcion in #Comezo case para facer menu
 8 1) pwd #Se o valor da variable opcion é 1 fanse os seguintes comandos.
 9 ;; #Toda opción debe acabar con ;;
10 2) ls /tmp #Se o valor da variable opcion é 2 fanse os seguintes comandos.
11 ;; #Toda opción debe acabar con ;;
12 3) exit #Se o valor da variable opcion é 3 fanse os seguintes comandos.
13 ;; #Toda opción debe acabar con ;;
14 *) echo non elixiches nin 1,2,3 #Mensaxe por pantalla
15 ;; #Toda opción debe acabar con ;;
16 esac #Fin case para facer menu

Exemplo de funcións

Exemplo de funcion suma

1 #!/bin/bash #Liña necesaria para saber que shell executará o script
2 suma() { #Definimos a función suma
3 echo Dame numero #Pedimos un número
4 read n1 #Recollemos o número como valor na variable n1
5 echo Dame outro numero #Pedimos outro número
6 read n2 #Recollemos o número como valor na variable n2
7 echo A suma de $n1 e $n2 é: $(($n1+$n2)) #Facemos a suma
8 } #Finaliza a definición da función suma
9 suma #Chamamos á función suma

Exemplo copia de seguridade

Script copia de seguridade(backup) home usuario

 1 #!/bin/bash #Liña necesaria para saber que shell executará o script
 2 inicio() { #Definimos a función inicio
 3 echo Dáme usuario #Mensaxe por pantalla
 4 read user #Recollemos o usuario como valor na variable user
 5 testear #Chamamos á función testear
 6 } #Finaliza a definición da función inicio
 7 testear() { #Definimos a función testear
 8 if test –d /home/$user #Comeza condición: Si existe o directorio /home/$user
 9 then #entón
10 echo O directorio /home/$user existe #Mensaxe por pantalla
11 tar –czvf user.tar.gz /home/$use r #Empaquetar-Comprimir o directorio /home/$user
12 else #senón
13 echo O directorio /home/$user non existe #Mensaxe por pantalla
14 echo O contido de /home é o seguinte `ls /home` #Ensina o directorio /home para escoller ben o usuario
15 inicio #Chamamos á función inicio
16 fi #Finaliza Condición
17 } #Finaliza a definición da función testear
18 inicio #Chamamos á función inicio

Script copia de seguridade(backup) de calquer cartafol introducido polo usuario

 1 !/bin/bash #Liña necesaria para saber que shell executará o script
 2 inicio() { #Definimos a función inicio
 3 echo Dáme cartafol #Menxase por pantalla
 4 read cartafol #Recollemos o escrito como valor na variable cartafol
 5 testear #Chamamos á función testear
 6 } #Finaliza a definición da función inicio
 7 testear() { #Definimos a función testear
 8 if test –d $cartafol #Comeza Condición: Si existe o directorio $cartafol
 9 then #entón,
10 echo O directorio $cartafol existe #Mensaxe por pantalla
11 tar –cvjf cartafol.tar.bz2 $cartafol #Empaquetar e comprimir o directorio $cartafol
12 else #senón
13 echo O directorio $cartafol non existe #Mensaxe por pantalla
14 inicio #Chamamos á función inicio
15 fi #Finaliza a condición
16 } #Finaliza a definición da función testear
17 inicio #Chamamos á función inicio

Exemplo contador de ficheiros

Mostra por pantalla cantos ficheiros e subdirectorios do directorio actual conteñen no seu nome a letra “c”.

1 #!/bin/bash
2 # Duas posibilidades
3 ls *c* | wc -w
4 ls | grep c | wc -l

Exemplo que amosa nome e permisos dos ficheiros

recibe un directorio como parámetro e amosa o nome e os permisos dos seus ficheiros

1 #!/bin/bash
2 cd $1
3 for i in `ls`
4 do
5 # if [[ -f $i ]]
6 if ( test -f $i )
7 then ls -l $i | cut -c 1-10,56-
8 fi
9 done

Exemplo cos parámetros de chamada do script

Daremos dende a liña de comandos tres parámetros e mostrará o nome do comando e os argumentos que lle pasamos:

O comando e :./xxxx.
Os argumentos son: arg1 arg2 arg3
1 #!/bin/bash
2 echo "O comando e: $0"
3 echo "Os argumentos son: $1 $2 $3"

Exemplo listando contidos dos directorios con case

Deberá mostrar o seguinte menú: 1. Listar o contido do directorio actual 2. Listar o contido do directorio actual en formato largo 3. Sair

Cun valor diferente o script amosará a mensaxe "erro na selección!". Repetirase o menú ata que o usuario introduza a opción 3 (sair)

 1 #!/bin/bash
 2 sair=0
 3 until test $sair -eq 3
 4 # until [[ $sair -eq 3 ]]
 5 # until (( $sair==3 ))
 6 do
 7    echo "1. Listar o contido do directorio actual"
 8    echo "2. Listar o contido do directorio actual en formato longo"
 9    echo "3. Sair"
10 
11    read sair
12 
13    case $sair in
14    1) ls;;
15    2) ls -l;;
16    3) ;;
17    *) echo "Erro na seleccion!";;
18    esac
19 done

Exemplo de usuarios conectados no sistema

Garda 10 veces cada 2 minutos os usuarios conectados no sistema no ficheiro “usuarios.log”.

 1 #!/bin/bash
 2 
 3 p=1
 4 
 5 while [ $p -lt 10 ]
 6 do
 7    p=$((p+1))
 8    who>>usuarios.log
 9    sleep 2m
10 done

Exemplo modificación de permisos

Da todos os permisos de lectura e escritura aos ficheiros do directorio que se pasa como parámetro, e só de lectura e execución aos subdirectorios.

 1 #!/bin/bash
 2 cd $1
 3 for i in `ls`
 4 do
 5    if test -f $i
 6       then chmod 666 $i
 7    fi
 8    if test -d $i
 9       then chmod 444 $i
10    fi
11 done

Exemplo amosar contido de ficheiros

Acepta como argumentos os nomes dos ficheiros e amosa o contido de cada un deles, precendendo a cada un dunha liña: “Contido do ficheiro x”

1 #!/bin/bash
2 for i in $*
3 do
4    echo "Contido do ficheiro: $i"
5    cat $i
6 done

Exemplo existencia e permiso de ficheiros

Dado un nome de ficheiro, que amose a correspondente mensaxe:

  • se este existe, é un ficheiro normal e se pode escribir: O fichero f existe, e un ficheiro normal e se pode escribir.
  • Se non se pode escribir: O fichero f existe, e un ficheiro normal pero non se pode escribir.
  • Se non existe aparecerán as seguseguintes mensaxes: O ficheiro f non existe
  • Se é un directorio é un directorio: f e un directorio
 1 #!/bin/bash
 2 
 3 if [[ (-f $1) ]]
 4    then
 5    if [[ -w $1 ]]
 6       then echo "O ficheiro existe, e un ficheiro normal e se pode escribir"
 7    else 
 8       echo "O ficheiro existe, e un ficheiro normal peronon se pode escribir"
 9    fi
10 else
11    if [[ ! -e $1 ]]
12       then echo "O ficheiro non existe"
13    elif [[ -d $1 ]]
14       then echo "E un directorio"
15    fi
16 fi

Créditos

Elaborado a partir de EXEMPLOS SCRIPTS – SHELL BASH de Ricardo Feijoo Costa This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License