我使用 bash 的时间不超过 6 小时,现在我正在尝试创建一个菜单,让你可以做一些“有趣”的事情 :D.
我的问题是检查您是否处于 sudo 模式的 if 语句。 我想要有3个条件:
2)
if [ "$EUID" -ne 0 ]
then
echo "Checking if you are in sudo mode..."
echo "Error, please insert your password:"
sudo ls /root
if [ "$EUID" -ne 0 ]
then
echo -e "\nCould not authenticate the user."
echo -e "For security reasons the application will be closed."
exit
else
echo "==============================================================="
echo -e "ALL COPIES HAVE A DEFAULT ROUTE: /home/patryk/Desktop/a/"
echo "==============================================================="
echo -e "Enter the path of the folder to be copied: "
read origin
rsync -avzh $origin /home/patryk/Desktop/a/`date-I`
fi
else
echo "==============================================================="
echo -e "ALL COPIES HAVE A DEFAULT ROUTE: /home/patryk/Desktop/a/"
echo "==============================================================="
echo -e "Enter the path of the folder to be copied: "
read origin
rsync -avzh $origin /home/patryk/Desktop/a/`date -I`
fi;;
如果您启用了 sudo 凭据缓存(即,在成功 sudo 后,您不必在后续 sudo 中再次输入密码),您可以使用以下技巧:
执行
sudo true
并检查返回状态。如果输入了正确的密码,退出代码将始终为 0
。否则退出代码将会不同。
if [[ "$EUID" = 0 ]]; then
echo "(1) already root"
else
sudo -k # make sure to ask for password on next sudo
if sudo true; then
echo "(2) correct password"
else
echo "(3) wrong password"
exit 1
fi
fi
# Do your sudo stuff here. Password will not be asked again due to caching.
至少在我的系统上,root 的 UID 是 0,而不是 1,所以我调整了 if。
if pgrep -s 0 '^sudo$' > /dev/null ; then
echo 'Hello Sudo'
else
else 'Hello Chestnut'
fi
我认为你真正想做的是检查你的脚本是否以 root 身份运行。如果安全考虑不是超级重要,您可以将其放在脚本的开头:
if [ "$USER" != "root" ]
then
echo "Please run this as root or with sudo"
exit 2
fi
这将起作用,并且还涵盖使用 sudo 作为另一个用户(不是 root)运行命令的情况