Puncte:-2

Conducta mea nu funcționează în declarația mea if

drapel cn

Am acest script de verificat starea git pentru toate depozitele mele:


find / -type d -name .git 2>&- | 
în timp ce citește gitFolder; do
    dacă [[ $gitFolder == *"/Temp/"* ]]; atunci
        continua;
    fi
    dacă [[ $gitFolder == *"/Trash/"* ]]; atunci
        continua;
    fi
    dacă [[ $gitFolder == *"/opt/"* ]]; atunci
        continua;
    fi
    părinte=$(dirname $gitFolder);
    if [[ `git -C $status părinte --porțelan` ]]; atunci
        ecou "";
        echo $părinte;
        git -C $statut părinte --porțelan
    else if [[ $(git -C $starea părinte | grep înainte) ]]; atunci
        ecou "";
        echo „$părinte nu este încă împins”;
    fi
Terminat 

Dar nu merge. Dacă îl elimin pe al doilea else-bloc atunci funcționează.

Practic, vreau să știu dacă un depozit git are modificări (în primul rând dacă) sau dacă este înainte de master (al doilea dacă).

Cum ar trebui să schimb acea condiție de secundă dacă?

drapel hr
Vă rugăm să încercați să fiți mai descriptiv decât „nu funcționează” - ce ar trebui să se întâmple și ce se întâmplă în schimb?
Lorenz Keel avatar
drapel gr
Înlocuiți `else if` cu `elif`. Nu am verificat codul pentru eventuale erori suplimentare
Puncte:2
drapel gr

The Bash dacă...altfel dacă...altfel declarația ia următoarea formă:

dacă CONDIȚIA1; atunci
  DECLARAȚII1
elif CONDIȚIE1; atunci
  DECLARAȚII 2
altfel
  DECLARAȚII3
fi

Eroarea specifică din scriptul dvs. este utilizarea cuvântului cheie incorect altfel dacă în locul celui corect elif.

Dacă CONDITION1 se evaluează la True, STATEMENTS1 va fi executat. Dacă CONDITION2 se evaluează la True, STATEMENTS2 vor fi executate. Dacă niciuna dintre comenzile de testare nu se evaluează la Adevărat, CONDIȚIA3 este executată.

Condițiile sunt evaluate secvenţial. Odată ce o condiție returnează True, condițiile rămase nu sunt îndeplinite și controlul programului se mută la sfârșitul instrucțiunilor if.

Puteți avea una sau mai multe clauze elif în declarație.

Sugestie: poti instala shellcheck pachet pentru a vă verifica codul bash. Vedea https://github.com/koalaman/shellcheck pentru trimitere.

Puncte:-1
drapel in

Încercați să înlocuiți

    else if [[ $(git -C $starea părinte | grep înainte) ]]; atunci

cu

    else if git -C $statut părinte | grep înainte; atunci

Poate doriți să adăugați -q a grep.

Acest lucru funcționează prin înlocuirea [[ testați cu o comandă liberă. Ultima comandă din conductă (grep) iese cu o valoare adevărată sau falsă, depinzând dacă a găsit ceva sau nu. The -q opțiunea îi spune să revină numai cu acea valoare și să nu imprime de fapt ceea ce a găsit.

Notă: există și alte erori în scriptul dvs. care necesită, de asemenea, remediere.

Saeed Neamati avatar
drapel cn
Nu înțeleg. Unde este **verificarea** din a doua linie? Pare JavaScript.
Saeed Neamati avatar
drapel cn
Nu a mers. Îmi dă o eroare de sintaxă. Aproape de `terminat`.
terdon avatar
drapel cn
@SaeedNeamati, vă rugăm să nu ne spuneți „nu a funcționat” sau „eroare de sintaxă”. Editează-ți întrebarea și arată-ne ce erori _exacte_ primești. Nu putem doar ghici de ce ai nevoie.
Saeed Neamati avatar
drapel cn
@terdon, am scris eroarea. „Eroare de sintaxă, aproape gata”. Totuși, am reușit să funcționez schimbând abordarea.
user10489 avatar
drapel in
Va trebui să combinați mai multe răspunsuri aici pentru a obține o soluție funcțională, deoarece aveți mai multe erori. Eroare aproape de terminat este unul sau mai multe `fi` lipsă pentru a vă închide `if`s. Sau înlocuiți `else if` cu `elif`
drapel lu
`elif` este calea de urmat.
user10489 avatar
drapel in
Mă gândeam că elif este o caracteristică bash, dar se pare că POSIX a adăugat-o când nu mă uitam sau ceva de genul ăsta. Cu asta în afara drumului, probabil că nu există nicio problemă cu compatibilitatea inversă, iar `elif` arată ca drumul de urmat.

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.