Diferencia entre revisiones de «Supuestos Linux»
| 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
Sumario
- 1 Scripts
- 1.1 Tipo de comillas
- 1.2 Tipo de parámetros $ existentes
- 1.3 Operacións matemáticas con enteiros
- 1.4 Lectura de variables
- 1.5 Condicionáis
- 1.6 Bucles
- 1.7 Exemplo de menú
- 1.8 Exemplo de funcións
- 1.9 Exemplo copia de seguridade
- 1.10 Exemplo contador de ficheiros
- 1.11 Exemplo que amosa nome e permisos dos ficheiros
- 1.12 Exemplo cos parámetros de chamada do script
- 1.13 Exemplo listando contidos dos directorios con case
- 1.14 Exemplo de usuarios conectados no sistema
- 1.15 Exemplo modificación de permisos
- 1.16 Exemplo amosar contido de ficheiros
- 1.17 Exemplo existencia e permiso de ficheiros
- 2 Créditos
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