Nu trebuie să răspundă. Face exact ceea ce ar trebui: citește intrarea și o atribuie variabilei tip fișier
. Cu toate acestea, atunci aveți un in timp ce
buclă care verifică valoarea unei variabile care nu se schimbă niciodată:
while [[ "$fileType" != "EXIT" ]];
Din moment ce valoarea de $fileType
este setat o singură dată și înainte de in timp ce
buclă, că in timp ce
devine o buclă infinită dacă nu treci IEȘIRE
la prima încercare. În orice caz, scriptul tău nu ar funcționa oricum de la ieșirea lui grep -q model fișier
nu va fi niciodată 1
. De fapt, va fi mereu gol, deoarece asta este grep -q
face. Bănuiesc că ai vrut să verifici starea de ieșire a comenzii, dar chiar și asta nu are rost: nu există niciun beneficiu să citești întregul fișier o dată cu grep -q
doar ca apoi să o citească din nou cu grep -F
.
Iată o versiune funcțională a funcției dvs.:
funcția findFiles() {
while [[ "$fileType" != "EXIT" ]];
do
echo „Introduceți tipul de fișier pentru a căuta (include „.”) || Tastați EXIT pentru a încheia programul „
citiți tipul fișierului
grep -F „$fileType” index.html >> foundFiles.txt
Terminat
rm index.html
};
Sau, dacă doriți să evitați crearea unui gol foundFiles.txt
dacă nu au fost găsite potriviri, puteți încerca:
funcția findFiles() {
while [[ "$fileType" != "EXIT" ]];
do
echo „Introduceți tipul de fișier pentru a căuta (include „.”) || Tastați EXIT pentru a încheia programul „
citiți tipul fișierului
if grep -qm1 "$fileType" index.html; atunci
grep -F „$fileType” index.html >> foundFiles.txt
fi
Terminat
rm index.html
};
The -m
asigură cel grep
iese după prima potrivire, astfel încât nu trebuie să citiți întregul fișier de două ori. Rețineți că nu folosesc înlocuirea comenzii ($(comandă)
) deoarece verific dacă comanda a avut succes și nu încerc să-i folosesc rezultatul.