Allereerst, ik ben redelijk beginner in scripten/programmeren
Ik ben nu een script aan het maken met een aantal ja/nee vragen. Ik wil de userinput valideren. Nu kan dat op verschillende manieren die ik met zoeken heb gevonden:
• while $value != yes || no
do
vraag
done
Nadeel: geen user feedback bij foutieve input. Ook weer alle code bij elke vraag.
• na de vraag:
case $value in
yes || no ) echo 'succes'
*) echo 'fail'
Nadeel: wel user feedback maar stelt de vraag niet opnieuw
• Nog een oaar zeer ingewikkelde validatiemethodes gevonden die ik niet echt relevant vind voor mijn code.
• Nu heb ik een functie voor yesno vragen die valideert. De functie heeft een $input en $result. Het ziet er zo uit:
Ik heb hiermee bij meerdere vragen checken gereduceerd naar 1 keer code in de functie, er is een loop en user feedback. Toch voelt de validatie nog omslachtig aan met redelijk wat code bij elke vraag. Kan dit efficienter?
Edit: en terwijl ik hier ijsbeer tijdens het tandenpoetsen bedenk ik zelf alweer iets
Scheelt per vraag 4 regels code
• while $value != yes || no
do
vraag
done
Nadeel: geen user feedback bij foutieve input. Ook weer alle code bij elke vraag.
• na de vraag:
case $value in
yes || no ) echo 'succes'
*) echo 'fail'
Nadeel: wel user feedback maar stelt de vraag niet opnieuw
• Nog een oaar zeer ingewikkelde validatiemethodes gevonden die ik niet echt relevant vind voor mijn code.
• Nu heb ik een functie voor yesno vragen die valideert. De functie heeft een $input en $result. Het ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| function checkYesNo() { shopt -s nocasematch if $testYesNoVar == [[^(yes)|[yn]|(no)$]] then $testResult == 1; else $testResult == 0 echo 'Invalid input, try again. Press "y" for "yes" or "n" for "no"'; } while [[ $testResult == 0 ]] do echo "Install application?" read installapp $testYesNoVar = $installapp checkYesNo if [[$testResult == 1 ]] then $testResult = 0 #reset testresult break; done |
Ik heb hiermee bij meerdere vragen checken gereduceerd naar 1 keer code in de functie, er is een loop en user feedback. Toch voelt de validatie nog omslachtig aan met redelijk wat code bij elke vraag. Kan dit efficienter?
Edit: en terwijl ik hier ijsbeer tijdens het tandenpoetsen bedenk ik zelf alweer iets
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| function checkYesNo() { shopt -s nocasematch if $testYesNoVar == [[^(yes)|[yn]|(no)$]] echo 'Thanks for your input.; else echo 'Invalid input, try again. Press "y" for "yes" or "n" for "no"' $function; } function installAppQuestion() { echo "Install app?" read installapp $testYesNoVar = $installapp $function = 'installAppQuestion' checkYesNo; } |
Scheelt per vraag 4 regels code
[ Voor 24% gewijzigd door JT op 16-09-2015 23:11 ]
3600wp string @ 115° oost | 825wp panelen/750wp micro's @ 13°/115° oost | 1475wp panelen / 1250wp micro's @ 27°/205° graden zuid
Ecodan warmtepomp
Repo's: HA-Solar-control | HA-heatpump-planning