Как написать оператор if с несколькими условиями

На свежей установке Ubuntu 14.04 на DigitalOcean я смог решить эту проблему, просто выполнив

sudo apt-get install python-dev

и затем повторно выполнив команду pip install внутри python venv

pip install Pillow
0
26.02.2018, 02:04
3 ответа

Cambie la línea ifa:

if [ "$filename" != even ] && [ "$filename" != odd ]

En el shell bash, todo el script,(es decir, de fora doneinclusive ), se puede simplificar a:

GLOBIGNORE=even:odd ; printf "%s\n" *

Otro bashmétodo:

shopt -s extglob  # only needs to be done once, if not set already.
printf "%s\n" !(odd|even)
5
28.01.2020, 02:18

O un par de corchetes con -a

for filename in *
do
     if [ "$filename" != even -a "$filename" != "odd" ]
     then
         echo "$filename"
     fi
done

o

for filename in * 
do 
    case "$filename" in  
        (even|odd) ;; 
            *) echo "$filename" ;; 
    esac
done
0
28.01.2020, 02:18

El operador de comparación -nees un operador aritmético , es decir, compara solo números enteros:

i=7

if [ "$i" -ne 6 ] && [ "$i" -ne 8 ]; then
   echo 'i is neither 6 nor 8'
fi

Para comparar cadenas para la desigualdad, use!=:

if [ "$filename" != 'even' ] && [ "$filename" != 'odd' ]; then
    printf '%s\n' "$filename"
fi

O, usandocase:

case "$filename" in
    even|odd) ;;
           *) printf '%s\n' "$filename"
esac

También tenga en cuenta que *coincidirá con cualquier nombre en el directorio actual, no solo con los nombres de los archivos normales. Para asegurarse de que solo procesa archivos regulares en su ciclo, use

for name in *; do
    test -f "$name" || continue

    # other code here using "$name"
done

test -f "$name"puede ser reemplazado por

if [ ! -f "$name" ]; then
    continue
fi

o simplemente

[ ! -f "$name" ] && continue

o

[ -f "$name" ] || continue

La declaración continuesalta a la siguiente iteración del ciclo.

8
28.01.2020, 02:18

Теги

Похожие вопросы