Opmerking: - $USER drukt de gebruikersnamen van de huidige ingelogde gebruikers af.
Als je benieuwd bent welke versie van bash shell in het systeem is geïnstalleerd, kunnen we dit controleren met de volgende opdracht:.
$ bash --versieBash-versie-uitvoer.
Bash-script maken en uitvoeren
Laten we beginnen met het maken van een eenvoudig bestand met een editor naar keuze. Voor mij is de vi-editor comfortabeler. Om het bestand uitvoerbaar te maken, moeten we shebang (!#) en bash-interpreterlocatie aan het begin van het script. Ik heb een tekst gemaakt.txt-bestand en voeg het toe aan bash_demo dir in mijn home-dir dat wat tekst bevat voor demo-doeleinden.
$ raak bash_demo aan.sh$ vi bash_demo.sh
Voeg de volgende regels toe aan uw teksteditor voor een voorbeelddemo na het maken van een bestand; als je dat niet hebt gedaan, zal de editor een nieuw bestand maken bij schrijven en afsluiten.
#!/bin/bashcp tekst.txt /tmp/
echo “Bestand gekopieerd.”
We kunnen het script uitvoeren met ./ voor het scriptbestand, dat het huidige dir-bestand bepaalt.
$ ./bash_demo.shWanneer we het script uitvoeren, wordt de volgende fout in onze terminal gegenereerd:.
Eerste uitvoering van bash-bestand.
Wanneer we standaard een bestand maken, heeft de gebruiker geen uitvoeringsmachtiging voor het bestand. Om de gebruiker uitvoeringsrechten te geven, moet de volgende opdracht worden uitgevoerd:.
$ chmod +x bash_demo.shUitvoer na verleende toestemming.
Kopieer alleen bestanden uit een specifieke map
Voor het ophalen van alle bestanden en dir van een specifiek pad, zullen we for loop in het script gebruiken en vervolgens het enige bestand filteren met de if-voorwaarde. In het onderstaande voorbeeld voeren we het cp-commando alleen uit als de iterator een bestand was dat is bepaald -f flag.
#!/bin/bashdpath = /var/log/nginx/*
voor BESTAND in $dpath
Doen
als [[ -f $BESTAND ]]
dan
cp $BESTAND /home/$USER/
anders
echo "Er zijn geen bestanden in het opgegeven pad.”
fi
gedaan
Kopieer alle bestanden van specifieke extensies
In dit voorbeeld zullen we alle bestanden kopiëren met de .log extensie. We moeten toevoegen *.log in op het pad zodat het enige bestand herhaald wordt met .log-extensie alleen voor lus.
#!/bin/bashvoor BESTAND in /var/log/nginx/*.log
Doen
cp $BESTAND /home/$USER/
gedaan
Kopieer alle bestanden, inclusief directory
In dit voorbeeld zullen we alle bestanden, inclusief mappen, recursief kopiëren. Daarvoor hoeven we alleen de opdracht -R cp toe te voegen, waarbij -R het recursief ophalen van de map bepaalt.
#!/bin/bashvoor BESTAND in /var/log/*
Doen
cp -R $BESTAND /home/$USER/
gedaan
Bestanden kopiëren van het door de gebruiker opgegeven pad
In dit voorbeeld zullen we bestanden kopiëren van door de gebruiker gespecificeerde map. Om dit te doen, zullen we de read-opdracht gebruiken om het pad van de gebruiker op te vragen en vervolgens controleren of de gebruiker het pad naar dir opgeeft of niet, wat wordt gedaan door de vlag -d in de voorwaarde. Na het verifiëren van dir, zullen we een for-lus gebruiken om alle bestanden en dir binnen het gegeven pad te herhalen, en vervolgens de enige bestanden eruit filteren met behulp van de if-voorwaarde. Als de voorwaarde overeenkomt, wordt het volgende cp-commando uitgevoerd:.
#!/bin/bashecho "Geef a.u.b. een pad naar dir.”
lees pad
als [[ -d $pad ]]
dan
voor BESTAND in $path/*
Doen
als [[ -f $BESTAND ]]
dan
cp $BESTAND /home/$USER/
anders
echo "Er zijn geen bestanden in het opgegeven pad.”
fi
gedaan
anders
echo "Pad naar map is vereist"
fi
In mijn home dir heb ik de volgende bestanden en dir.
Uitvoer bij het verstrekken van het pad naar een bestand.
Uitvoer bij het verstrekken van dir locatiepad.
Na het uitvoeren van het scriptbestand kunnen we de uitvoer controleren in de vooraf gedefinieerde map in het script. In mijn geval heb ik het bestand in mijn thuismap gekopieerd en het volgende is het resultaat:.
Conclusie
In dit artikel leren we hoe je bestanden kopieert met bash-scripting. We kunnen veel andere bewerkingen gebruiken, zoals een lus, als-anders, enz. Bash-scripting is effectiever wanneer u met meerdere opdrachten werkt om specifieke taken uit te voeren. Ik hoop dat je dit artikel over het kopiëren van bestanden met een bash-script leuk vindt.