Automatisera sådant du gör ofta - lägg flera kommandon i rad i en fil, och kör hela filen! Du kan också schemalägga att köra filen! :) Det är också ett sätt att arbeta på där flera kan dela stegen genom att flera har tillgång till filen, och det kan också handla om att undvika manuella felsteg, och du slipper råka glömma något steg!
Komma igång:
Skapa en fil med detta innehåll:
#!/bin/bash
echo "Jag körs och är en del av ett bashscript!"
pwd
Du kan göra det såhär:
vim my_first_bash_script
i
för “insert mode”#!/bin/bash
echo "Jag körs och är en del av ett bashscript!"
pwd
:wq
alltså “:” “w” och “q”
chmod +x file
, d.v.s du gör så att filen går att köras inte bara läsas och skrivas till. Du låter det vara ett program. :)Du kan välja att ge filerna filändelsen .sh om du vill vara tydlig. Du kan alltså kalla din my_first_bash_script för my_first_bash_script.sh om du vill. :)
Du lägger alltså till varje kommando/program du vill köra, förslagsvis på ny rad.
Om du vill skriva/köra de på samma rad, separera de med ;
ex echo "Jag körs";pwd
Om du vill fånga upp resultatet av ett program som körts (vad som i vanliga fall hade kommit ut på skärmen, kan du göra såhär:
all_files=$(ls)
echo $all_files
För att echo också ska visa radbrytningar skriver du istället:
echo "$all_files"
Exempel på fil som pratar med doctl, skapar upp ny vps och sedan visar IP-numret till din VPS
droplet_created=$(doctl compute droplet create valjnamnfrittkodkursdroplet --size 1gb --image debian-9-x64 --region fra1 --ssh-keys 87:bb:51:6e:30:19:32:11:c8:13:ed:85:81:a1:ca:22 --ssh-keys 07:fa:5c:78:65:60:2e:cc:79:36:f2:47:39:41:11:4b)
#droplet_created=$(cat testing.md)
droplet_created_id=$(echo "$droplet_created" | sed -n 2p | grep -Eo '^[^ ]+')
echo "Droplet created with ID: $droplet_created_id"
echo ""
echo "Let's wait a minute or two to let digitalocean connect the droplet to an IP"
sleep 13s
echo "Waiit"
sleep 13s
echo "fooor"
sleep 13s
echo "iiiit"
sleep 4s
echo "Go!"
echo ""
doctl compute droplet get $droplet_created_id
echo ""
droplet_IP=$(doctl compute droplet get $droplet_created_id | sed -n 2p | grep -Eo '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b')
echo "Droplet IP address: $droplet_IP"
Mer material:
https://askubuntu.com/questions/223691/how-do-i-create-a-script-file-for-terminal-commands/223698
Kör ett script som inloggad på VPS:
ssh -o "StrictHostKeyChecking no" root@146.46.146.46 'bash -s' < create_new_user_deployer.sh
Trigga ett script ifrån ett annat script:
#!/bin/bash
$SCRIPT_PATH="/path/to/script.sh"
# Here you execute your script
"$SCRIPT_PATH"
# or
. "$SCRIPT_PATH"
# or
source "$SCRIPT_PATH"
# or
bash "$SCRIPT_PATH"
# or
eval '"$SCRIPT_PATH"'
# or
OUTPUT=$("$SCRIPT_PATH")
echo $OUTPUT
# or
OUTPUT=`"$SCRIPT_PATH"`
echo $OUTPUT
# or
("$SCRIPT_PATH")
# or
(exec "$SCRIPT_PATH")
https://stackoverflow.com/questions/8352851/how-to-call-shell-script-from-another-shell-script
# Nice to have:
# ssh root@139.59.143.95 'cd ..;ls' ssh & run commands