Bash in 100 Seconds
Вставка
- Опубліковано 23 лип 2024
- Bash is the command line shell that you encounter when you open the terminal on most Unix operating systems, like MacOS and Linux. Learn how to create your own bash scripts to automate tasks on your computer.
#linux #compsci #100SecondsOfCode
🔗 Resources
Bash Reference www.gnu.org/software/bash/man...
Unix Shell History developer.ibm.com/tutorials/l...
Linux File System Explained • Linux Directories Expl...
🔥 Watch more with Fireship PRO
Upgrade to Fireship PRO at fireship.io/pro
Use code lORhwXd2 for 25% off your first payment.
🎨 My Editor Settings
- Atom One Dark
- vscode-icons
- Fira Code Font
📖 Topics Covered
- Bash Programming Tutorial
- Linux Command Line Basics
- Bash Scripting
- History of Unix Shells
- Learn to Code with Bash - Наука та технологія
It's called a SHELL as it hides the kernel
Wow I never thought of it like that :))
Wonders of the English language.
same lmao
Wow, thanks man. I never thought about it that way!
In macOS is no longer bash, but zsh.
Me neither. It’s like the German word for glove is literally “handshoe” but I never think of shoes when using it.
fireship is turning us into 10X developers without us even knowing it
It's ok, we'll just spend 90% of our time watching programming videos on UA-cam, and no one will know then :D
i am looking for partner who want to learn bash through co opearation
@@gfjffdgjroedsfdkdslmerrelb4357 How does this arrange works ? 🤔
@@gfjffdgjroedsfdkdslmerrelb4357 it's called a book
I am currently -10x dev
So, the main take-away from this video is that the operating system is a squishy snail inside a shell?
"bash the snail, crash the trail"
Os is different type of shell i think
@@saulgoodman5662 No. And i won't dare to define what's actually an OS, as too many opinionated definition are out there in the wild fighting for nothing.
A single binary, that's a first ^^ Even the monolithic Linux kernel isn't a single file.
I always though the shell protects the squishy human from the awesome power of the kernel, allowing you to weild the awesome power of Linux without getting hurt by grabbing the sword at the wrong end.
If it’s windows, then yes.
These 100-second videos are so underrated, no one else fully outlines a concept this well. I can see if it's worth learning before I invest my time. 🔥
So true. It got me into go and helped me with graphql back in the day.
i am looking for partner who want to learn bash through co opearation
There is also the learn x in y minutes website for quickly learning syntax of programming languages
"Rust in 100 seconds" would be cool
and WASM
@@janism94 He did WASM, at least 100 seconds of it and he said he plans to do a longer video soon.
I've heard Rust is complicated. Curious to see how Fireship would do it.
@@balu.92 it's not too bad honestly. I'd say the hardest is learning the borrow system and to work with the borrow checker
then zig
Some thoughts:
EDIT: Please stop telling me about `#!/bin/sh`. This video is specifically about bash and so is this comment. I am aware that posix sh... exists. If you want to write POSIX compliant scripts, use sh. If you want to write modern scripts, use BASH. Also: even if you use sh instead of bash, you may still be writing bash. The best way to test for that would be shellcheck.
Oh and `/bin/sh` is not specified ny posix either, so you'll probably still want to use `#!/usr/bin/env sh`.
- Please do not use `#!/bin/bash` or `#!/usr/bin/bash` as your shebeng. Instead use `#!/usr/bin/env bash`. This way, bash can be installed pretty much anywhere and it will still work.
- Please always put double qoutes around variables unless you specifically need them unqouted (which you do when loop over an array using a for-loop for example). This will prevent unintended splitting of strings. Note that in bash single qoutes ('), double qoutes (") and backticks (`) all have a different meaning. Speaking of backticks:
- Whenever you see a stackoverflow answer around processing a command's output, you will probably see someone using a command enclosed by backticks. This is deprecated and should not be used. Instead, you can use $(command). However, you should also double qoute that, so "$(command)".
- Variables don't have to be all-caps. However, if you use them like " $VARsomething" where only VAR is the variable name, you may need to use curly brackets to signal bash where the variable starts and ends: "${VAR}something". Those can also be used for substitutions, which I recommend you just look up ;).
Great comment. Thanks!
even better, use `#!/usr/bin/env -S bash` which can be generalized for any shell and any number of arguments before the script file.
Ah, substitutions are my wake-up coffee. Great advices.
"#!/usr/bin/env" isn't standard on all systems though. For some reason there is no standard for shebengs.
Bad idea, #!/usr/bin/env bash isn’t POSIX compliant and breaks compatibility on non-BASH systems. It’s better to use #!/bin/sh which is a symlink to the shell that is installed on the system.
Bash literally taught me the true power of programming beyond console and libraries.
Like it's the most useful language in automation, when you're just starting.
lol
add `set -e` at beginning to exit script if any command fails, `set -x` for printing commands that are being executed
very help full while developing script.
I had no idea. Thank you very much!
You can also execute your script with bash -x file.sh instead of commenting and uncommenting your set -x while debugging :)
can also use "set -v" fort verbose which simple echose the commands before executing them.
Thank you. Been learning to write bash scripts while doing my first today.
@@Pokefreak554 It's much easier to give x permission with chmod permanently than type bash -x each execution
That "bourne" -> "born again" evolution taught me how old the tradition of nerdy play on words is for programmers, even very important programmers.
My favourite one is "Nero Burning ROM", it's just so perfectly layered.
I like : gezerolee (french pun) and git !
After 5 years of avoiding bash scripts, I was literally at the crossroads to learn it for some specific task. I wake up to find this video in my feed. This guy is a mindreader.
UA-cam is the mind reader!
No you're data is just being collected. Try some blockers
@@mohos_a lol my thoughts exactly. google probably looked at his search history
Fun fact: You can use $0 instead of $SHELL to get the actual name of the current shell, not just the path
not working for me 🤷
@@maxrisku765 Really? What's the output of "echo $0"
That's because a bash program has it's process name located at $0 variable. Bash itself is a program running a "bash" process.
@@maxrisku765 it doesn't work on ur pretty cmd
doesnt work on Ubuntu
Would love a longer bash tutorial as it's syntax can get pretty rough, especially with flags inside if statements which is something unique to bash
Yea I was a little disappointed with the scope of this vid but at least it serves as an introduction to the technology for beginners
What do you mean with "flags inside if statements"?
It's an scripting language, it's not complicated
@@seerlite5256 I mean literally flags... inside if statements. Just as you would on the command line pass git commit the "-m" flag, in bash you can do stuff like if [[ -d dirName ]] which checks if dirName exists. Other flags I know of are -z & -n but theres probably more. (also if the double [[ ]] threw you for a loop, thats another odity of bash)
@@Metruzanca Oh so you mean flags for the `test` command. An if statement just runs a command and executes the blocks depeding on the return code:
if mkdir dir; then echo "dir created"; else echo "dir exists"; fi
It's the `test` command (AKA [, or the more sophisticated [[ in bash and zsh) that have different flags for what you're testing.
You can actually use `test` without any if statement. Very useful for one-liners:
[[ -f file.txt ]] && echo "File exists"
That was fast. Now to learn all the branching, variables, pattern matching and syntax intricacies it will take only a 100 weeks. Full-time.
Hello, what can I do with this Bash knowledge after? Can I be a sysadmin?
@@alexradu1921 check out his videos for that: ua-cam.com/channels/vA_wgsX6eFAOXI8Rbg_WiQ.html
@@alexradu1921 This knowledge is enough to start getting familiar with Linux/Unix systems, to learn how to start, stop and configure programs and services and how to read and write the shell scripts that manage your system. These scripts coordinate the system, starting from boot (system init).
It will take a few months of learning to become a sysadmin and years to master it.
@@alexradu1921 It's an important tool that you should be somewhat familiar with, but there's more to being a sysadmin than this (I'm a regular dev, so I might be missing stuff, but networking, hardware, IT-security quickly come to mind)
@@Gregorius421 I was like wth is bash because i had already been working in a linux/unix environment. Turns out i skipped quite a number of steps xD
Golang in 100 seconds.
Golang is marketing bullshit and an awful language made just so that graduates could copypaste CRUDs. The only good thing it has is a performant runtime.
@@arkrait04 I will admit that it got worse after they introduced the module system
Mission Impossible
@@arkrait04 which language do you prefer for backend?
@@balu.92 Rust all the way. Go has a simple syntax, but you have to reinvent the wheel too often.
3 hours of uni classes in 100 seconds. I wish I would have found your channel back in 2019 when I started my CS degree
No shot that was 3 hours of uni you should’ve went to a different school
@@khandmoIt kind of is, most system programming introductory course will have a chapter for SHELL and terminal. It usually finish in 2-4 classes, which is about 3 hours
Ruduty de s
wow I have been using bash for many years but this 100 seconds brought me so much new information I didn't know before, great job
I really love the animations of the topic logos in the beginning and end of the video. Nice details Jeff!
Literally never wrote shell script and then it happened that I needed to put some code in background processing to the OS and started practicing how to write shell script. Once I got a hang of it, never went back from there. One of the most amazing ways to automate terminal commands and especially more useful to listen directly from your app.
I just hate the quirkiness and the different standards (POSIX, BASH, ZSH, etc).
@@-morrow
The only standard from those three is POSIX. Bash and zsh are shells.
Also, why are you hating it, bash has --posix flag for that.
@@-morrow Then try MS Powershell - a standard that changes every year and requires modules to be loaded before many documented commands will work (and they'll never have a nice error like "blah blah not found"). I have bash scripts written over a decade ago that will work. The other weird part of PS is the | character sometimes behaves like a flag (|FL for full) and sometimes behaves like Linux pipe. PS is really non-intuitive and verbose and hinders everything you try to do (like defaulting to showing only the first few hundred results).
Wow, best 100 seconds about bash. Please do more series like this, bash 100 seconds part 1, part 2 and so on in all 100 seconds video. Short, but very informative. Keep up the good job
Another amazing 100 seconds.
Gives all the info u need quick and without padding or harsh opinions.
Need to hear something again, just pause and go back :D
Bash is possibly the most beautiful and manifoldly useful thing in computer science.
Learning to make simple scripts with Bash makes using Linux way better imo. It allows to automate tasks without installing anything. It's not fully portable but, for what it's meant to do, it's great!
Always a fan of short and straight to the point vids of Fireship
Perfect, that was everything I needed to know about bash to know whether or not it's worth investing any more time into learning it.
Hey variable names don't need to be all uppercase. By convention most variables set up by OS or programs are uppercase so it's usually a good idea not to make your variables uppercase. Doing that will prevent you from using and overwriting default's by accident.
I have some personal conventions that I follow: Any variable that is exported and intended to be read elsewhere is all caps, and usually "configuration" variables at the top of a script. I do use lowercase for "local" variables that are used only within the script itself.
Myself in college: Gosh, this Bash stuff is annoying to use. Good thing I just write Java for windows applications!
Job: Hey, so we want you to code up some linux containers to deploy our Java application inside. You happen to know shell scripting?
So true
Well I did try to use bash exclusively for my private projects but gave up once I needed YAML.
@Andai Because it's too clumsy, even with tools like yq. Especially once you start nesting several levels deep.
yeah most companies will want you to know how to use linux and shell, is important but one of the most boring things i have ever learned in life
Holy. I never knew how much I needed to see this video. thank you
Fireship is literally turning the topics that I am scared of thinking It's too hard to easy labeled ones. Thanks Fireship!
Golang/Rust in 100 Seconds would be great! And also: great video, as always.
Any chance we get a golang in 100 seconds video?
you make it look so easy to write bash scripts lol. Love your content man, keep it up!
your last tip about ending the command with & to run it in anothet thread saved me A TON! thanks a lot 🙏
You could see the result of command by running "jobs" .
Windows Users: **Confused screaming**
Love you fireship ❤️❤️
I just started learning bash a few weeks ago, this is a great intro!
This was really good, subscribed!
Fun fact, the “[“ symbol isn’t really part of the syntax but an alias of the “test” program. Both of which does exactly the same thing except that “[“ also checks for a closing “]”, which also isn’t part of the syntax but rather a parameter sent to the “[“ program.
and that probably explains why you need a space after '['
Regarding the background command, make sure to put nohup either in the line itself or when running the script to make sure the process is not killed upon session closing. (usually the most affected is SSH logins since every shell is a seperate session.)
nohup command & disown
😎 (disown prevents you from CTRL-Cing the command)
Bash is definitely the most useful thing ever created 🙏
love your 100 seconds videos. Thank you
Fireship's 2 min videos are more like video cheatsheets. So cool 👌👍
I'd love to see a 100s video on a reasonably complex design pattern, like decorator or visitor
I can't imagine explaining the visitor pattern in 100 seconds!! But I believe that someone who understands it better certainly could, and quote easily.
i am looking for partner who want to learn bash through co opearation
i love your editor settings !
This 2 minute video was enough to get me started righting some scripts.
0:17 Command-line interpreters (CLIs) were not a revolutionary concept in 1971. After all, every interactive OS had them, and there were quite a few by that time. What was revolutionary was the idea that the CLI ran as just another ordinary process with no special privileges, rather than being built into the OS.
Correct. But there were other revolutionany things about the concept. One of them was that it could be replaced by other products if you so wished.
command-line interface
Secxy
awesome video. more in depth version soon?
Learned more than in a 3 Hour Tutorial! Keep it up!
Aaaawesome....you pointed out all the salient features in 100 secs. Someone watching carefully could start writing a script. Of course that would be the start of the learning curve.
Wow that brought back memories of cs class. Aah the good old days 🤗 still thinking Id be able to make my own Linux distribution.
next video: quick overview of simple commandline apps like
grep, cat, echo, sed, curl, awk, -ed-
Awk is a hole scripting language it isn't simple
Bestest coding playlist, keep going men👍
The intro animation was fire!!🔥
JAM Stack in 100 sec.
Haskell in 100 seconds.
Good luck, you're gonna need it!
Daaaaaaaamn!! the music used in the background made me eager to learn every single command in bash
I wrote the O'Reilly book on Bash. It's nice to see such a nice concise video about Bash.
C++ in 100s. I think it deserves one given how much of the underlying web infrastructure is built with it.
can segue into V8 nicely
Fully agree.
Great video! Note however that by convention variables shouldn't be all caps unless they're environment variables.
Or constants
Or special variables like $RANDOM
would you elaborate on what environment variables are briefly?
@@vanarpilipap302 Environment variables are variables that are shared to child processes. For example let's say I start a bash shell, set HELLO=1 and then I open python from the Bash shell. If it's a regular variable, Python won't know anything about it. However, if I mark it as an environment variable, Python will be able to access it via its API (os.environ). This is useful to pass settings to programs across many subprocesses. Some operating systems also let you configure "global" environment variables so that all shells start with those values by default.
That's not the whole picture.... POSIX forces to any variable that needs to be exported has to be upper case or "_" . That includes what you call "environment variables" which really are bash RESERVED variables.
Most old school shell programers like me always use uppercase because on those days, there was no syntax coloring, and in bash is really easy to mix commands, scripts and variables if all of them are lowercase.
For those two reasons, you will see uppercase variables in bash scripts everywhere even from very respected sources.
Wow. Just needed this. Thanks!
Amazing video. Thank you 😇
A couple of years ago macOS changed the default shell to zsh.
Before Mac OS X 10.3 Panther the default shell was tcsh.
Of course you can always change your shell by typing its name.
Right. Or, just execute the script with bash by prefixing with “bash” in the terminal.
Fireship posts video. I click.
An interesting source for learning good content in a short time. Thanks for sharing.
I think & at the end of command just returns shell to you for entering new command and won't send execution to the background. For putting execution at background, we can use supervisorctl or "nohup &"
Bash shell is love ❤️
The Bourne Again Shell Shell
incredibly easy to learn but takes a long time to master
great content as always
I needed this.
Great video as usual !
Kafka and MQ in general in 100s would be great 😁
I see the notification for fireship new video, I click. Simple as that
Glad I'm not the only one
*fireship
@@weiiswurst *Fireship
Awesome summary!
Answered all my questions in 100 seconds. Thanks
"Lua in 100 seconds" would be nice. Both Awesome wm (one of the most used tiling window managers) and Neovim (the best text editor of course) are both written in lua.
Lua and Neovim are trash
I've learnt Lua recently and it's such a fun to use language. I don't know why nobody uses it for scripting instead of bash.
@@skylinefx049 w
w
w
w
w
w
w
who asked you
@@007arek Because it's not zero indexed
@@manbillions8326 In Lua it makes sense with associative arrays. AWK does something similar, white spaces are stored in 0 index.
Bash beyond 100 seconds.
This dude is God Gift for Developers😍
Loved the video, thanks
The person who watches your videos must know everything about computer😢
I like it when you do “something in 100s” but then go longer after to go more into details.
Educational and fun
Thank you for this
Love the concept
One of the best things about bash is that it's immediately available on Linux. No matter what one installs on the top of the operative system, the bash is there.
Except it is a minimal install then only sh is available .
@@xrafter Or an embedded system.
The default shell on macOS is now zsh. It switched away from Bash when Bash switched its license to GPL v3.
This was amazing. Thanks. Love and respect from Istanbul.
dude thanks, this video helped me a lot, 100s is more than enough!
Quick correction, Linux is NOT based on Unix. It's a Unix-like operating systems based on the Linux kernel.
Waiting for The Friendly Interactive Shell (FISH) in 100 seconds now
Not POSIX
@@Zephyrus0 for a personal machine, I truly don't care about POSIX compliance.
Makes sense, but you would need a POSIX shell if you are using someone's scripts or vice versa
MAN, how the heck did you explain it that well in so little time? You're a fucking machine of great content
I learned more about bash in this short video than in the first 4 lectures my professor gave.
I have been developing software for over a decade and I still hate bash. It would be awesomeness if you wanted to do a longer bash video, that deals with all the counter intuitive intricasies in a way that you can almost make sense of it. Just praying 😃
The default shell on macOS is now zsh not bash anymore
He addresses that in the video, he mentions "pre-catalina" in the graphic
That's why noted it with "pre-catalina".
Ah my bad sorry
@@Fireship I have a question: if the shebang correctly references Bash wouldn’t the terminal invoke Bash to run the script? I know ZSH is the default shell but Bash is included along ZSH as well.
Also, it’d be great to have a “ZSH in 100 seconds” to know the biggest differences and/or a “beyond 100 seconds”. That’d be really awesome, I always wanted to jump on Bash scripting but it seems so daunting.
Thanks for the hard work!
@@AlejandroLZuvic "I have a question: if the shebang correctly references Bash wouldn’t the terminal invoke Bash to run the script? I know ZSH is the default shell but Bash is included along ZSH as well." Yeah I'd assume so
Learnt something new as always
you should also create long videos as well, your content is the best
"Command Prompt" in 100 seconds please
Nuxt in 100 Seconds? :)
Damn another banger video
awesome tutorial!
Please explain data science, machine learning or AI in 100 Seconds
I spend my life writing bash scripts. I get paid for it as well which is nice 😂
I like this 100-second video style better than the new ones. :)
That was great!