Ошибки сценария оболочки из-за не заданной переменной PATH

Версия Ubuntu: Ubuntu 20.04.2.0 LTS

Оболочка: bash

У меня есть сценарий оболочки, который будет выполняться root из задания cron root. Но даже когда я выполняю сценарий вручную, он выдает ошибку, говоря следующее

# ./fix_wifi.sh
./fix_wifi.sh: line 17:  : command not found
./fix_wifi.sh: line 18:  : command not found

Строки 17 и 18 - это строки с echo и перезапуском сетевого менеджера службы

. Предоставление абсолютных имен путей (/ usr / bin, / usr / sbin) для этих двоичных файлов в скрипт не помог. Итак, я хотел бы указать файлы запуска в начале сценария, чтобы сценарий знал о переменной PATH (и других соответствующих переменных)

Но для пользователя root в Ubuntu, который файл запуска должен ли я исходить? Я вижу файлы .bashrc и .profile в домашнем каталоге root / root .

#!/bin/bash

# Written by xyz
# Must be run as root

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root"
   exit 1
fi

ConnectionStatus=$(nmcli networking connectivity)

#echo "$ConnectionStatus"

if [ "$ConnectionStatus" != "full" ]
then
    /usr/bin/echo "Wifi found to be disconnected at " `date` " hence restarting the network manager..." | /usr/bin/tee -a /home/john/scripts/wifi_diagnostics.log
    /usr/sbin/service network-manager restart
fi

Примечание: Я забыл указать абсолютный путь для команды date в строке 17. Но здесь это не очень актуально, поскольку строка 18, содержащая service network-manager restart по-прежнему с ошибкой, несмотря на указание полного пути (/ usr / sbin)

0
задан 11 June 2021 в 12:30

1 ответ

Как предположил Steeldriver, ошибка возникла из-за «неразрывного пробела Unicode» в строках 17 и 18 в предложении IF (и строках 7,8, которые проверяют, выполняется пользователем root). Сделал отступ, чтобы скрипт был более читабельным. Никогда не думал, что это вызовет у меня головную боль. Но урок усвоен.

снимок экрана с выводом программы shellcheck

Я думаю, что проблема связана с символами возврата каретки Windows.

Я удалил эти символы и ввел пробел в редакторе vim, и проблема исчезла.

Спасибо всем.

0
ответ дан 28 July 2021 в 11:30

Другие вопросы по тегам:

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