每次挂起后,当我唤醒笔记本电脑时,它都不会连接到任何网络,必须重新启动 NetworkManager。所以,出于懒惰,我写了这个脚本一切按预期顺利进行。
我使用了一个if
块来检查脚本是否始终由 root 用户执行:
if [ $(id -u) -ne 0 ]
then
echo "ERROR : Root Priveleges Required"
exit NOT_ROOT
else
netrestart
fi
我授予此脚本此权限(执行此命令时为 root 用户):
chmod u+x netrestart
现在,当我以非 root 用户身份运行此脚本时,它会显示以下内容
bash: ./netrestart: Permission denied
然后,运行脚本sudo
运行良好
sudo ./netrestart
我认为这使得脚本中的根检查变得毫无用处。现在我有两个问题:
我是否应该删除那部分代码或者仍然在脚本中使用?
有什么更好的方法以及怎样做?
- 检查脚本中的用户是否为 root 并授予所有人执行权限,即
chmod 755 netrestart
- 在脚本本身上设置正确的所需权限,并且不包括检查用户是否是脚本内的 root 权限,即
chmod 711 netrestart
- 检查脚本中的用户是否为 root 并授予所有人执行权限,即
答案1
我认为你的脚本可以浓缩为:
#!/bin/bash
NOT_ROOT=2
sudo service network-manager restart || exit $NOT_ROOT
if service network-manager status
then
echo "Successfully Restarted NetworkManager"
else
echo "ERROR : Failed to work"
exit 1
fi
sudo
将检查您的 root 访问权限并在必要时提示。此service ... status
检查将更可靠地告诉您 NetworkManager 是否正常启动。
您可以向所有人授予此脚本的执行权限,并将sudo
负责权限检查。