#+title: lesson 02 | course overview + the shell #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: * Links #+attr_html: :class links - [[../toc.org][TOC | Missing Semester]] - [[https://www.youtube.com/playlist?list=PLyzOVJj3bHQuloKGG59rS43e29ro7I57J][Playlist: Missing Semester]] *** timestamps :PROPERTIES: :CUSTOM_ID: timestamp :END: #+attr_html: :class playlist + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=54s][00:54 - control flow functions]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=227s][03:47 - sequential execution]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=425s][07:05 - standard input]] *current* + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=444s][07:24 - error code]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=517s][08:37 - logical operators]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=603s][10:03 - concatenate commands]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=645s][10:45 - common substitution]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=675s][11:15 - process substitution]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=935s][15:35 - comparison operator]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=1173s][19:33 - curly braces]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=1359s][22:39 - python script]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=1707s][28:27 - man command]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=2175s][36:15 - finding files]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=2190s][36:30 - grep]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=2573s][42:53 - fuzzy finder]] + [[https://www.youtube.com/watch?v=kgII-YWo3Zw&t=2649s][44:09 - history substring search]] * Notes ** bash *** spaces are critical with bash - this works: #+begin_src bash foo=bar echo $foo #+end_src - this doesn't: #+begin_src bash foo = bar echo $foo #+end_src - the output of that will be =zsh: command not found: foo= - what happens in the above example is that we are effectively calling the "foo" program with the arguments: "=" and "bar" *** quotes - you can use double or single quotes to print a value #+begin_src bash echo "Hello" #+end_src #+begin_src bash echo 'Hello' #+end_src - double quotes can interpolate variables #+begin_src bash echo "Value is $foo" #+end_src will return: =Value is bar= - single quotes can NOT interpoloate variables #+begin_src bash echo 'Value is $foo' #+end_src will return: =Value is $foo= ** sequential execution *** bash functions - mcd.sh #+begin_src bash mcd() { mkdir -p "$1" cd "$1" } #+end_src bash - creates a function that can be executed after loading - $1 is a global variable referring to the first parameter *** source - using source mcd.sh =source mcd.sh= - then carry out the function =mcd testdir= - this will create a new directory and cd into it as per the definied functioned *** variables - $0 -- name of the script we are currently in - if you run this in the shell it will display 'bash' - $1->$9 -- the first through ninth argument given to a script - $? -- the last error message - $_ --- last argument of the previous call - !! -- recreates the last call with it's arguments - use with sudo if you found your call needed a sudo and you don't feel like retyping it again #+begin_src bash ls -lah sudo !! #+end_src