Как записать выражение oop case в хвост - PullRequest
0 голосов
/ 28 мая 2020
#!/bin/bash
function advancedMenu() {
    ADVSEL=$(whiptail --title "Advanced Menu" --fb --menu "Choose an option" 15 60 4 \
    "1" "Delete group" \
    "2" "Create login name" \
    "3" "Exit" 3>&1 1>&2 2>&3)
    case "$ADVSEL" in
    1)
    echo "Option 1"
    whiptail --title "Option 1" --msgbox "You chose group deleting. Exit status $?" 8 45
    bash ./script3;;
    2)
    echo "Option 2"
    whiptail --title "Option 1" --msgbox "You chose login name creating. Exit status $?" 8 45
    bash ./script;;
    3)
    echo "Option 3"
    whiptail --title "Option 1" --msgbox "You chose exit. Exit status $?" 8 45
    ;;
    esac
}

advancedMenu

Я не знаю, oop мой оператор case. У меня удобный интерфейс. Кто-то выбирает 1 \ 2 или выход. 1 и 2 запускают другие сценарии. Поэтому, когда щелкнули 1 и сценарий завершился, мне нужно вернуть главное меню, пока не будет выбран вариант 3. Буду признателен за помощь!


#!/bin/bash
export NEWT_COLORS='
window=white,blue
border=white,green
textbox=white,green
button=black,white
'

{
    for ((i = 0 ; i <= 100 ; i += 1)); do
    sleep 1
    echo $i
    done

} | whiptail --gauge "Wait..." 6 60 0

touch 35_2.csv
while read line; do
IFS=","
set -- $line
group_name=$1
student_name=$2
student_name=`echo $student_name | tr -d '\r\n' `
login_name=`echo $student_name | sed 's/[b\`]//g;'`
login_name=`echo $login_name | sed 'y/абвгдеєзиіїйклмнопрстуфхь/abvgdeeziiijklmnoprstufh_/'`
login_name=`echo $login_name | sed 's/ /_/g; s/С†/ts/g; s/Р¶/zh/g; s/С‡/ch/g; s/С€/sh/g; s/С‰/sh/g; s/СЋ/yu/g; s/СЏ/ya/;'`
echo "$group_name, $student_name, $login_name" >> 35_2.csv
done < 35_2.csv

Не смотрите на неправильную кодировку. Ваше решение казалось правильным. Выполняется первый сценарий, затем возвращается меню. Однако, когда я запускаю второй сценарий, меню не возвращается go. Прикрепил код 2-го скрипта.

1 Ответ

1 голос
/ 28 мая 2020

Просто поместите while l oop вокруг него.

#!/bin/bash
function advancedMenu() {
    while :; do
        ADVSEL=$(whiptail --title "Advanced Menu" --fb --menu "Choose an option" 15 60 4 \

            "1" "Delete group" \
            "2" "Create login name" \
            "3" "Exit" 3>&1 1>&2 2>&3)
        case "$ADVSEL" in
        1)
            echo "Option 1"
            whiptail --title "Option 1" --msgbox "You chose group deleting. Exit status $?" 8 45
            bash ./script3;;
        2)
            echo "Option 2"
            whiptail --title "Option 1" --msgbox "You chose login name creating. Exit status $?" 8 45
            bash ./script;;
        3)
            echo "Option 3"
            whiptail --title "Option 1" --msgbox "You chose exit. Exit status $?" 8 45
            return
            ;;
        esac
    done
}
advancedMenu

Я не уверен, что вы ожидаете от Exit status $?. $? - это статус выхода оператора echo в предыдущей строке, поэтому почти всегда будет просто 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...