在 Bash 中检查 sudo(带有 if 语句的脚本)
Checking sudo in Bash (script with if statements)
我使用 bash 的时间不超过 6 个小时,现在我正在尝试创建一个菜单,让您可以做一些 "fun" 的事情 :D.
我的问题是 if 语句 检查您是否处于 sudo 模式。
我要有3个条件:
- 如果我用sudo模式执行脚本,我就能输入要复制的文件夹路径
- 如果我在没有 sudo 模式的情况下执行脚本,它会要求我输入密码,如果我这样做正确,脚本会显示 echo 和 read op 允许我写入要复制的文件夹的路径。
- 与第2点相同,但如果认证失败,应用程序将自动关闭。
创建副本
2)
if [ "$EUID" -ne 1 ]
then
echo "Checking if you are in sudo mode..."
echo "Error, please insert your password:"
sudo ls /root
if [ "$EUID" -ne 1 ]
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
并检查return状态。如果输入了正确的密码,退出代码将始终为 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。
我使用 bash 的时间不超过 6 个小时,现在我正在尝试创建一个菜单,让您可以做一些 "fun" 的事情 :D.
我的问题是 if 语句 检查您是否处于 sudo 模式。 我要有3个条件:
- 如果我用sudo模式执行脚本,我就能输入要复制的文件夹路径
- 如果我在没有 sudo 模式的情况下执行脚本,它会要求我输入密码,如果我这样做正确,脚本会显示 echo 和 read op 允许我写入要复制的文件夹的路径。
- 与第2点相同,但如果认证失败,应用程序将自动关闭。
创建副本
2)
if [ "$EUID" -ne 1 ]
then
echo "Checking if you are in sudo mode..."
echo "Error, please insert your password:"
sudo ls /root
if [ "$EUID" -ne 1 ]
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
并检查return状态。如果输入了正确的密码,退出代码将始终为 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。