User Tools

Site Tools


bash_class1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
bash_class1 [2013/05/10 16:50]
Rob Whyte
bash_class1 [2019/02/09 10:31] (current)
Line 2: Line 2:
    
 Storm Hello everyone Storm Hello everyone
- blindndangerous heya storm  +  
- Storm Just 5 minutes to wait for stragglers lol +blindndangerous heya storm  
- Bill T hi storm+  
 +Storm Just 5 minutes to wait for stragglers lol 
 +  
 +Bill T hi storm 
 + 
 Storm Ok, so it's 10:00PM EDT, time to get started. Storm Ok, so it's 10:00PM EDT, time to get started.
 + 
 Storm I guess the first order of business is to find out what everyone knows already. Storm I guess the first order of business is to find out what everyone knows already.
-Storm So, does everyone know basic terminal commands, how to navigate directories, create new directories, list the contents of a directory, etc?+  
 +Storm So, does everyone know basic terminal commands, how to navigate directories, create new directories, list the   
 +contents of a directory, etc? 
 + 
 blindndangerous nods. blindndangerous nods.
 + 
 CJ Yep CJ Yep
 + 
 Bill T yes Bill T yes
 + 
 Burt sure enough Burt sure enough
 + 
 Storm Ok then, for our work, let's all create the directory intro-to-bash and change in to it. Storm Ok then, for our work, let's all create the directory intro-to-bash and change in to it.
 + 
 Storm Ok, should we start with hello world, or can you all do that as well? Storm Ok, should we start with hello world, or can you all do that as well?
 + 
 blindndangerous That's just echo hello world right? blindndangerous That's just echo hello world right?
 + 
 Storm yes, from terminal. Storm yes, from terminal.
 + 
 Storm everyone do: Storm everyone do:
-echo "hello world"+  echo "hello world" 
 + 
 Storm hello world gets displayed to the screen. Storm hello world gets displayed to the screen.
-Storm but, to put it into a file actually takes3 lines of code.+  
 +Storm but, to put it into a file actually takes 3 lines of code. 
 + 
 Storm So, if you can open the file hello.sh and then switch back to this window I will show you the lines and explain them. Storm So, if you can open the file hello.sh and then switch back to this window I will show you the lines and explain them.
 + 
 Storm these are the 3 lines for the hello world program. Storm these are the 3 lines for the hello world program.
-#!/bin/bash +  #!/bin/bash 
-echo "Hello world" +  echo "Hello world" 
-exit 0+  exit 0 
 + 
 Storm When you have the 3 lines save the file and close it. Storm When you have the 3 lines save the file and close it.
 + 
 Storm Ok, now for the explination Storm Ok, now for the explination
 + 
 Storm Each script that executes in Linux should start with the shabang Storm Each script that executes in Linux should start with the shabang
 + 
 Storm that is the line that goes #!/bin/bash Storm that is the line that goes #!/bin/bash
 + 
 Keith You mean the ! in front of the code? Keith You mean the ! in front of the code?
 + 
 Storm well it's a number sign and a ! Storm well it's a number sign and a !
 + 
 Keith Oh yeah woops. LOL Keith Oh yeah woops. LOL
 + 
 Storm it's the first line Storm it's the first line
 + 
 Storm it tells Linux the path to the interpreter Storm it tells Linux the path to the interpreter
 + 
 Storm the next line, echo "hello world", is the actuall program. Storm the next line, echo "hello world", is the actuall program.
 + 
 Storm It prints the words Hello world to the screen. Storm It prints the words Hello world to the screen.
 + 
 Storm the final line exits the program and sends the return code to the OS Storm the final line exits the program and sends the return code to the OS
 + 
 Storm A 0 means everything was great and the program was a success. Storm A 0 means everything was great and the program was a success.
 + 
 Storm anything else means there were errors. Storm anything else means there were errors.
 + 
 Storm You set the code yourself when you exit the program. This, of course, means you have to check for errors. Storm You set the code yourself when you exit the program. This, of course, means you have to check for errors.
 + 
 Storm But, for example, you could have an exit code of 500 Storm But, for example, you could have an exit code of 500
-exit 500 +  exit 500 
-Storm and the 500 can be a code for whatever you like, but it's a good idea to write down your error codes so you don't forget what they stand for.+  
 +Storm and the 500 can be a code for whatever you like, but it's a good idea to write down your error codes so you don'  
 +forget what they stand for. 
 + 
 Storm So, when you write really big programs, make a chart for errors and say, for example Storm So, when you write really big programs, make a chart for errors and say, for example
 + 
 500 is the error for when the user didn't say pleas and hop on one leg while facing a full moon. 500 is the error for when the user didn't say pleas and hop on one leg while facing a full moon.
 + 
 Storm lol Storm lol
 + 
 Storm but seriously, you could write something like 500 is the error for when a file does not exist. Storm but seriously, you could write something like 500 is the error for when a file does not exist.
 + 
 Storm Ok, so now we have the 3 lines of hello.sh explained it's time to execute the program. Storm Ok, so now we have the 3 lines of hello.sh explained it's time to execute the program.
-Storm You will find, if you type hello.sh that you will get a warning from bash that the file wasn't found and it will go back to your prompt+  
 +Storm You will find, if you type hello.sh that you will get a warning from bash that the file wasn't found and it will   
 +go back to your prompt 
 + 
 Storm This is one of the security strengths of Linux. Not every directory is in the execution path. Storm This is one of the security strengths of Linux. Not every directory is in the execution path.
 + 
 Storm So, in order for the program to execute you have to tell it in which directory to look. Storm So, in order for the program to execute you have to tell it in which directory to look.
 + 
 Storm there are a couple of ways to do this. Storm there are a couple of ways to do this.
 + 
 Storm First, you could use the whole path name. for example: Storm First, you could use the whole path name. for example:
-/home/stormdragon/intro-to-bash/hello.sh +  /home/stormdragon/intro-to-bash/hello.sh 
-Storm That's a lot to type though, and a lot to remember. So instead of doing it that way, you can use the relative path name. to do that, you just use the . for the current directory.+  
 +Storm That's a lot to type though, and a lot to remember. So instead of doing it that way, you can use the relative   
 +path name. to do that, you just use the . for the current directory. 
 + 
 Storm so, to execute using the relative path you would type: Storm so, to execute using the relative path you would type:
-./hello.sh+  ./hello.sh 
 + 
 Storm If you now go and type ./hello.sh you may get another surprise. Storm If you now go and type ./hello.sh you may get another surprise.
 + 
 Storm It goes something like, ./hello.sh: permission denied. Storm It goes something like, ./hello.sh: permission denied.
 + 
 Storm This is another of Linux's security strengths. Storm This is another of Linux's security strengths.
-Storm when you use Linux you are in control. You are the boss, nothing can run without your permission. It's one thing that makes it so difficult to write viruses for Linux.+  
 +Storm when you use Linux you are in control. You are the boss, nothing can run without your permission. It's one thing   
 +  
 +that makes it so difficult to write viruses for Linux. 
 + 
 Storm Now we could probably spend a whole class, maybe even 2, on permissions. I don't really understand them as well as I should. Storm Now we could probably spend a whole class, maybe even 2, on permissions. I don't really understand them as well as I should.
 + 
 Storm But, there are 2 ways to set them. when I was taking programming classes I learned to use the numeric way Storm But, there are 2 ways to set them. when I was taking programming classes I learned to use the numeric way
-Storm there are 3 numbers in setting permission. The first number is for you personally, the second is for users on your computer, and the third is for all other users, people connecting from the internet etc.+  
 +Storm there are 3 numbers in setting permission. The first number is for you personally, the second is for users on   
 +your computer, and the third is for all other users, people connecting from the internet etc. 
 + 
 Storm Here are the more common permissions and what they do. Storm Here are the more common permissions and what they do.
 + 
 Storm 700 gives you and only you read, write, and execute access. Storm 700 gives you and only you read, write, and execute access.
 + 
 Storm 600 gives you read and write access Storm 600 gives you read and write access
 + 
 Storm 777 is a big bad evil no no. It gives everyone everywhere read, write, and execute access. Storm 777 is a big bad evil no no. It gives everyone everywhere read, write, and execute access.
 + 
 Storm 666 is everyone read, and write access. It's not used all that much as far as I know. Storm 666 is everyone read, and write access. It's not used all that much as far as I know.
 + 
 Burt a doubt, the second number is for group, which would not be everyone who uses the computer, but could be; or am I wrong? Burt a doubt, the second number is for group, which would not be everyone who uses the computer, but could be; or am I wrong?
 + 
 Storm Burt: Like I said, I don't really know everything about permissions, but I believe it is for everyone on the computer. Storm Burt: Like I said, I don't really know everything about permissions, but I believe it is for everyone on the computer.
 + 
 Storm If you are installing a program system wide it uses 755 permission Storm If you are installing a program system wide it uses 755 permission
 + 
 Storm this is execute access for everyone and read access for everyone too. Storm this is execute access for everyone and read access for everyone too.
 + 
 CJ The middle number sets the permissions for the other members of the group. for CJ The middle number sets the permissions for the other members of the group. for
 + 
 CJ When you run 'ls' it'll give you the owner and group for each file. CJ When you run 'ls' it'll give you the owner and group for each file.
 + 
 Storm yep, and ls -l shows permissions and everything. Storm yep, and ls -l shows permissions and everything.
 + 
 Storm For our hello.sh program though, we want all permissions for ourself and none for anyone else. Storm For our hello.sh program though, we want all permissions for ourself and none for anyone else.
 + 
 blindndangerous 700 blindndangerous 700
 + 
 Storm To change permission use the chmod command. Storm To change permission use the chmod command.
 + 
 Storm blindndangerous: excellent Storm blindndangerous: excellent
 + 
 Storm so, it would be: Storm so, it would be:
-chmod 700 hello.sh+  chmod 700 hello.sh 
 + 
 blindndangerous Or if numbers aren't your thing you could do. blindndangerous Or if numbers aren't your thing you could do.
-blindndangerous chmod u+rwx,g-rwx,o-rwx+  chmod u+rwx,g-rwx,o-rwx 
 + 
 Storm As a side note, and I am not really prepared for going in to this, I haven't done the research, dealing with groups and ownership is done using the chown command. Storm As a side note, and I am not really prepared for going in to this, I haven't done the research, dealing with groups and ownership is done using the chown command.
 + 
 CJ I think it's chown for ownership and chgrp for group. CJ I think it's chown for ownership and chgrp for group.
 + 
 Storm oh, I have never encountered chgrp Storm oh, I have never encountered chgrp
 + 
 CJ Ah, maybe you can do it all with chown then. CJ Ah, maybe you can do it all with chown then.
 + 
 blindndangerous I wouldn't touch chown unless you have to blindndangerous I wouldn't touch chown unless you have to
 + 
 Storm So, putting all this together, we have now set permission to 700 and we can use the relative path to execute the file. Storm So, putting all this together, we have now set permission to 700 and we can use the relative path to execute the file.
-./hello.sh+  ./hello.sh 
 + 
 Storm If you do it you should get Hello world. Storm If you do it you should get Hello world.
 + 
 Bill T Why? Bill T Why?
 + 
 blindndangerous The only time I use chown is when I want to give something to another user. For example, I built an idlerpg bot from source, but I didn't want to be the run to have to run it, so I did chown -R irc:irc idlerpg to give it to the user irc and the group irc. blindndangerous The only time I use chown is when I want to give something to another user. For example, I built an idlerpg bot from source, but I didn't want to be the run to have to run it, so I did chown -R irc:irc idlerpg to give it to the user irc and the group irc.
 + 
 Storm We still have about 20 minutes left, so I'll do a bit on command line arguments. Storm We still have about 20 minutes left, so I'll do a bit on command line arguments.
 + 
 Storm If you open your hello.sh file and change the word world inside the quotes to $1 then save and close the file Storm If you open your hello.sh file and change the word world inside the quotes to $1 then save and close the file
 + 
 Storm You can now do something pretty neat with your program. Storm You can now do something pretty neat with your program.
 + 
 Storm you can call it with 1 argument. Storm you can call it with 1 argument.
 + 
 Storm An argument is something you pass into the program when you call it. Storm An argument is something you pass into the program when you call it.
 + 
 Storm so, for example, we can call it with: Storm so, for example, we can call it with:
-./hello.sh Fluffy+  ./hello.sh Fluffy 
 + 
 Storm Now, your program outputs the words Hello Fluffy Storm Now, your program outputs the words Hello Fluffy
 + 
 Storm But, notice what happens when you call it with this argument: Storm But, notice what happens when you call it with this argument:
-Storm ./hello.sh fluffy the three headed dog+  Storm ./hello.sh fluffy the three headed dog 
 + 
 Storm You just get Hello fluffy Storm You just get Hello fluffy
 + 
 Storm Can anyone explain why? Storm Can anyone explain why?
 + 
 Storm It's because that is really using 5 arguments, not just 1. Storm It's because that is really using 5 arguments, not just 1.
 + 
 Storm arguments are delimited by spaces. Storm arguments are delimited by spaces.
 + 
 CJ NoddingNodding CJ NoddingNodding
 + 
 Storm You may be wondering, "But what if my argument has a space in it?" Storm You may be wondering, "But what if my argument has a space in it?"
 + 
 CJ Use quotation marks? CJ Use quotation marks?
 + 
 Jeff can you string them together using - or _ Jeff can you string them together using - or _
 + 
 Storm CJ: has the right answer. Storm CJ: has the right answer.
-./hello.sh "Fluffy the three headed dog"+  ./hello.sh "Fluffy the three headed dog" 
 + 
 Storm will output Hello Fluffy the three headed dog Storm will output Hello Fluffy the three headed dog
 + 
 Jeff got it I think Jeff got it I think
 + 
 Storm jeff: That will work, but sometimes you want spaces and - _ just won't do lol Storm jeff: That will work, but sometimes you want spaces and - _ just won't do lol
 + 
 Storm What happens though if you are excited because fluffy suddenly became a three headed killer bunny? Storm What happens though if you are excited because fluffy suddenly became a three headed killer bunny?
 + 
 CJ and I'm assuming without the quotes, the parameters are $1, $2, $3 and so on? CJ and I'm assuming without the quotes, the parameters are $1, $2, $3 and so on?
-./hello.sh "Fluffy the three headed killer bunny!"+  ./hello.sh "Fluffy the three headed killer bunny!" 
 + 
 Storm CJ:  Yep, from $1 through $9 Storm CJ:  Yep, from $1 through $9
 + 
 Storm CJ: But the quotes are important, I'm not just rambling lol Storm CJ: But the quotes are important, I'm not just rambling lol
 + 
 Storm If you run hello.sh with that argument you will most likely get a weird error. Storm If you run hello.sh with that argument you will most likely get a weird error.
 + 
 Storm It's because of the ! Storm It's because of the !
 + 
 Storm So, if your argument has a ! in it you should use 'argument' Storm So, if your argument has a ! in it you should use 'argument'
 + 
 CJ Ah, because of the '!' before the trailing quotation mark? CJ Ah, because of the '!' before the trailing quotation mark?
-./hello.sh 'Fluffy the three headed killer chicken!???'+  ./hello.sh 'Fluffy the three headed killer chicken!???' 
 + 
 Storm CJ: There shouldn't be any quotes in this one Storm CJ: There shouldn't be any quotes in this one
 + 
 Storm cj oh, I misread Storm cj oh, I misread
 + 
 Storm cj yes, the ! causes all the problems if used with quotes, but when used with apostrophy it is ok Storm cj yes, the ! causes all the problems if used with quotes, but when used with apostrophy it is ok
 + 
 CJ Ah, cool. CJ Ah, cool.
 + 
 Storm Using the dollar number method we can accept up to 9 arguments. Storm Using the dollar number method we can accept up to 9 arguments.
 + 
 Storm so, you can theoretically open your hello.sh and after $1 put a space then $2 $3 $4 etc. Storm so, you can theoretically open your hello.sh and after $1 put a space then $2 $3 $4 etc.
-Storm Each argument is delimited with a space, but you can also put each argument inside quotes and add spaces to the individual arguments that way too. +  
-./hello.sh "mr. and mrs." Smith "Expert Assassins"+Storm Each argument is delimited with a space, but you can also put each argument inside quotes and add spaces to the   
 +individual arguments that way too. 
 +  ./hello.sh "mr. and mrs." Smith "Expert Assassins" 
 + 
 Storm how many arguments does that line contain? Storm how many arguments does that line contain?
 + 
 Bill T 3 Bill T 3
-Storm Bill_T_: Awesome+  
 +Storm Bill T: Awesome 
 + 
 Storm 2 inside quotes and one not Storm 2 inside quotes and one not
 + 
 Storm Ok, so we have about 5 minutes left if anyone has questions before we close? Storm Ok, so we have about 5 minutes left if anyone has questions before we close?
 + 
 CJ ^5 Bill_T_ CJ ^5 Bill_T_
 + 
 Storm Well, if no one has any questions, I think I will call it quits for now. I'll post the next time on Vinux mail list and on @vinuxnews twitter account. Storm Well, if no one has any questions, I think I will call it quits for now. I'll post the next time on Vinux mail list and on @vinuxnews twitter account.
 + 
 CJ Any hints at what topics will be covered in the next class? in  CJ Any hints at what topics will be covered in the next class? in 
 + 
 Storm More command line argument stuff, variables, and if there's time the while loop Storm More command line argument stuff, variables, and if there's time the while loop
 + 
 Storm We may write a spellchecker Storm We may write a spellchecker
 + 
 Bill T wow Bill T wow
 + 
 Storm we will probably discuss redirection and piping. Storm we will probably discuss redirection and piping.
 + 
 CJ Cool! Cool! CJ Cool! Cool!
 + 
 CJ Wow, I can't type tonight! CJ Wow, I can't type tonight!
 + 
 Storm bash is one of those languages that can be real powerful real fast Storm bash is one of those languages that can be real powerful real fast
 + 
 CJ or maybe it's deleting I'm having trouble with. CJ or maybe it's deleting I'm having trouble with.
 + 
 Storm Thanks for coming everyone, and if you have any questions pleas contact me on the #vinux channel irc.vinuxproject.org Storm Thanks for coming everyone, and if you have any questions pleas contact me on the #vinux channel irc.vinuxproject.org
 + 
 CJ Thanks a lot storm! I'm looking forward to the next class. CJ Thanks a lot storm! I'm looking forward to the next class.
 + 
 Jeff Absolutely Jeff Absolutely
 + 
 Storm thanks :) Storm thanks :)
 + 
 +
bash_class1.1368168629.txt.gz · Last modified: 2019/02/09 10:31 (external edit)