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 行echo
是service 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用户执行)。我缩进以使脚本更具可读性。我从没想过这会让我头疼。但是,我吸取了教训。
我认为是 Windows 回车符导致了此问题。
我删除了这些字符并从 vim 编辑器中输入空格,问题就解决了。
感谢大家。