Esto siempre será cierto para los números, ya que la condición es o:
if [ $number -gt 9 -o $number -lt 100 ]
Ese primer scriptlet reconoce Ten
y Eleven
e imprime Thirteen
para todos los demás valores.
Esto siempre será falso, ya que la condición es y:
if [ $number -lt 0 -a $number -gt 999 ]
No estoy seguro de por qué está construyendo el resto con case
y if
s. Si solo desea asignar los números a las palabras, uno a la vez, un solo caso sería suficiente:
case "$number" in
0) echo Zero ;;
1) echo One ;;
#...
9) echo Nine ;;
10) echo Ten ;;
11) echo Eleven ;;
esac
Eso no reconocerá números con ceros a la izquierda (pero todas las operaciones aritméticas los tomarían como base -8 números de todos modos, a menos que tenga cuidado de forzar la base manualmente cada vez ).
Si desea ir más allá de veinte, hacer coincidir uno a la vez no será muy bueno, y no puede hacer coincidir rangos de números arbitrarios con case
. En case
, 10|99
coincidirá exactamente con esas dos cadenas (, no 12
o 123
), y [0-9]
coincidirá con dígitos individuales, por ejemplo,. [0-100]
es lo mismo que [01]
. Así que un if
podría ser mejor:
if [[ $number -ge 20 -a $number -lt 30 ]]; then
echo Twenty-something
elif [[ $number -ge 20 -a $number -lt 30 ]]; then
echo Thirty-something
fi
Debería usar [[.. -a.. ]]
o [.. ] && [.. ]
aquí, como [.. -a.. ]
como problemas con algunos valores (como"!"
). Si hace usa [.. ]
, cita las variables, es decir, [ "$number" -lt 123 ]
en lugar de [ $number -lt 123 ]
.
Sin embargo, esto debería funcionar, pero solo porque puede hacer coincidir una posición de dígito particular:
case $number in
2?) echo Twenty-something ;;
3?) echo Thirty-something ;;
esac
Si realmente desea dar nombres a todos los números del cero al mil, deberá dividir el problema en partes (unidades, decenas, cómo combinarlas )y preferiblemente usar funciones para eso.
Выйдите из системы как этот пользователь, продолжайте работу как root. Создайте указанный дополнительный раздел с помощью fdisk или parted.Создайте временную точку монтирования для этого раздела, скажем, /mnt/tempuser. Смонтируйте его в эту точку монтирования. Rsync /home/$USER в /mnt/tempuser/, а затем mv /home/$USER /home/originaluser. Mkdir /home/$USER и указать его на указанный $USER
Теперь попробуйте войти как $USER. su -$USER, например, из той же корневой консоли. Должно быть достаточно, чтобы проверить, сработало ли это или что пошло не так. Запасной вариант будет
umount /home/$USER ; mv /home/$USER /home/faileduser ; mv /home/originaluser /home/$USER
Затем, если с таким входом все в порядке, добавьте его в /etc/fstab, чтобы он монтировался при загрузке, укажите здесь точку монтирования как /home/$USER