Shell script

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:

  1. Skriv i terminalen vim my_first_bash_script
  2. Tryck i för “insert mode”
  3. Klistra in:
    #!/bin/bash
    echo "Jag körs och är en del av ett bashscript!"
    pwd
    
  4. Tryck esc för att gå till “normal mode”
  5. Tryck: :wq alltså “:” “w” och “q”
    • : - börja ange ett kommando
    • w - write - spara ändringarna till filen
    • q - quit avsluta programmet
  6. Ändra filrättigheterna 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

Vem ligger bakom denna kurs?

Victoria Wagman som har arbetat som lärare i webbutveckling, och idag arbetar som programmerare hos 46elks.

Detta material byggs upp lite i taget.