Отдельный раздел для пользовательского каталога /home?

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 Teny Elevene imprime Thirteenpara 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 casey ifs. 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|99coincidirá exactamente con esas dos cadenas (, no 12o 123), y [0-9]coincidirá con dígitos individuales, por ejemplo,. [0-100]es lo mismo que [01]. Así que un ifpodrí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.

0
03.04.2019, 00:57
1 ответ

Выйдите из системы как этот пользователь, продолжайте работу как 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

1
28.04.2021, 23:35

Теги

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