提示输入值,直到按 ENTER 键并输入空值

Rey*_*rPM 2 linux centos script bash

我正在使用 bash 脚本来自动化一些任务。这就是我到目前为止所做的:

#!/usr/bin/env bash

PS3='Please enter your choice: '
options=("Create new group" "Add users to group" "Change directory ownership" "Change directory permissions" "Quit")
select opt in "${options[@]}"
do
    case $opt in
        "Create new group")
            read -e -p "Enter the group name: " -i "www-pub" groupname
            groupadd groupname
            echo "You have added a new group: " groupname
            ;;
        "Add users to group")
            ## Here 
            ;;
        "Change directory ownership")
            read -e -p "Enter the group name: " -i "www-pub" "Enter the directory: " -i "/var/www/html" groupname directory
            chown -R root:groupname directory
            echo "You have changed the ownership for: " directory " to root:" groupname
            ;;
        "Change directory permissions")
            ## Actions for change directory permissions goes here
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

现在,在第 2 步中Add users to group,我想将多个用户添加到给定组。所以:

  • 我可以使用groupname第 1 步中的“先前询问”还是应该使用“始终” groupname
  • 我需要通过运行以下命令请求多个用户将其添加到组中:usermod -a -G groupname username,我如何请求他们直到空值?

例如:

Add users to group
Enter the group name: www-pub
Enter user: user1
user1 added to www-pub
Enter user: user2
user2 added to www-pub
Enter user: (none hit ENTER without values)
Return to the main menu
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些帮助来构建这段代码吗?

gle*_*man 5

这是一种方法:

    "Add users to group")
        read -e -p "Enter the group name: " -i "www-pub" groupname
        loop=true          # "true" is a command
        while $loop; do    # the "$loop" command is executed
            read -p "enter username: " username
            if [[ -z $username ]]; then
                loop=false # this command returns a fail status, and
                           # will break the while loop
            else
                # add user to group
            fi
        done
        ;;
Run Code Online (Sandbox Code Playgroud)

更简洁的方式:

        while true; do
            read -p "enter username: " username
            [[ -z $username ]] && break
            # add user
        done
Run Code Online (Sandbox Code Playgroud)