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