Programación en Bash Shell
Básicamente es un lenguaje de scripting para realizar ciertas operaciones en entornos Linux.
holamundo.sh
#!/bin/bash
printf "\t [Programando en Bash Shell]"
echo $'\t'"Hola, mundo" | Use case: | |
| http://gitlab.com/UnderGrounder96/awx_install.git | |
| Reference Bash: | |
| https://tutorialkart.com/bash-shell-scripting/bash-tutorial/ | |
| shebang: #!/bin/bash | |
| 1 - Variables | |
| SYSTEM VARIABLES vs USER VARIABLES | |
| env command | |
| $PWD, $USER, $HOME, $PS1 | |
| .env - https://github.com/UnderGrounder96/RentAcar/blob/master/.env.default | |
| echo -e "$USER\n FooBar" # -e escapes newline | |
| USER_VAR="HELLO" # defines USER_VAR as "hello" | |
| USER_COM_VAR=`echo 'x'` # defines USER_VAR as "x", from command echo | |
| USER_COM_VAR=$(echo 'x') # same as above | |
| # this is a comment | |
| echo $1, $2... ${10} | |
| echo $@ # print args arr | |
| echo $? # last result | |
| echo $# # length | |
| count=10 # -le, -lt, -eq, -ge, -gt | |
| if [ $count -le 4 ]; then | |
| echo "$count is less or equal to 4" | |
| elif [[ $count -gt 4 && $count -lt 10 ]]; then # &&, || | |
| echo "$count is bewteen 5 and 10" | |
| else | |
| echo "$count has to be >=10" | |
| fi | |
| # if condition is false | |
| if [ "hello" == "bye" ]; then # != | |
| echo "hello equals bye" | |
| fi | |
| if [ -f /file/path ]; then | |
| echo "/file/path is a file" | |
| fi | |
| if [ -d /dir/path ]; then | |
| echo "/dir/path is a dir" | |
| fi | |
| if [ -z “$hello” ]; then | |
| echo "$hello is not empty" | |
| fi | |
| if [ $count -le 4 ]; then | |
| echo "count is less or equal to 4 : $count" | |
| elif [ $count -ge 5 ] && [ $count -lt 9 ]; then # (( $count >= 5 && $count <= 9 )) | |
| echo "count is between to 5 and 9 : $count" | |
| else | |
| echo "count is greater than 9 : $count" | |
| fi | |
| case $variable in | |
| A) | |
| echo "A selected" | |
| ;; | |
| B) | |
| echo "B selected" | |
| ;; | |
| C) | |
| echo "C selected" | |
| ;; | |
| *) | |
| echo "ERROR! Please select between 1..3" | |
| esac | |
| #loops | |
| while true; do | |
| echo "hello" && break | |
| done | |
| a=1 | |
| b=2 | |
| count=10 | |
| while [[ $a -lt $count && $b -lt 5 ]]; do | |
| a=$(( a + 1 )) | |
| b=$(( b + 1 )) | |
| done | |
| # for (( i=0; i<5; i++ )) | |
| for i in {0..5..2}; do #start..end..increment | |
| echo "$i" | |
| done | |
| function main(){ | |
| # more code here | |
| : | |
| } |
| Reference Docker: | |
| https://docs.docker.com/ | |
| https://www.tutorialspoint.com/docker/index.htm | |
| Docker ps # shows running containers | |
| Docker ps -a # shows all containers | |
| Docker pull # pulls image from dockerhub.com | |
| docker run hello-world # executes (and pulls) image hello-world | |
| Docker start [container] # starts (up) the container | |
| Docker stop [container] # stops running container | |
| Docker logs [container] # showcases logs of container | |
| Docker exec -it container_name bash # enters inside the container to perform bash commands | |
| Docker rm container # removes (stopped) container | |
| Docker rmi image # removes image |
| #!/bin/bash | |
| # Comentarios multilínea | |
| << 'MULTILINE-COMMENT' | |
| FUNDAMENTOS DE PROGRAMACION EN BASH SHELL | |
| MULTILINE-COMMENT | |
| # Limpiamos terminal | |
| clear | |
| echo $'\t'"[ Programando en Bash Shell]" | |
| echo $'\t'"Hola, ${USER}" | |
| echo $'\t'"Estamos en: ${PWD}" | |
| echo -n "Esto sin nueva línea" | |
| echo -e "\nRemoviendo \t backslash \t caracteres\n" | |
| # 9. | |
| numero=0 | |
| let aleatorio=$(expr 1 + $RANDOM % 10) | |
| printf "\t [ Adivina un numero ]" | |
| echo $'\n'"Introduce un numero:" | |
| read numero | |
| echo "$numero es el numero que introduciste" | |
| echo "$aleatorio es el numero a adivinar" | |
| if [ $numero -eq $aleatorio ]; then echo "Correcto"; else echo "Incorrecto"; fi | |
| # 8. Bucle For | |
| << 'MULTILINE-COMMENT' | |
| for (( contador=10; contador>0; contador-- )) | |
| do | |
| echo -n "$contador " | |
| done | |
| printf "\n" | |
| for((contador=0; contador<5; contador++)) | |
| do | |
| echo "contador: $contador" | |
| done | |
| printf "\n" | |
| MULTILINE-COMMENT | |
| # 7. Bucle while | |
| << 'MULTILINE-COMMENT' | |
| valido=true | |
| contador=1 | |
| echo $'\t'"Bucle While:" | |
| while [ $valido ] | |
| do | |
| echo $contador | |
| if [ $contador -eq 5 ]; | |
| then | |
| break | |
| fi | |
| ((contador++)) | |
| done | |
| printf "\t Hecho !!\n" | |
| echo "contador: $contador" | |
| while [ $valido ] | |
| do | |
| echo $contador | |
| if [ $contador -eq 0 ]; | |
| then | |
| break | |
| fi | |
| ((contador--)) | |
| done | |
| printf "\t Hecho !!\n" | |
| MULTILINE-COMMENT | |
| # 6. Expresiones | |
| << 'MULTILINE-COMMENT' | |
| ((suma=65+22)) | |
| ((resta=$suma-22)) | |
| ((mult=$suma*$resta)) | |
| # Imprimir el resultado | |
| echo "Suma: "$suma | |
| echo "Resta: "$resta | |
| echo "Multiplicacion: "$mult | |
| MULTILINE-COMMENT | |
| # 5. Definimos variables tipo Caracter, Entero, Booleano y del sistema | |
| << 'MULTILINE-COMMENT' | |
| nombre="Codemonkey Junior" | |
| entero=34 | |
| booleano=true | |
| flotante=9.83 | |
| fecha=`date` | |
| directorio=`pwd` | |
| # Mostramos en pantalla el valor de las variables | |
| printf "\t [Variables en Linux] " | |
| echo "Hola, ${nombre}" | |
| echo "Entero = ${entero}" | |
| echo "Flotante = ${flotante}" | |
| echo "Fecha: ${fecha}" | |
| echo "Estamos en: ${directorio}" | |
| MULTILINE-COMMENT | |
| # 4. Comprobamos si una variable es NULL | |
| << 'MULTILINE-COMMENT' | |
| if $booleano; then echo "Es verdadero: ${booleano}"; else echo "Es falso: ${booleano}"; fi | |
| echo "Fecha de hoy es: ${fecha}" | |
| echo "Estamos en el directorio: ${directorio}" | |
| echo "El nombre del archivo es: $0" | |
| MULTILINE-COMMENT | |
| # 3. Realizamos algunas operaciones aritméticas | |
| << 'MULTILINE-COMMENT' | |
| let num1=21 | |
| let num2=1 | |
| let suma=${num1}+${num2} | |
| echo "num1=${num1}, num2=${num2}" | |
| echo "Suma = ${suma}" | |
| # Definimos las variables y su valor | |
| let a=20 | |
| let b=5 | |
| # Operaciones aritméticas | |
| let suma=$(expr ${a} + ${b}) | |
| let resta=$(expr ${a} - ${b}) | |
| let producto=`expr $a \* $b` | |
| let division=$(expr ${a} / ${b}) | |
| echo "[Operaciones aritmeticas]" | |
| echo "a = ${a}, b = ${b}" | |
| echo "Suma = ${suma}" | |
| echo "Resta = ${resta}" | |
| echo "Producto = ${producto}" | |
| echo "Division = ${division}" | |
| let c=220 | |
| let d=200 | |
| let residuo=$(expr ${c} % ${d}) | |
| echo "c = ${c}, d = ${d}" | |
| echo "Residuo = ${residuo}" | |
| MULTILINE-COMMENT | |
| # 2. Longitud de las variables | |
| << 'MULTILINE-COMMENT' | |
| nombre='ABC' | |
| echo "Cadena = ${nombre}" | |
| # La longitud debe ser de 3 | |
| echo La longitud de la variable es: ${#nombre} | |
| numero=4953 | |
| echo "Numero = ${numero}" | |
| # La longitud debe ser de 4 | |
| echo La longitud de la variable es: ${#numero} | |
| booleano=true | |
| echo "Booleano = ${booleano}" | |
| # En este la longitud será de 4, se cuenta cada una de las letras como si fuera un string | |
| echo La longitud de la variable es: ${#booleano} | |
| MULTILINE-COMMENT | |
| # 1. Algunos comandos y variables de Linux | |
| << 'MULTILINE-COMMENT' | |
| quien=`whoami` | |
| donde=`pwd` | |
| mishell=$SHELL | |
| echo "Quien soy?: ${quien}" | |
| echo "Donde estoy?: ${donde}" | |
| echo "El home es: ${HOME}" | |
| echo "El usuario es: ${USER}" | |
| echo "El shell esta en: ${mishell}" | |
| MULTILINE-COMMENT | |
| Reference Git: | |
| https://www.tutorialspoint.com/git/index.htm | |
| curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > ~/.bash_git | |
| ssh-keygen && cat ~/.ssh/*.pub # generate SSH key and prints public key | |
| git config --list | |
| git config --global user.name "Lucio Afonso" | |
| git config --global user.email "lucioafonso@icloud.com" | |
| git config --global core.eol lf | |
| git config --global color.ui "true" | |
| git config --global core.editor "vim" | |
| git config --global core.autocrlf input | |
| git config --global credential.helper "store" | |
| git clone https://github.com/git/git # clones git | |
| git checkout -b LA/branch_name # creates and switches to branch LA/branch_name | |
| git pull origin master # fetches and merges current branch with master | |
| git add -A # stages (adds) files to git | |
| git commit -m "F" # commits with the message "F" | |
| git init # Initializing a repository | |
| #Branching | |
| git branch # shows local branches | |
| git branch -a # shows local and remote branches | |
| git branch -D la/extras # deletes branch la/extras | |
| # Switching branches | |
| git checkout branch_name # switches to branch_name | |
| # Showcases status | |
| git status | |
| # Staging files | |
| git add file1.js # Stages a single file | |
| git add file1.js file2.js # Stages multiple files | |
| git add -A # all files, new and modified | |
| git add -u # all modified and staged files, not new files | |
| # Committing the staged files | |
| git commit -m "Message" # Commits with a one-line message | |
| git commit # Opens the default editor to type a long message | |
| # Adds remote origin as http://link/to/repo | |
| git remote add origin http://link/to/repo | |
| # Pushes branch to origin | |
| git push origin branch | |
| git push -d origin LA/branch_name # deletes LA/branch_name from origin | |
| # Fetch vs pull | |
| git fetch # updates all branches | |
| git pull # same as above but merges | |
| # Removes changes | |
| git checkout -- file | |
| git restore file | |
| # Viewing the history | |
| git log # Full history | |
| git log -n 4 # Showcases last 4 from history | |
| git stash # stashes all current changes | |
| git reset --hard origin/master # resets HARD with master (aka sync) | |
| git stash pop # applies last stashed changes |
| Reference Unix: | |
| https://tutorialspoint.com/unix/index.htm | |
| 1 - Introduction: | |
| Win - versions, File structure | |
| Unix, AppleOS, Linux dist (Debian, Ubuntu, RedHat) | |
| 2 - Linux file structure | |
| #1: Everything is a file | |
| /bin, /boot... | |
| /editable_text_config - extra configuration for commands | |
| /media - auto mounted devices | |
| /mnt - manual mounted devices | |
| /opt - optional software, Dropbox is installed here. | |
| /run - tmp folder used during boot | |
| /var - variables files, /var/log is where log files are stored | |
| 3 - Full path vs relative path | |
| /; ~ ; .. ; . # root filesystem | |
| # hidden folder and files | |
| .env/ # hidden folder | |
| ~/.bashrc # relative path of .bashrc | |
| 4 - Commands | |
| # Intro: command [-flags] [args] | |
| whoami, man vs --help, which, uname -a, yes | |
| 5 - File/Dir commands | |
| pwd, cd, ls -lh, mkdir -p, rmdir -p | |
| touch, cat, head -n 6, tail -n 3, more, less, | |
| vi/nano, grep -nir, find / -name, cp, mv | |
| clear, ctrl + L | |
| rm -rvf dir | |
| 6 - Wildcards and Regular expression - * | |
| Sdhasd\ dssd = "Sdhasd dssd" # they are equal | |
| "Ds / ?sad" | |
| rm -vf dir/* # erases everything from dir/ | |
| find . -name "*.txt" | |
| 7 - Multiple commands: Piping, and or grep | |
| mkdir -p myFolder/dir && mv myFolder/ /tmp/ | |
| cd /tmp/myFolder/dir; hjkkjg; echo "No problem" | |
| cat file.txt | grep tellus | less | |
| 8 - Redirects | |
| cat /dev/null > file.txt # eliminates the content of a file | |
| echo "Hasdad asd ad a" >> file.txt # appends what's in echo inside the file | |
| find / -name dev_tools_default.img 2>/dev/null # hides errors | |
| cat > /tmp/myFile.txt # type then ctrl+d, creates file | |
| cat < /tmp/myFile.txt > /tmp/myFile2.txt # copies file | |
| sdadas >file.log 2>&1 # redirects STDERR to STDOUT | |
| bash script.sh 1>file.log 2>file.err # runs script.sh and creates 2 files, one for log and other for err | |
| 8- sudo/ su -/ sudo -i | |
| chmod | |
| systemctl | |
| shutdown | |
| reboot | |
| apt install | |
| 9 - ping google.com -c 4 # pings 4 times |
| Reference Jenkins: | |
| https://www.tutorialspoint.com/jenkins/index.htm | |
| Reference Virtualisation: | |
| https://www.tutorialspoint.com/virtualization2.0/index.htm | |
| Reference Vagrant: | |
| https://www.vagrantup.com/docs | |
| Vagrant up | |
| Vagrant ssh | |
| Vagrant halt | |
| Vagrant destroy |