Vraag Hoe maak ik een scriptbestand aan voor terminalopdrachten?


In Windows kan ik een bestand schrijven met opdrachten voor cmd (meestal .cmd of .bat bestanden). Als ik op die bestanden klik, wordt deze geopend cmd.exe en voer ze commando's uit die het bestand bevat.

Hoe zou ik dit in Ubuntu doen?

Ik weet zeker dat dit een duplicaat is, maar ik kan mijn antwoord niet vinden.
Het lijkt op deze vragen, maar ze geven geen antwoord op de vraag:

Bewaar veelgebruikte terminalopdrachten in een bestand 

CMD.exe Emulator in Ubuntu om .cmd / .bat-bestand uit te voeren


93
2017-11-30 02:56


oorsprong




antwoorden:


Er zijn twee methoden.

Ten eerste is het het meest gebruikelijk om een ​​bestand te schrijven, zorg ervoor dat de eerste regel is

#!/bin/bash

Sla vervolgens het bestand op. Volgende markeer het met behulp van chmod +x file

Wanneer u vervolgens klikt (of het bestand uitvoert vanaf de terminal), worden de opdrachten uitgevoerd. Volgens afspraak hebben deze bestanden meestal geen extensie, maar je kunt ze wel laten eindigen .sh of op een andere manier.

Een paar opmerkingen:

  • Elk (en ik bedoel een) bestand kan in Linux worden uitgevoerd, op voorwaarde dat de eerste regel een pad naar het programma is dat het bestand moet interpreteren. Veelvoorkomende voorbeelden zijn onder meer /bin/python, /bin/sh, /bin/dash, maar zelfs vreemde dingen zoals bal werken /bin/mysql
  • Bash is een volledige taal. Het is veel complexer dan cmd.exe in Windows. Het heeft een krachtige programmeertaal die functies, loops, conditionals, string-bewerkingen enz. Ondersteunt.
  • Deze documenten kan helpen als je problemen tegenkomt.
  • Als je het bestand niet uitvoerbaar wilt maken, kun je het uitvoeren door het als argument door te geven aan bash: bash file/to/run.sh

Een eenvoudig Bash-voorbeeld

#!/bin/bash  
echo "This is a shell script"  
ls -lah  
echo "I am done running ls"  
SOMEVAR='text stuff'  
echo "$SOMEVAR"

De tweede methode is om commando's op te nemen met behulp van script. Rennen script doe dan gewoon dingen. Wanneer je klaar bent met het typen van dingen exit en het script genereert een bestand voor u met alle "dingen" die u deed. Dit is minder gebruikt, maar werkt best goed voor het maken van dingen zoals macro's. man script voor meer informatie.


124
2017-11-30 03:18



Misschien wil je dat veranderen /bin/bash naar /bin/sh, bash is niet eens de standaard voor Ubuntu. - TC1
@ TC1 Het is standaard geïnstalleerd, dus het maakt niet uit of dit de standaard is of niet. - Carlos Campderrós
Ik zou erop willen wijzen dat /bin/dash (welke /bin/sh is meestal symlinked naar), is een stuk sneller dan bash (ik heb ongeveer 15 keer sneller gemeten). Gebruik als het enigszins mogelijk is /bin/dash voor shell-scripts :) - MiJyn
Ik krijg 'command not found' ook na chmod - Elia Weiss
Als je in dezelfde map staat als het bestand, zorg je ervoor dat ./file.sh - coteyr


Het equivalent van Windows-batchbestanden is shellscripts en een uitstekende handleiding 'Aan de slag' Bash-scripts.

Voor het grootste deel kunnen opdrachten die u op de opdrachtregel kunt invoeren in een shellscript worden geplaatst.

Een aantal dingen die anders zijn dan Windows-batchbestanden:

  • Er zijn verschillende opdrachtinterpretatoren, shells genaamd. De standaard is bash, maar als je geïnteresseerd bent, zijn er anderen, zoals zsh, ksh, dash, perl, python, etc.

  • Om een ​​shellscript uit te voeren, moet je het bestand uitvoerbaar maken, waarmee je kunt doen chmod +x <filename>

  • In Ubuntu is de huidige map niet het programmazoekpad, dus u moet het uitvoeren ./<filename>, niet <filename>

  • Variabele namen zijn $<varname>, niet %<varname>%

  • Opdrachten in een shellscript worden niet standaard afgedrukt, zoals in een batchbestand.

  • De extensie van de bestandsnaam kan zijn .sh of (meer gebruikelijk) u hoeft geen extensie te gebruiken. Leggen #!/bin/bash op de allereerste regel van het bestand, die Ubuntu vertelt welk programma moet worden gebruikt om het bestand uit te voeren.

  • Opmerkingen beginnen met #, niet rem.

Ik hoop dat dit helpt en dat het leuk is om te scripten!


14
2017-11-30 03:14





Je bedoelt het schrijven naar een bestand met een shellscript? Hier zijn een paar manieren:

touch file

Met deze methode wordt eenvoudig een bestand gemaakt, maar als het bestand al bestaat, wijzigt het gewoon de wijzigingsdatum in de tijd dat u die opdracht gebruikte.

echo "text" > file

Die methode overschrijft de inhoud van file naar text. Als u een bestand wilt wissen, kunt u dit eenvoudig doen:

echo "" > file

Stel dat u er meer dan één regel wilt schrijven en dat u er geen duizenden wilt gebruiken echo commando's, zou je deze opdracht gebruiken:

cat << EOF > file
test
test1
foo
bar
EOF

Hiermee kunt u meerdere regels in één opdracht schrijven. De inhoud van file zou dan dit zijn:

test
test1
foo
bar

Als u aan een bestand wilt toevoegen, vervangt u > naar >>.

Ik hoop dat dit helpt!


BEWERK: Oh, ik begrijp het, dus je zou het bestand in gedit schrijven, met behulp van de .sh extensie (optioneel, maar het is een goed idee) en klik vervolgens op een bestandsbeheerder met de rechtermuisknop op het bestand, selecteer Eigenschappen-> Machtigingen en vink Allow executing file as program. Vervolgens kunt u erop dubbelklikken en het zal worden uitgevoerd :). Als u dit ook in de terminal wilt doen, kunt u dit commando uitvoeren om het uitvoerbaar te maken (misschien wilt u dit vooraf doen sudo als het niet van jou is):

chmod +x file

En om te rennen:

./file

13
2017-11-30 03:00



Eigenlijk wat ik wil doen is een bestand schrijven in, zeg gedit, dat terminalopdrachten bevat. Wanneer ik vervolgens op dit bestand dubbelklik, worden deze opdrachten in de terminal uitgevoerd. - Seth♦
Controleer mijn bijgewerkte antwoord :) - MiJyn
Geweldig antwoord, attente update. Om eenvoudig een bestand te maken, heb ik het altijd net gebruikt touch filename - TryTryAgain
@TryTryAgain, yep, dat is een eenvoudige methode, waarschijnlijk sneller dan echo "" > file. Is het goed als ik die methode in mijn antwoord opneem? - MiJyn
@MiJyn Neem het absoluut op, voel je vrij. Bedankt - TryTryAgain