Bash – hoe voer je een commando uit nadat het vorige klaar is? [duplicate]

Deze vraag heeft hier al antwoorden :

Reacties

  • terdon ' s antwoord hieronder is uitstekend, maar je kunt de puntkommas neerzetten in de versie die je ' hierboven hebt getoond, evenals opdrachten die in volgorde in het script worden uitgevoerd, elk op een eigen regel. De puntkomma is overbodig, tenzij u alle opdrachten op één regel plaatst.

Answer

Ja, je bent doe het op de juiste manier. Shell-scripts zullen elke opdracht opeenvolgend uitvoeren, wachtend tot de eerste klaar is voordat de volgende begint. U kunt opdrachten samenvoegen met ; of ze op aparte regels plaatsen :

command1; command2 

of

command1 command2 

als de opdrachten op aparte regels staan. Je kunt er ook voor kiezen om de tweede opdracht alleen uit te voeren als de eerste succesvol is afgesloten. Om dit te doen, voeg je ze samen met && :

command1 && command2 

of

command1 && command2 

Voor meer informatie over de verschillende controle-operators die beschikbaar zijn you, zie hier .

Reacties

  • Bedenk dat in plaats van &&, OP kan simpelweg set -e aan het begin van het script. Dit is natuurlijk geen operator voor procesketen.
  • @didierc die ervoor zorgt dat het script bij elke fout wordt afgesloten, en dat ook tal van onnodige voortgangsrapporten zal produceren. Niet hetzelfde als het koppelen van twee specifieke commandos met &&.
  • @polemon niet echt, nee. Dit is een heel eenvoudige vraag van een beginnende gebruiker. Ik heb geen ' het nut niet te veel details toe te voegen. Merk op dat ik ' zelfs || niet noemde. Ik begrijp ' niet echt waarom wait hier relevant is, het is zeker niet nodig voor de simpele taak om het ene commando na het andere uit te voeren. Het zou alleen nodig zijn voor een meer fijnmazige beheersing van processen. Voel je vrij om natuurlijk een antwoord in te dienen, maar ik ' houd het mijne liever simpel.
  • @terdon wouldn ' Is dat set -v of set -x in plaats van set -e?
  • @didierc zie mijn opmerking hierboven, ik dacht aan set -x, sorry.

Antwoord

In een zich herhalend geval als dit raad ik aan om een for-lus te gebruiken.

 for P in {1..3} ; do wget -q http://exemple.com/page${P}.php ; done  

Dit is een versie van één regel die geschikt is voor de opdrachtregel, maar die ook in een script kan worden gebruikt. De accolades rond de variabelenaam zijn nodig bij het insluiten van een variabele in een string zonder witruimte.

De lus verzendt niet alleen de verzoeken op volgorde, maar is gemakkelijker te tweaken en opnieuw te gebruiken wanneer dat nodig is, zonder zoveel zorgen over typefouten.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *