由于未设置 PATH 变量,Shell 脚本出现错误

由于未设置 PATH 变量,Shell 脚本出现错误

Ubuntu 版本:Ubuntu 20.04.2.0 LTS

外壳:bash

我有一个 shell 脚本,将由来自 root 的 cron 作业。但是,即使我手动执行脚本,它也会出错,提示以下内容

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

第 17 行和第 18 行echoservice network-manager restart

在脚本中为这些二进制文件提供绝对路径名 (/usr/bin、/usr/sbin) 没有帮助。因此,我想在脚本开头获取启动文件,以便脚本能够知道 PATH 变量(和其他相关变量)

但是,对于 Ubuntu 中的 root 用户,我应该获取哪个启动文件?我可以在 root 的主目录中看到.bashrc和文件。.profile/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

注意:我确实忘记在第 17 行提供date命令的绝对路径。但是,这与此不太相关,因为第 18 行service network-manager restart尽管提供了完整路径(/usr/sbin),但仍然出错

答案1

正如steeldriver所言,错误是由于IF子句中第17行和第18行的“unicode不间断空格”造成的(第7行和第8行检查脚本是否由root用户执行)。我缩进以使脚本更具可读性。我从没想过这会让我头疼。但是,我吸取了教训。

shellcheck 输出的屏幕截图

我认为是 Windows 回车符导致了此问题。

我删除了这些字符并从 vim 编辑器中输入空格,问题就解决了。

感谢大家。

相关内容