在开发和部署 Shell 脚本时,经常需要控制脚本的执行权限,确保它只在特定用户(如 root
)下运行,尤其是那些涉及系统级改动的操作。本文将详细解析一段简单的 Shell 脚本代码,用于检测运行脚本的用户,并限制非指定用户的执行权限。
# 设置期望运行该脚本的用户
expect_user=root
check_user=`whoami`
if [ "$check_user" == "$expect_user" ]
then
echo "You are $check_user user"
else
echo "You are $check_user user"
echo "Please run with $expect_user"
exit 0
fi
# 在下面添加其他命令
...
1. 设置期望用户
expect_user=root
该行代码设置了脚本期望的运行用户,这里设置为 root
。如果您希望限制其他用户,比如 admin
,可以将 root
替换成目标用户名。
2. 检测当前用户
check_user=`whoami`
这里使用了反引号 `
来执行 whoami
命令,并将其返回值赋给 check_user
变量。whoami
命令返回当前运行脚本的用户的用户名。
3. 检查用户是否匹配
if [ "$check_user" == "$expect_user" ]
then
echo "You are $check_user user"
else
echo "You are $check_user user"
echo "Please run with $expect_user"
exit 0
fi
这部分代码通过条件语句 if
判断当前用户(check_user
)是否等于期望用户(expect_user
):
- 如果用户匹配,脚本继续执行并输出当前用户。
- 如果用户不匹配,脚本会提示当前用户不是期望的运行用户,并在输出信息后使用
exit 0
退出脚本。这样可以防止非特定用户误操作而执行该脚本。
4. 添加其他命令
# 在下面添加其他命令
在确认了正确的运行用户后,可以在脚本末尾添加其他操作命令,比如安装软件包、配置系统参数等。
该脚本的实际应用场景
- 系统配置脚本:系统配置或安装脚本常需要以
root
用户执行,以便获得权限执行关键操作。 - 权限管理:在多人共享使用的服务器上,可以防止低权限用户意外修改或破坏系统配置。
- 自动化运维:在自动化任务中,脚本能够自动检测权限,从而提升执行的安全性和可靠性。
脚本运行示例
假设我们将上述脚本保存为 check_user.sh
并赋予执行权限:
chmod +x check_user.sh
以 root
用户执行:
$ sudo ./check_user.sh
You are root user
如果用户为 root
,则脚本继续执行。
以非 root
用户执行:
$ ./check_user.sh
You are username user
Please run with root
如果是普通用户,则会收到提示并退出脚本。
总结
通过这段脚本,管理员可以确保脚本只在合适的权限下运行,避免权限不足带来的执行错误。同时,这种简单的用户检测逻辑适用于各种不同的自动化脚本开发场景。