top | item 3447475

Introduction to Unix shell

87 points| digitalnalogika | 14 years ago |matt.might.net | reply

22 comments

order
[+] peterwwillis|14 years ago|reply
I actually got to know Unix with a little paperback reference book: http://www.amazon.com/Pocket-Guide-Unix-Michele-Petrovsky/dp... After you learn the "unix basics" the most valuable thing I found was reading the description of every single common Unix command. I'm pretty sure I also had a small pocket reference which had the same information in a more compact form, and I found myself reading that everywhere I went. Here's a similar book from O'Reilly: http://shop.oreilly.com/product/9781565924277.do

Here's another little guide which goes over all the general topics: https://docs.google.com/viewer?a=v&q=cache:4oBqPlq1f7oJ:...

[+] agumonkey|14 years ago|reply
I skip a beat, but any shell user will need this at some point in his life : http://mywiki.wooledge.org/

So many 'I wish I'd known earlier'

Other links straight from #bash@freenode

Topic for #bash is: FAQ: http://mywiki.wooledge.org/BashFAQ | Guide: http://mywiki.wooledge.org/BashGuide | ref: http://xrl.us/bhk9ww | http://wiki.bash-hackers.org/ | USE MORE QUOTES!: http://www.grymoire.com/Unix/Quote.html | Scripts and more: http://www.shelldorado.com/ | New official help mailing list: http://tx0.org/31f

They're all deeply useful

[+] JoelMcCracken|14 years ago|reply
Only slightly on topic, but the choice of shell discussion always interests me.

Within the open source world, I hear about sh, bash, zsh, fish, and occasionally scsh.

It is _only_ in the academic world that I ever hear discussion about things like csh or tcsh.

Anyone know why?

[+] bodyfour|14 years ago|reply
Probably just a historical artifact; it's common at places with long Unix histories.

The first UNIX machine that I used (circa 1985-1986) had one shell: /bin/sh. No command history, no anything. If you made a typo you had to re-type the whole line, being more careful this time (of course this is before we had graphical terminals with cut&paste) In fact, it was a common habit that if you were going to run a complicated command you'd write a one-off shell script, just so you could edit it if it didn't work.

After some months we managed to get a copy of /bin/csh, and it was a godsend. Now we had a history buffer.. you couldn't do anything "modern" like editing the command line with arrow keys (and certainly no tab-completion yet; some later versions of csh supported completion using the escape key however) However you had things like "!!", "!$", "^foo^bar" for at least modifying the last command run. All of these csh-isms later appeared in bash, btw.

csh was simply such a huge improvement for interactive use you could hardly not use it. The only downside was that it had its own incompatible scripting language which was supposed to be more C-like but actually was just fairly busted. Worse, this was before "#!/bin/sh" was understood by the kernel so scripts just broke: for some reason anything that started with a comment, csh would decide to run itself and fail. However there was a hack where if you started the script with a line that just had ":" it would pass it to /bin/sh instead. So we updated all our scripts and life was good.

A few years later when tcsh was getting popular, migrating to it was natural. You could keep your existing .cshrc/.login files and get all of the modern tab-competing, line-editing goodness. There was a time in the 1990s when just about everybody seemed to be running tcsh except for a handful of ksh fans.

Once you're on tcsh the motivation to move to bash is smaller.. after all, most things work OK. Personally I only converted about 5 years ago: I got sick of having to install tcsh on new machines so I sat down and rewrote my 800-line .cshrc that I'd accumulated over 20 years.

I'm glad I did though. There are often times when I just want to write a short script on the command line (something a simple as "for x in a b c; do blah; done") but I could never remember the csh syntax. So I was always dropping from csh to sh to run them or even doing "sh -c '...'" It's much nicer just being able to type that at my shell prompt.

[+] gammarator|14 years ago|reply
This is a bit chicken-and-egg, but every account I've been given on shared UNIX systems at universities (n >= 7) has used (t)csh as the default shell.
[+] burgerbrain|14 years ago|reply
IIRC, the default shell on many BSDs is tcsh. I guess it was probably csh before that in some point in history. That might have something to do with it.
[+] clvv|14 years ago|reply
> It's a near certainty that a bash interpreter will be available on a Unix system; bash has become the JVM of the Unix world.

Don't assume this if you want your shell scripts to be portable. Follow posix standard instead.

[+] neilparikh|14 years ago|reply
I found what seems to be a small error in your article. In the vim section it says "To switch to command mode from insertion mode, press i." I think it should say "To switch from command mode to insertion mode, press i."
[+] gphil|14 years ago|reply
For some reason I never thought of doing this before:

        alias might='ssh [email protected]'
So you can do things like "might df" as he mentions. This seems super-useful if you deal with remote servers.
[+] funkah|14 years ago|reply
Tip: The default Bourne-shell-compatible prompts end with $ while the default C-shell-compatible prompts end with % or >. (zsh is an exception to this.) Root (super-user) prompts often end with # by default. Of course, this behavior is configurable.

Gee, who could ever find that confusing?!

As much as I love Unix now, I can't help but understand when the author says students see the above as a "baroque regression". It just seems so ridiculously arcane when you're used to clicking on things. Of course things are much better once you're on the other side of the learning curve, but it can be a doozy.

[+] dredmorbius|14 years ago|reply
Well, the above descriptions of shell prompts are the defaults.

If you strip out all configuration files, this is the behavior you'll see.

Of course, it's better to explicitly check to see what shell you're running ('help', 'ps up $$', grep $UID /etc/passwd | cut -d: -f7').

[+] SomeOtherGuy|14 years ago|reply
>It's a near certainty that a bash interpreter will be available on a Unix system

Someone confused "linux" and "unix". Linux systems almost certainly have bash installed. BSDs and commercial unixes don't.