Что такое: ошибка деления на 0 (токен ошибки - "etc / shadow")? - PullRequest
2 голосов
/ 17 июня 2020

Я новичок в написании сценариев Bash и при запуске кода получаю сообщение об ошибке:

main. sh: строка 7: ((: -w / etc / shadow: деление на 0 (токен ошибки - "etc / shadow")

Ниже приведен код, который я написал в main. sh:

#!/usr/bin/env bash

if [ -e /etc/shadow ]
then
    echo "Shadow passwords are enabled."

    if (( -w /etc/shadow ))
    then
        echo "You have permissions to edit /etc/shadow"
    else
        echo "You do NOT have permissions to edit /etc/shadow"
    fi
else
    echo "Shadow passwords are not enabled."
fi

результат после запуска кода также дал:

теневые пароли включены.

У вас НЕТ прав на редактирование / etc / shadow

Это было перед сообщением об ошибке. Есть ли у кого-нибудь предложения, как решить эту проблему и что означает сообщение об ошибке? Спасибо!

1 Ответ

3 голосов
/ 17 июня 2020

Вы должны использовать [[ ... ]] (предпочтительно, bash -только) или [ ... ] (может вызвать проблемы, POSIX-совместимый) вместо (( ... )): они подходят для сравнения текста, а (( ... )) является арифметическим c контекст и принимает только математические операции. Ошибка возникает из-за того, что он пытается использовать / s в пути для деления.

Эта ошибка считается ложной для if, что заставляет вас запустить блок else.

if [[ -w /etc/shadow ]]
then
# ...

Хорошим справочником по использованию if в bash является Bash Руководство для начинающих .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...