diff --git a/advanced/learning_bash_scripting.md b/advanced/learning_bash_scripting.md index e10dac3..3315adb 100644 --- a/advanced/learning_bash_scripting.md +++ b/advanced/learning_bash_scripting.md @@ -1197,16 +1197,110 @@ done ## defining a function +```bash +#!/bin/bash + +function say_hello() { + echo "hello world" +} + +say_hello +say_hello +say_hello +``` + ## function arguments +```bash +#!/bin/bash + +function say_hello() { + echo "hello $1" +} + +say_hello +say_hello "Alice" +say_hello "Steve" "Camille" +``` + ## global vs local variable +### global example + +```bash +#!/bin/bash + +default="my friend" + +function say_hello() { + if ! [[ -z $1 ]]; then + default=$1 + fi + echo "hello $default" +} + +say_hello +say_hello "Alice" +say_hello +``` +### local example + +```bash +#!/bin/bash + +default="my friend" + +function say_hello() { + if ! [[ -z $1 ]]; then + local name=$1 + else + local name=$default + fi + echo "hello $name" +} + +say_hello +say_hello "Alice" +say_hello +``` + ## return values +```bash +#!/bin/bash + +function add_two_numbers() { + if [[ -z $1 ]] && [[ -z $2 ]]; then + echo "I need two arguments!" + return 1 + elif ! [[ "$1" =~ ^[0-9]+$ ]] || ! [[ "$2" =~ ^[0-9]+$ ]]; then + echo "arguments need to be numbers!" + return 2 + fi + echo "$1 + $2 = $(( $1 + $2 ))" + return 0 +} + +add_two_numbers +echo $? +add_two_numbers "Alice" "Bob" +echo $? +add_two_numbers 3 4 +echo $? +``` + ## the `command` builtin -[Ryan's tutorials](https://ryanstutorials.net/bash-scripting-tutorial/bash-functions.php) +```bash +#!/bin/bash +function ls () { + echo "I'm a function..." +} + +ls +command ls /etc/ssh/ +``` # Coding challenge - pipe or argument plus action!