SCRIPT WITH BASH
IN ORDER TO AUTOMATE SOME ACTION
WHAT IS BASH ?
Bash is a command language interpreter. It means it can speak with your computer.
And your computer will understand what you're saying.
We use Bash everyday by typing 'ls', 'cd',...
You can automate command you type every single day through a script.
And that's what we're gonna do.
LET'S SPEAK !
echo Hello, world
cal
history
kill ruby
man bash
cat Gemfile
Have a look at all bash commands you can use
LET'S SCRIPT
TO RUN A BASH SCRIPT
- Open a file and save it with .sh (in a Rails app, create a folder named Script where you can save all your scripts)
- Add this short line at the beginning of the file :
- To run it, type :
- Or make it executable with :
And then, do :
#!/bin/bash
bash script_file
chmod +x script_file
./script_file
Variables
Argument
Argument is a value you placed just after the command calling your script.
It will be read as $1.
name="Sonia"
echo My name is $name
./script/first_script.sh 32
# in your file :
echo I am $1
You can put all the argument you want separated by a space and then use $1, $2, $3,...
$$$
LOOP
Of course, you can loop in Bash !
If [ condition 1 ]
then
do that
elif [ conditional 2 ]
then
do this
else
do another thing
fi
For example with if
PRODUCTION DB SCRIPT
RETRIEVE YOUR PROD DB
The idea is to capture your production db and then use it in your development db
It means :
- Capture your heroku db
- Drop your development db
- Recreate it
- Restore your db with the heroku captured
DB Capture
Heroku command is :
Retrieve URL
The db capture gives you an url that we'll need for later purpose.
heroku pg:backups capture -a app
Where app is one app in your heroku account.
Let's script that.
Heroku command is :
heroku pg:backups public-url -a app
Let's take care of
your development db
And what's good about bash is that you can use postgres command line for example.
dropdb, createdb, pg_restore,...
Retrieve Db Name
Drop&CreateDb
dbname=`grep "development:" -A 1 config/database.yml | tail -n 1 | sed -e "s/.*database: \(.*\)/\1/"`
# in file database.yml grep one line after the word "development"
grep "development:" config/database.yml -A 1
# just keep one line
tail -n 1
# s = regexp/replacement
# if it matches 'database:', replace with the word corresponding
# to the regexp (.*). \ is just for shell escape
sed -e "s/.*database: \(.*\)/\1/"
dropdb $dbname
createdb $dbname
And... restore your db with your production db using the captured url with cURL
curl $url | pg_restore -d $dbname --no-owner
Your turn !
You can use script to :
- give access to collaborators on heroku
- create and manage admin
- create app based on your master branch
- ...
BASH
By Sonia Prévost
BASH
- 1,619