bash 脚本询问 root 密码

bash 脚本询问 root 密码

我想有一个脚本可以送给朋友,它可以添加存储库并下载文件,无需使用命令即可安装它们,因为他们不是命令行爱好者,也不想学习。我需要知道如何让脚本提示他们输入 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行尝试解析选项,如果存在无效参数,则打印用法并退出。

相关内容