User Tools

Site Tools


bash_class1

Lesson 1

Storm Hello everyone

blindndangerous heya 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 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?

blindndangerous nods.

CJ Yep

Bill T yes

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, should we start with hello world, or can you all do that as well?

blindndangerous That's just echo hello world right?

Storm yes, from terminal.

Storm everyone do:

echo "hello world"

Storm hello world gets displayed to the screen.

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 these are the 3 lines for the hello world program.

#!/bin/bash
echo "Hello world"
exit 0

Storm When you have the 3 lines save the file and close it.

Storm Ok, now for the explination

Storm Each script that executes in Linux should start with the shabang

Storm that is the line that goes #!/bin/bash

Keith You mean the ! in front of the code?

Storm well it's a number sign and a !

Keith Oh yeah woops. LOL

Storm it's the first line

Storm it tells Linux the path to the interpreter

Storm the next line, echo "hello world", is the actuall program.

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 A 0 means everything was great and the program was a success.

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 But, for example, you could have an exit code of 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 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.

Storm lol

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 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 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 First, you could use the whole path name. for example:

/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 so, to execute using the relative path you would type:

./hello.sh

Storm If you now go and type ./hello.sh you may get another surprise.

Storm It goes something like, ./hello.sh: permission denied.

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 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 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 700 gives you and only you read, write, and execute 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 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?

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 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 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 For our hello.sh program though, we want all permissions for ourself and none for anyone else.

blindndangerous 700

Storm To change permission use the chmod command.

Storm blindndangerous: excellent

Storm so, it would be:

chmod 700 hello.sh

blindndangerous Or if numbers aren't your thing you could do.

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.

CJ I think it's chown for ownership and chgrp for group.

Storm oh, I have never encountered chgrp

CJ Ah, maybe you can do it all with chown then.

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.

./hello.sh

Storm If you do it you should get Hello world.

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.

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 You can now do something pretty neat with your program.

Storm you can call it with 1 argument.

Storm An argument is something you pass into the program when you call it.

Storm so, for example, we can call it with:

./hello.sh Fluffy

Storm Now, your program outputs the words Hello Fluffy

Storm But, notice what happens when you call it with this argument:

Storm ./hello.sh fluffy the three headed dog

Storm You just get Hello fluffy

Storm Can anyone explain why?

Storm It's because that is really using 5 arguments, not just 1.

Storm arguments are delimited by spaces.

CJ NoddingNodding

Storm You may be wondering, "But what if my argument has a space in it?"

CJ Use quotation marks?

Jeff can you string them together using - or _

Storm CJ: has the right answer.

./hello.sh "Fluffy the three headed dog"

Storm will output Hello Fluffy the three headed dog

Jeff got it I think

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?

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!"

Storm CJ: Yep, from $1 through $9

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 It's because of the !

Storm So, if your argument has a ! in it you should use 'argument'

CJ Ah, because of the '!' before the trailing quotation mark?

./hello.sh 'Fluffy the three headed killer chicken!???'

Storm CJ: There shouldn't be any quotes in this one

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

CJ Ah, cool.

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 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?

Bill T 3

Storm Bill T: Awesome

Storm 2 inside quotes and one not

Storm Ok, so we have about 5 minutes left if anyone has questions before we close?

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.

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 We may write a spellchecker

Bill T wow

Storm we will probably discuss redirection and piping.

CJ Cool! Cool!

CJ Wow, I can't type tonight!

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.

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.

Jeff Absolutely

Storm thanks :)

bash_class1.txt · Last modified: 2013/07/03 14:27 (external edit)