Bashing Script in een script | winecountryweddingsite.com
Vraag Bashing Script in een script
Ik heb een klein script geschreven waarmee ik twee verschillende servers via SSHFS kan verbinden. Het script stelt de variabelen in of zet standaard waarden in als er niets wordt ingevoerd, d.w.z. SSH-poort 22.
Ik wil een script maken waarmee ik 1, 2 of 3 kan typen en verbinding kan maken
SSHFS-script waarin ik variabelen invoerde
SSHFS-server 1
SSHFS-server 2
Met als hoofddoel dat ik niet elke keer een gebruikersnaam, wachtwoord, servernaam, enz. Moet typen, telkens wanneer ik verbinding maak via Via SSHFS.
Wat is de beste manier om dit te structureren, zodat ik mijn SSHFS-regel niet hoef te herhalen
De variabelen voeden deze regel.
sshfs -o allow_other,defer_permissions -o volname=$USER@$SERVERNAME $USER@$SERVERNAME:$REMOTEMOUNT $LOCALMOUNT -p$PORTNUMBER
Als ik switch-case gebruik, moet ik dit in elke switch-case opnemen of is er een manier om het te structureren, zodat deze regel maar één keer wordt opgenomen.
Het is moeilijk om te zeggen zonder de scripts te zien, maar het is misschien het gemakkelijkst om alles in één script te zetten. Definieer bijvoorbeeld enkele functies en vervolgens een case-opdracht die bepaalt welke functie moet worden uitgevoerd. Als elke functie hetzelfde zou doen met alleen maar verschillende argumenten, definieer dan één functie en voer verschillende opties in afhankelijk van de case-instructie. - wjandrea
Gebruik het eerst niet $USER. Dat is een standaard omgevingsvariabele die de gebruikersnaam van de huidige gebruiker bevat. Als de gebruikersnaam hetzelfde is in alle servers en op de computer waarop u het script uitvoert, dan is dat goed. Maar als dat niet het geval is, gebruik dan een andere naam. Gebruik in het algemeen geen UPPER CASE-variabelenamen in bash omdat de standaard gereserveerde allemaal hoofdletters zijn.
Dat gezegd hebbende, zou je zoiets als dit kunnen doen:
remotemount="remote1"
localmount="local1"
portnumber="port1"
servername="server2"
remotemount="remote2"
localmount="local2"
portnumber="port2"
servername="server3"
remotemount="remote3"
localmount="local3"
portnumber="port3"
echo "Please use 1, 2 or 3"
echo sshfs -o allow_other,defer_permissions -o volname=$user@$servername $user@$servername:$remotemount $localmount -p$portnumber
Vervolgens voer je het geven van je script uit 1, 2 of 3 als een parameter:
foo.sh 2
@wjandrea bedankt voor de oplossing, ik had dat gemist. En bedankt dat je me hebt geleid om erachter te komen dat de finale ;; in een case-statement is, blijkbaar, optioneel! Ik had dezelfde weglating in mijn testscript en het werkte zoals verwacht. Ik had geen idee! - terdon♦
Huh. Hoe bizar ... - wjandrea
Bedankt, ik wist niet dat je het script kon uitvoeren met jouw selectie, wat geweldig is. bespaart op het aanvragen van het binnen het script. - denski
Waarom moet je afsluiten met '1'? - denski
@denski doe je niet nodig hebben het is gewoon een conventie. Normaal gesproken wordt bij een succesvolle voltooiing een programma afgesloten met een 0 exit code. Een niet-0-exitcode betekent dat er een fout is opgetreden. Dus, omdat het geven van een slechte invoerparameter een fout is, verlaat ik met 1. En ja, er is zeer, zeer zelden een goede reden om de invoer van het scriptverzoek na de lancering te hebben. In 99% van de gevallen is het beter om de info door te geven aan het script wanneer je het start. - terdon♦
Convert .jar naar .deb pakket Hoe 12.04 volledig te de-installeren en terug te zetten naar 11.04? [duplicaat] Creëer Swap voor Ubuntu 14.04 LTS [gesloten] Waarom kan ik het script tegen Localhost niet uitvoeren? Lame - Hoe alle 320kbps mp3 naar 192kbps mp3 opnieuw te coderen Hoe ontvang ik het IP-adres van een externe server? Hoe kan ik invoer naar alle splitsingen in Byobu sturen?