tutorial sirve scripts script que programas pasar parametros para operaciones manejo ejemplos cadenas aritmeticas bash conditional-operator

sirve - Bash si[falso]; devuelve verdadero



pasar parametros shell script (4)

Una cartilla booleana rápida para Bash

La instrucción if toma un comando como argumento (como do && , || , etc.). El código de resultado entero del comando se interpreta como booleano (0 / null = verdadero, 1 / else = falso).

La instrucción de test toma operadores y operandos como argumentos y devuelve un código de resultado en el mismo formato que if . Un alias de la declaración de test es [ , que a menudo se usa con if para realizar comparaciones más complejas.

Los enunciados true y false no hacen nada y devuelven un código de resultado (0 y 1, respectivamente). Entonces pueden usarse como literales booleanos en Bash. Pero si coloca las declaraciones en un lugar donde se interpretan como cadenas, se encontrará con problemas. En tu caso:

if [ foo ]; then ... # "if the string ''foo'' is non-empty, return true" if foo; then ... # "if the command foo succeeds, return true"

Asi que:

if [ true ] ; then echo "This text will always appear." ; fi; if [ false ] ; then echo "This text will always appear." ; fi; if true ; then echo "This text will always appear." ; fi; if false ; then echo "This text will never appear." ; fi;

Esto es similar a hacer algo como echo ''$foo'' vs. echo "$foo" .

Cuando se utiliza la declaración de test , el resultado depende de los operadores utilizados.

if [ "$foo" = "$bar" ] # true if the string values of $foo and $bar are equal if [ "$foo" -eq "$bar" ] # true if the integer values of $foo and $bar are equal if [ -f "$foo" ] # true if $foo is a file that exists (by path) if [ "$foo" ] # true if $foo evaluates to a non-empty string if foo # true if foo, as a command/subroutine, # evaluates to true/success (returns 0 or null)

En resumen , si solo quiere probar algo como aprobado / no aprobado (también conocido como "verdadero" / "falso"), pase un comando a su instrucción if o && etc., sin corchetes. Para comparaciones complejas, utilice corchetes con los operadores adecuados.

Y sí, soy consciente de que no existe el tipo de booleano nativo en Bash, y que if y [ y true son técnicamente "comandos" y no "enunciados"; esta es solo una explicación básica y funcional.

He estado aprendiendo bash esta semana y me encontré con un problema.

#!/bin/sh if [ false ]; then echo "True" else echo "False" fi

Esto siempre arrojará True, aunque la condición parezca indicar lo contrario. Si elimino los corchetes [] entonces funciona, pero no entiendo por qué.


Descubrí que puedo hacer algo de lógica básica ejecutando algo como:

A=true B=true if ($A && $B); then C=true else C=false fi echo $C


El uso de verdadero / falso elimina el desorden del soporte ...

#! /bin/bash # true_or_false.bash [ "$(basename $0)" == "bash" ] && sourced=true || sourced=false $sourced && echo "SOURCED" $sourced || echo "CALLED" # Just an alternate way: ! $sourced && echo "CALLED " || echo "SOURCED" $sourced && return || exit


Está ejecutando el comando [ (aka test ) con el argumento "falso", sin ejecutar el comando false . Como "falso" es una cadena no vacía, el comando de test siempre tiene éxito. Para ejecutar realmente el comando, suelte el [ comando.

if false; then echo "True" else echo "False" fi