bash коды выхода скрипта для диалогового меню - PullRequest
1 голос
/ 27 января 2020

У меня есть код

menu "Pasirinkite:" 0 0 0 \
iraso_ivedimas "iraso irasymas i kontaktu knygele" \
iraso_pdialog --title "Meniu" \
--menu "Pasirinkite:" 0 0 0 \
iraso_ivedimas "iraso irasymas i kontaktu knygele" \
iraso_paieska "iraso paieska pagal varda" \
iraso_perziura "viso iraso perziura" \
iraso_salinimas "iraso salinimas pagal eiles numeri" 2>f.txt

kint=$?
case $kint in
0)p=`cat f.txt`
        case $p in
        iraso_ivedimas)dialog --inputbox "Iveskite varda" 0 0 2>kvardas.txt
        vardp=`cat kvardas.txt`
        dialog --inputbox "Iveskite pavarde" 0 0 2>kpavarde.txt
        pavardp=`cat kpavarde.txt`
        dialog --inputbox "Iveskite telefono numeri" 0 0 2>ktel.txt
        telk=`cat ktel.txt`
    dialog --inputbox "Iveskite el. pasta" 0 0 2>kpastas.txt
        pastk=`cat kpastas.txt`
        echo "$vardp $pavardp $telk $pastk" >> kontaktinf.txt
        ;;
        iraso_paieska)dialog --inputbox "iveskite varda" 0 0 2>ieskvard.txt
        survard=`cat ieskvard.txt`
        if grep $survard kontaktinf.txt
        then
        grep $survard kontaktinf.txt >> svard.txt
        ttss=`cat svard.txt`
    dialog --msgbox "$ttss" 0 0
        else
        dialog --msgbox "nesurasta" 0 0
        fi
        ;;
        iraso_perziura)
        n=`wc -l< kontaktinf.txt`
        pps=`cat kontaktinf.txt`
        if [ -s kontaktinf.txt ]
        then
    dialog --inputbox "iveskite eiles numeri" 0 0 2>eilnr.txt
        eilesnr=`cat eilnr.txt`
        sed -n "$eilesnr"'p' kontaktinf.txt > pta.txt
        pts=`cat pta.txt`
        dialog --yesno "ar tikrai norite salinti $pts" 0 0
        kinn=$?
        case $kinn in
        0)sed -i "$eilesnr"'d' kontaktinf.txt;;
        1)exit;;
        255)exit;;
        esac
    else
        echo "sarasas tuscias"
        fi
esac;;
1)exit;;
255)exit;;
esac

rm -f kvardas.txt
rm -f kpavarde.txt
rm -f ktel.txt
rm -f kpastas.txt
rm -f eilnr.txt
rm -f svard.txt
rm -f pta.txt

Есть 4 пункта меню. iraso_ivedimas) iraso_paieska) iraso_perziura) iraso_salinimas). Мой вопрос, как я могу дать им 1) выход ;; (кнопка отмены) 255) выход ;; (es c), каждому из них, потому что, когда я пытаюсь это сделать, он просто доходит до каждого пункта меню до конца, если я нажимаю es c или отменяю

Ответы [ 2 ]

1 голос
/ 27 января 2020

Использовать ненулевой код выхода диалога как пользователь прервать .

Маленький образец

#!/bin/bash

die() {
    echo >&2 "$0 ERROR: $@"
    exit 1
}

userExit() {
    die "User abort."
}

vardp=$(
    dialog --inputbox "Iveskite varda" 0 0 2>&1 >/dev/tty
    ) || userExit
pavardp=$(dialog --inputbox "Iveskite pavarde" 0 0 2>&1 >/dev/tty) || userExit
telk=$(dialog --inputbox "Iveskite telefono numeri" 0 0 2>&1 >/dev/tty) || userExit
pastk=$(dialog --inputbox "Iveskite el. pasta" 0 0 2>&1 >/dev/tty) || userExit

#  And so on...

printf "%-8s:%s\n" vardp "$vardp" pavardp "$pavardp" telk "$telk" pastk "$pastk" 
1 голос
/ 27 января 2020

Пожалуйста, посмотрите на этот пример диалогов из моего проекта sshto

#------------------------{ First dialog - Select host }--------------------------------------------
first_dialog () {
    target=$(dialog --extra-button --extra-label "RUN COMMAND"         \
                    --ok-label "CONNECT" --cancel-label "EXIT" --colors \
                    --help-button --help-label  "CONTENTS" --output-fd 1 \
                    --menu "Select host to connect to. $USERNOTE" 0 0 0 "${list[@]}")
    case $target:$? in
       -*\ *\ *-:*) first_dialog ;;
               *:0) go_to_target  ; first_dialog;;
               *:2) contents_menu;;
               *:3) second_dialog;;
               *:*) bye;;
    esac
}

#------------------------{ Second dialog - Select command }----------------------------------------
second_dialog () {
    cmdlist_renew
    command=$(dialog --ok-label "RUN" --cancel-label "BACK" --output-fd 1 \
                     --extra-button    --extra-label "CONNECT" --colors    \
                     --menu "Select command to run on host \Z4$target\Z0. $USERNOTE" 0 0 0 "${cmdlist[@]}")
    case $command:$? in
           Sshkey:0) add_sshkey  ;;
            Alias:0) add_aliases ;;
             Info:0) system_info ;;
             Copy:0) copy_files  ;;
         Username:0) username    ;;
           Upload:0) upload      ;;
             Dest:0) downpath    ;;
         Download:0) dlst; down  ;;
            Local:0) local_port  ;;
           Remote:0) remote_port ;;
           Tunnel:0) portunneling;;
                *:3) go_to_target;;
                *:0) run_command ;;
                *:*) first_dialog;;
    esac;            second_dialog
}

Диалоги, заключенные в функции (first_dialog, second_dialog) и запускаются один за другим и наоборот.

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