Как сохранить ввод в bash? - PullRequest
       8

Как сохранить ввод в bash?

1 голос
/ 21 апреля 2019

Я пишу скрипт, я хотел бы иметь возможность добавить пользователя и назначить ему команду.

Так что в основном я хочу редактировать скрипт, пока он запущен. Возможно ли это в bash?

Я уже написал основы, это код

#!/bin/bash
#title:         menu.sh
#==============================================================================


#Menu options
#options[seq]="$varname"
options[0]="user1"
options[1]="user2"
options[2]="Guser3"
options[3]="user4"
options[4]="add user"


#Actions to take based on selection

function ACTIONS {
    if [[ ${choices[0]} ]]; then
        #Option 1 selected
        echo "user1 selected"
    fi
    if [[ ${choices[1]} ]]; then
        #Option 2 selected
        echo "user2 selected"
    fi
    if [[ ${choices[2]} ]]; then
        #Option 3 selected
        echo "user3 selected"
    fi
    if [[ ${choices[3]} ]]; then
        #Option 4 selected
        echo "user4 selected"
    fi
    if [[ ${choices[4]} ]]; then
        #Option 5 selected
        echo "new user added"

        read -p "Enter username name:  " sname
        read -p "Enter comand to save for this user:  " cname
        echo Adding  $sname to list with $cname comand

    fi
}

#Variables
ERROR=" "

#Clear screen for menu
clear

#Menu function
function MENU {
    echo "Menu Options"
    for NUM in ${!options[@]}; do
        echo "[""${choices[NUM]:- }""]" $(( NUM+1 ))") ${options[NUM]}"
    done
    echo "$ERROR"
}

#Menu loop
while MENU && read -e -p "Select the desired options using their number (again to uncheck, ENTER when done): " -n1 SELECTION && [[ -n "$SELECTION" ]]; do
    clear

    if [[ "$SELECTION" == *[[:digit:]]* && $SELECTION -ge 1 && $SELECTION -le ${#options[@]} ]]; then
        (( SELECTION-- ))
        if [[ "${choices[SELECTION]}" == "+" ]]; then
            choices[SELECTION]=""
        else
            choices[SELECTION]="+"
        fi
            ERROR=" "
    else
        ERROR="Invalid option: $SELECTION"
    fi
    set -e

done

ACTIONS

Вот код,

Действия на основе выбора

Действия на основе выбора

1 Ответ

1 голос
/ 16 мая 2019

Итак, как уже упоминалось, два файла. Один содержит userlist, а другой - ваш скрипт menu.sh

userlist:

user1
user2
Guser3
user4

Возьмите данные из списка пользователей и инициализируйте переменную count i. Я обернул это в функцию: get_users

get_users() {
i=0
while read -r user
do
 options[$i]="$user"
 ((i++))
done < userlist

options[$i]="add user"
}

Добавьте get_users к вашей функции МЕНЮ. Это будет читать список пользователей каждый раз, когда вызывается меню.

function MENU {
    get_users
    echo "Menu Options"
    for NUM in ${!options[@]}; do
        echo "[""${choices[NUM]:- }""]" $(( NUM+1 ))") ${options[NUM]}"
    done
    echo "$ERROR"
}

Наконец, убедитесь, что вы добавляете новых пользователей в файл userlist:

echo "$sname" >> userlist

Обратите внимание:

Вам потребуется добавить более систематический способ повторения вашего выбора в вашей функции ACTIONS. Поскольку вы явно указали, каким должен быть выбор, вариант 4 всегда будет возвращать нового пользователя, например.

Вы можете сделать это с чем-то вроде:

function ACTIONS {
    for (( c=0; c<=$(expr ${#options[@]} - 1); c++ ))
    do
    if [[ ${choices[$c]} ]]; then
        #Option 1 selected
        echo "user$(expr $c + 1) selected"
    fi
    done
    if [[ ${choices[$i]} ]]; then # $i is from the new get_users function - convenient way to get the last number from the array
        #Option 5 selected
        echo "new user added"

        read -p "Enter username name:  " sname
        read -p "Enter comand to save for this user:  " cname
        echo Adding  $sname to list with $cname comand
        echo "$sname" >> userlist
    fi
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...