Puncte:0

În timp ce $valoare != [a..b]

drapel in

Încerc să scriu o funcție care rescrie o valoare în funcție de alegerea unui utilizator. Pana acum arata asa:

în timp ce [[ $code_id != [1-28] ]]; do
echo „Vă rugăm să selectați o valoare...”
ecou "1. A"
ecou "2. B"
ecou "3. C"
ecou "4. D"
...
ecou "28. Z"
Terminat
echo "INFO: Codul este $code_id."

Utilizatorul ar trebui să scrie un număr ales (1-28). Dar, ca rezultat, codul mă întoarce, pentru o alegere. Înțeleg ce motiv într-o condiție (în timp ce... fac), dar cum ar trebui să scriu asta pentru ca codul meu să funcționeze?

drapel hr
Ce mai exact încerci să faci aici? (1) nu alocați niciodată o valoare lui `code_id` și (2) `[1-28]` se potrivește numai cu cifrele 1, 2 și 8 - nu este un interval numeric de la 1 la 28. Poate că căutați un [ selectează bucla](https://askubuntu.com/a/1716/178692)?
drapel cn
Ai 28 de litere în alfabet?
Bruyi avatar
drapel in
@Rinzwind am peste 10 litere, care au 1 sau 2 numărul de cifre dintr-un număr: dacă fac un interval `$code_id = [1-9]` pot trece într-o etapă următoare, dar alta (`[ 1-10]`, de exemplu) - această etapă se repetă.
Puncte:3
drapel cn

Iată o soluție posibilă care utilizează bucla infinită care este întreruptă condiționat în interior.

#!/bin/bash

în timp ce adevărat
do
  citește -p „Introduceți valoarea: „

  dacă [[ $valoare =~ ^[0-9]{1,2}$ ]] && ((valoare <= 28)); apoi rupe; fi
  # are un număr de una sau două cifre și, dacă este adevărat, este mai mic sau egal cu 28?
Terminat

echo „Valoarea este: ${value}”

Intervalele din expresiile regulate nu funcționează ca acestea la matematică. Gândiți-vă la intervalele de aici ca la o serie de caractere secvențiale din Tabelul ASCII. Deci setul de caractere [1-28] este format din 1, 2 și 8.

Iată un alt exemplu. Setul de caractere [a-dz] include personajele din gama anunț, acestea sunt A, b, c, d, și personajul z.

În cadrul testului condiționat de executare a lui Bash [[, cand =~ este utilizat operator, șirul din dreapta operatorului se potrivește ca expresie regulată.

Puncte:2
drapel in

Se pare că vrei să folosești Bash's Selectați incorporat:

selectați codul_id în {A..Z}; do
    [[ -z $cod_id ]] || pauză
Terminat
echo "INFO: Codul este ${code_id}."

Ieșire:

1) A 3) C 5) E 7) G 9) I 11) K 13) M 15) O 17) Q 19) S 21) U 23) W 25) Y
2) B 4) D 6) F 8) H 10) J 12) L 14) N 16) P 18) R 20) T 22) V 24) X 26) Z
#? 6
INFORMAȚII: Codul este F.

Poate doriți să limitați COLONNE de exemplu.:

COLONNE=1
selectați codul_id în {A..Z}; do
    [[ -z $cod_id ]] || pauză
Terminat
echo "INFO: Codul este ${code_id}."

Ieșire:

 1) A
 2) B
 3) C
 4) D
 5) E
 6) F
 7) G
 8) H
 9) eu
10) J
11) K
12) L
13) M
14) N
15) O
16) pag
17) Î
18) R
19) S
20) T
21) U
22) V
23) W
24) X
25) Y
26) Z
#? 17
INFORMAȚII: Codul este Q.
Puncte:0
drapel in

Soluția este schimbarea unei condiții la în timp ce [[ $rep_id -le 0 || $rep_id -ge 13 ]]; do...

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.