linux:bash:estructurasdecontrol

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
linux:bash:estructurasdecontrol [10/04/2012 09:56] – [comparaciones de valores numéricos (Test Operators, Binary Comparison)] matelinux:bash:estructurasdecontrol [31/05/2023 02:25] (actual) – [if/else] mate
Línia 1: Línia 1:
 = Estructuras de control y bucles = Estructuras de control y bucles
 ~~NOTOC~~ ~~NOTOC~~
 +
 +== comparaciones de cadenas alfanuméricas (Test Operators, Binary Comparison)
 +  * cadena1 = cadena2 (también cadena1 == cadena2)
 +  * cadena1 != cadena2
 +  * cadena1 < cadena2
 +  * cadena1 > cadena2
 +  * -n cadena1 -> longitud mayor que 0
 +  * -z cadena1 -> longitud = 0
 +  * cadena =~ REG_EXP
 +    * [[http://stackoverflow.com/questions/2348379/use-regular-expression-in-if-condition-in-bash]]
 +    * [[http://wiki.bash-hackers.org/syntax/ccmd/conditional_expression]]
 +
 +== comparaciones de valores numéricos (Test Operators, Binary Comparison)
 +  * **x -lt y** -> x < y
 +  * **x -le y** -> x <= y
 +  * **x -eq y** -> x = y
 +  * **x -ge y** -> x >= y
 +  * **x -gt y** -> x > y
 +  * **x -ne y** -> x != y
 +
 +si se pone entre doble paréntesis:
 +  * **x > y**
 +  * **x >= y**
 +  * **x < y**
 +  * **x %%<=%% y**
 +
 +== comprobación atributos de fichero (Test Operators, Files)
 +  * **-d** fichero -> fichero existe y es un directorio
 +  * **-e** fichero -> fichero existe
 +  * **-f** fichero -> fichero existe y es un fichero regular (no un directorio o fichero especial)
 +  * **-s** fichero -> fichero existe y no está vacío
 +  * **-h** fichero -> fichero existe y es un symlink
 +    * **-L**?
 +  * **-b** fichero -> fichero existe y es un ''device block''
 +  * **-c** fichero -> fichero existe y es un ''device character''
 +  * **-p** fichero -> fichero -> fichero existe y es un ''pipe''
 +  * **-S** fichero -> fichero existe y es un ''socket''
 +  * **-t** fichero -> fichero existe y está asociado a un terminal
 +  * **-N** fichero -> fichero existe y ha sido modificado desde su última lectura
 +
 +
 +  * **-r** fichero -> tiene permiso de lectura
 +  * **-w** fichero -> tiene permiso de escritura
 +  * **-x** fichero -> tiene permiso de ejecución o de búsqueda si es un directorio
 +  * **-g** fichero -> tiene el SGID
 +  * **-u** fichero -> tiene el SUID
 +  * **-k** fichero -> tiene el "sticky bit"
 +
 +
 +  * **-O** fichero -> eres el OWNER del fichero
 +  * **-G** fichero -> el GRUPO del fichero es el mismo que el tuyo
 +
 +
 +  * fichero1 **-nt** fichero2 -> el fichero1 es más reciente que el fichero2
 +  * fichero1 **-ot** fichero2 -> el fichero1 es más antiguio que el fichero2
 +  * fichero1 **-ef** fichero2 -> el fichero1 y el fichero2 son HARD LINKS al mismo fichero
 +
 +
 +  * ''stat <fichero>'' -> información en disco del fichero
 +    * con -c %s -> tamaño del archivo
 +
 +== concatenación de comparaciones / comprobaciones
 +  * && -> and
 +  * || -> OR
 +  * ! -> NOT
 +
 +/vía: [[http://www.linux-es.org/node/238]]
 +
 == estructuras == estructuras
-  * if/else<code>+=== if/else 
 +[[https://phoenixnap.com/kb/bash-if-statement]] 
 +{{:linux:bash:pasted:20230531-022532.png}} 
 + 
 +<code bash>
 if condicion if condicion
 then then
Línia 10: Línia 82:
 else else
   comandos   comandos
-fi +fi</code> 
-DIRECTORIO="/tmp/test"+<code bash; example>DIRECTORIO="/tmp/test"
 COMANDO="/bin/mkdir $DIRECTORIO" COMANDO="/bin/mkdir $DIRECTORIO"
  
Línia 20: Línia 92:
 fi fi
 </code> </code>
-  * for<code>+=== if (ternary operator) 
 +<code bash; example>a=$([ "$b" == 5 ] && echo "$c" || echo "$d"
 +# a = b==5 ? c : d</code> 
 +<code bash; example>[ $b == 5 ] && { a=$c; true; } || a=$d</code> 
 +<code bash; example>VARIABLE=`[ test ] && echo VALUE_A || echo VALUE_B`</code> 
 +=== for 
 +<code bash>
 for nombre [in lista] for nombre [in lista]
 do do
    comandos    comandos
 done done
 +</code> 
 +<code bash; example>
 LISTA="etc var home" LISTA="etc var home"
 for directorio in $LISTA for directorio in $LISTA
Línia 32: Línia 111:
 done done
 </code> </code>
-  * while<code>+<code bash; example>for f in *; do echo $f; done</code> 
 +=== while 
 +<code bash>
 while condición while condición
 do do
    comandos    comandos
 done done
 +</code> 
 +<code bash; example>
 NUM=0 NUM=0
 while [ $NUM -gt 10]; do while [ $NUM -gt 10]; do
Línia 43: Línia 125:
 done done
 </code> </code>
-  * until<code>+=== while 
 +<code bash; example>while true; do sleep 10; ls -la; done</code> 
 +=== until 
 +<code bash>
 until condición until condición
 do do
    comandos    comandos
 done done
 +</code> 
 +<code bash; example>
 NUM=0 NUM=0
 until [ $NUM -gt 10]; do until [ $NUM -gt 10]; do
Línia 54: Línia 140:
 done done
 </code> </code>
-  * case<code>+=== case 
 +<code bash>
 case expresion in case expresion in
     case1)     case1)
Línia 62: Línia 149:
     ...     ...
 esac esac
 +</code> 
 +<code bash; example>
 for NUM in 0 1 2 3 for NUM in 0 1 2 3
 do do
Línia 74: Línia 162:
 </code> </code>
   * select   * select
-== comparaciones de cadenas alfanuméricas (Test Operators, Binary Comparison) +  break (y nested break): [[https://unix.stackexchange.com/questions/200381/how-can-i-break-out-of-a-while-loop-from-within-a-nested-case-statement]]
-  cadena1 = cadena2 (también cadena1 == cadena2) +
-  * cadena1 != cadena2 +
-  * cadena1 < cadena2 +
-  * cadena1 > cadena2 +
-  * -n cadena1 -> longitud mayor que 0 +
-  * -z cadena1 -> longitud = 0 +
-== comparaciones de valores numéricos (Test Operators, Binary Comparison) +
-  * **x -lt y** -> x < y +
-  * **x -le y** -> x <= y +
-  * **x -eq y** -> x = y +
-  * **x -ge y** -> x >= y +
-  * **x -gt y** -> x > y +
-  * **x -ne y** -> x != y +
- +
-si se pone entre doble paréntesis: +
-  * **x > y** +
-  * **x >= y** +
-  * **x < y** +
-  * **x %%<=%% y** +
- +
-== comprobación atributos de fichero (Test Operators, Files) +
-  * **-d** fichero -> fichero existe y es un directorio +
-  * **-e** fichero -> fichero existe +
-  * **-f** fichero -> fichero existe y es un fichero regular (no un directorio o fichero especial) +
-  * **-s** fichero -> fichero existe y no está vacío +
-  * **-h** fichero -> fichero existe y es un symlink +
-    * **-L**? +
-  * **-b** fichero -> fichero existe y es un ''device block'' +
-  * **-c** fichero -> fichero existe y es un ''device character'' +
-  * **-p** fichero -> fichero -> fichero existe y es un ''pipe'' +
-  * **-S** fichero -> fichero existe y es un ''socket'' +
-  * **-t** fichero -> fichero existe y está asociado un terminal +
-  * **-N** fichero -> fichero existe y ha sido modificado desde su última lectura +
- +
-  * **-r** fichero -> tiene permiso de lectura +
-  * **-w** fichero -> tiene permiso de escritura +
-  * **-x** fichero -> tiene permiso de ejecución o de búsqueda si es un directorio +
-  * **-g** fichero -> tiene el SGID +
-  * **-u** fichero -> tiene el SUID +
-  * **-k** fichero -> tiene el "sticky bit" +
- +
-  * **-O** fichero -> eres el OWNER del fichero +
-  * **-G** fichero -> el GRUPO del fichero es el mismo que el tuyo +
- +
-  * fichero1 **-nt** fichero2 -> el fichero1 es más reciente que el fichero2 +
-  * fichero1 **-ot** fichero2 -> el fichero1 es más antiguio que el fichero2 +
-  * fichero1 **-ef** fichero2 -> el fichero1 y el fichero2 son HARD LINKS al mismo fichero +
-  *  +
-  * ''stat <fichero>'' -> información en disco del fichero +
-    * con -c %s -> tamaño del archivo +
-== concatenación de comparaciones / comprobaciones +
-  * && -> and +
-  * || -> OR +
-  * ! -> NOT +
- +
-/vía: [[http://www.linux-es.org/node/238]]+
  • linux/bash/estructurasdecontrol.1334077002.txt.gz
  • Darrera modificació: 10/04/2012 09:56
  • per mate