我认为它应该有所帮助(作为“bash”指令)。
(代码中#之后的所有内容都是我的cmets)
将代码分为两部分 - 'root'(超级用户)和 $USER(其他用户)。
检查它是否不是“根”;然后做点什么……
if [ $(whoami) != 'root' ]; then
# do some $USER instructions...
$(...) - 运行命令的包装器
whoami - 打印有效用户 ID
ELSE(如果它是“root”)执行一些超级用户指令...
else
# do some 'root' instructions
fi # end of 'IF' condition
在 $USER ($(whoami) != 'root') 部分中,如果需要,使用“root”权限运行此脚本。您可以传递一个参数(例如“DO_CHOWN”)作为对特定操作的调用:
sudo -s "$0" DO_CHOWN
sudo - 以超级用户身份运行命令(默认)
-s - 将保存当前脚本路径
$0 - 当前脚本,带有路径
DO_CHOWN - 任何参数(名称无关紧要)我们通过哪个来获取
使用sudo后,系统会提示您输入密码才能访问。
如果您不想不断输入密码。
你可以使用这样的东西:
echo 'yourpassword' | sudo -Ss "$0" DO_CHOWN
echo - 输出数据
| -(管道)将输出重定向,在这种情况下,从echo 到sudo
-S - 会将“echo”的输出写入提示中
在 'root' (else) 部分,我们需要获取我们传递的参数 ('DO_CHOWN')。
类似的东西:
if [[ $@ =~ 'DO_CHOWN' ]]; then
# do chown instructions...
exit
fi
$@ - 传递给脚本的所有参数
=~ - 查找右侧指定值的匹配项
@987654324 @- 终止进程
最终代码:
# IF not 'root'
if [ $(whoami) != 'root' ]; then
echo 'User:' $(whoami) # show current username
echo 'Path:' $(pwd) # show current directory of the script
sudo -s "$0" DO_CHOWN # send 'DO_CHOWN' argument as a call for a specific action
# THEN enter your password, OR:
# echo 'yourpassword' | sudo -Ss "$0" DO_CHOWN # to not enter the password manually
echo "Continue as $(whoami)..."
# IF 'root'
else
echo 'User:' $(whoami)
echo 'Path:' $(pwd)
# IF get the 'DO_CHOWN' argument
if [[ $@ =~ 'DO_CHOWN' ]]; then
echo 'do chown instructions...'
exit
fi
fi
控制台输出:
User: user_name
Path: /home/user_name
[sudo] password for user_name:
User: root
Path: /home/user_name
do chown instructions...
Continue as user_name...
喜欢。 订阅。评论??