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@115° oost | 825wp panels/750wp inv@13°/115° oost | 1475wp panels/1250wp inv@27°/205° graden zuid
Ecodan warmtepomp
Repo's: HA-Solar-control | HA-heatpump-planning | NR-HueTapDial-NextLevel