Как включить правую кнопку трекпада в GNOME, Debian 10 Buster

Con sintaxis POSIX sh:

#! /bin/sh - 

printf 'Choose a decimal integer number between 1 and 100: '
IFS= read -r num

die() {
  printf >&2 '%s\n' "$@"
  exit 1
}
case $num in
  ("" | - | *[!0123456789-]* | ?*-*)
    die "$num is not a valid decimal integer number";;
  (*[123456789]??*)
    die "You chose a number outside the boundaries"
esac

if [ "$num" -lt 1 ] || [ "$num" -gt 100 ]; then  
  die "You chose a number outside the boundaries"
fi

echo "You chose $num"
  • el número es ambiguo. 0xAA, MMXVIII, ¾, 010, 1.4e+4, infinityson ​​todos números por alguna definición de número . Muchos POSIX -como shells, incluido bashsolo admiten enteros decimales en su [integrado (y decimal, octal, hexadecimal en sus expresiones aritméticas ). Es mejor calificar exactamente qué tipo de número desea. Aquí entero decimal por ejemplo.
  • El uso de cadenas arbitrarias en una expresión aritmética y en algunos shells en el comando [es una vulnerabilidad de inyección de comando . Entonces, primero querrá verificar que el número de entrada se vea como un número.
  • IFS= read -r linees la sintaxis para leer una línea de entrada(aunque aquí el$IFS-eliminación y manejo de continuación de línea de read numprobablemente estaría bien ).
  • Las expansiones de parámetros deben citarse en Bourne -como shells
  • Tuviste una falla en tu lógica. Usó o en lugar del operador y . Todos los números decimales son mayores que 1 o menores que 100.
  • Los operadores -oy-a[están en desuso porque crean expresiones de prueba que no se pueden interpretar de forma fiable. Mientras que aquí, no sería un problema una vez que nos hayamos asegurado de que los argumentos son números enteros decimales, es mejor evitarlos. Es mejor usar varias invocaciones [separadas por operadores de shell &&o ||.
  • Es mejor generar mensajes de error en stderr(>&2)y salir con un estado de salida que no sea -cero en caso de falla.
  • La mayoría de los shells utilizan los tipos de datos enteros nativos del compilador para sus operadores enteros. Para la mayoría de los shells en la mayoría de los sistemas, 2 64 +50 por ejemplo (18446744073709551666 )sería demasiado grande para esa representación interna. Dependiendo de la implementación del shell [, no se reconocería como un número (bash, dash,yash ), truncado a 19 dígitos con una advertencia (zsh ), aproximado como un número flotante (ksh93 ), o envuelto (considerado como lo mismo que 50)(mksh ). Entonces puede encontrar que [ 18446744073709551666 -gt 0 ]devuelve falso, o que [ 18446744073709551666 -le 100 ]devuelve verdadero. Por lo tanto, el *[123456789]??*verifica números de más de 3 dígitos.
  • tenga en cuenta que si el usuario ingresa un carácter NUL como parte de su entrada, el comportamiento variará entre shells.

Con bashespecíficamente, puede hacerlo un poco menos incómodo con:

#! /bin/bash - 

IFS= read -rp 'Choose a decimal integer number between 1 and 100: ' num

die() {
  printf >&2 '%s\n' "$@"
  exit 1
}
[[ $num =~ ^-?[0123456789]+$ ]] ||
  die "$num is not a valid decimal integer number"

[[ $num = *[123456789]??* ]] ||
  ((num < 1 || num > 100)) &&
  die "You chose a number outside the boundaries"

echo "You chose $num"

2
21.07.2019, 22:09
1 ответ
  1. Перейдите ко всем приложениям и запустите «Твики».
  2. В левой части окна выберите «Клавиатура и мышь».
  3. В основной части окна, внизу, вы увидите «Эмуляция щелчка мыши».
  4. Измените настройку на «Область».
2
27.01.2020, 22:08

Теги

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