我想有一个脚本可以送给朋友,它可以添加存储库并下载文件,无需使用命令即可安装它们,因为他们不是命令行爱好者,也不想学习。我需要知道如何让脚本提示他们输入 root 密码以允许他们执行其中一些功能。我该怎么做?请不要恨他们。让他们开始使用 Linux 是一大步,我很高兴他们正在尝试一些新的东西……而且是在开源世界。
答案1
sudo
只需在 bash 脚本中的命令前面使用该单词即可。执行文件时,选择“在终端中打开”,系统会要求您输入密码。
例如,如果您使用apt-get
命令,则可以像这样使用
#!/bin/sh
sudo apt-get update
sudo apt-get upgrade
.....
.....
如果需要使其可执行,当你双击时会出现这样的提示
您需要点击在终端中打开按钮并在终端中输入密码
更新
作为卡西克·T 评论,您还可以在命令前使用gksu
或单词。因此,该文件可以是gksudo
gksu apt-get update
gksudo apt-get install <some-package>
双击脚本将询问密码,并在您提供密码后运行命令。
答案2
我已经多次这样做了,这是我的脚本的模板,需要以 root 身份运行并提示用户输入 root 密码。
#!/usr/bin/env bash
cmdname=$(basename $)
function usage() {
echo
echo "$cmdname [-l|--location] /location/to/package [-p|--no-provisioning]"
echo " -l | --location Set the location to be used to find the package install"
echo " -p | --no-provision If set, will not load the example provisioning"
exit 1
}
if [ "$(whoami)" != "root" ]; then
echo "You must be root to do this"
su -c "$0 $*"
exit
fi
LOCATION="/tmp/TESTPKG$USER/"
PROVISION=1
OPTIONS=$(getopt -o l:p --long location:,no-provisioning -n "$cmdname" -- $*) || usage
eval set -- $OPTIONS
while true ; do
case $1 in
-l|--location)
LOCATION=$2
shift 2;;
-p|--no-provisioning)
PROVISION=0
shift 1;;
--) shift ; break ;;
*)
echo "Invalid argument $1"
exit 1;;
esac
done
以上是针对特定用例的,但我认为它突出了两个很好的功能,使用getopt
和请求 root 权限以及运行命令,同时传递参数。
因此,if block
检查用户当前是否为 root,如果不是,则运行被调用的脚本 ( $0
) 并将任何参数传递给该脚本 ( $*
)。然后它退出,以免尝试以非 root 用户身份运行该脚本。
该getopt
行尝试解析选项,如果存在无效参数,则打印用法并退出。