If you used .BAT files to create shortcuts of long command lines
(I did a lot), this goal can be attained by inserting appropriate
alias lines (see example above) in profile or
.bash_profile. But if your .BATs were more
complicated, then you'll love the scripting language made
available by the shell: it's as powerful as good ol' QBasic, if
not more. It has variables, structures like while, for, case,
if... then... else, and lots of other features: it can be a good
alternative to a ``real'' programming language.
To write a script---the equivalent of a .BAT file under DOS---all
you have to do is write a standard ASCII file containing the
instructions, save it, then make it executable with the command
chmod +x <scriptfile>. To execute it, type its
name.
A word of warning. The system editor is called vi,
and in my experience most new users find it very difficult to
use. I'm not going to explain how to use it; please consult Matt
Welsh's book or search for a tutorial on the net. Suffice it here
to say that:
i then your text;
x;
vi whithout saving, type <ESC>
then :q!
:wq.
A good beginner editor is joe: invoking it by typing
jstar you'll get the same key bindings as the
DOS/Win editor. jed in WordStar or IDE mode is even
better. Please consult Section Where to Find
Applications to see where to get these editors.
Writing scripts under bash is such a vast subject it
would require a book by itself, and I will not delve into the
topic any further. I'll just give you an example of shell script,
from which you can extract some basic rules:
#!/bin/sh
# sample.sh
# I am a comment
# don't change the first line, it must be there
echo "This system is: `uname -a`" # use the output of the command
echo "My name is $0" # built-in variables
echo "You gave me the following $# parameters: "$*
echo "The first parameter is: "$1
echo -n "What's your name? " ; read your_name
echo notice the difference: "hi $your_name" # quoting with "
echo notice the difference: 'hi $your_name' # quoting with '
DIRS=0 ; FILES=0
for file in `ls .` ; do
if [ -d ${file} ] ; then # if file is a directory
DIRS=`expr $DIRS + 1` # DIRS = DIRS + 1
elif [ -f ${file} ] ; then
FILES=`expr $FILES + 1`
fi
case ${file} in
*.gif|*jpg) echo "${file}: graphic file" ;;
*.txt|*.tex) echo "${file}: text file" ;;
*.c|*.f|*.for) echo "${file}: source file" ;;
*) echo "${file}: generic file" ;;
esac
done
echo "there are ${DIRS} directories and ${FILES} files"
ls | grep "ZxY--%%WKW"
if [ $? != 0 ] ; then # exit code of last command
echo "ZxY--%%WKW not found"
fi
echo "enough... type 'man bash' if you want more info."
Under UNIX, the system language is C, love it or hate it. Scores of other languages (Java, FORTRAN, Pascal, Lisp, Basic, Perl, awk...) are also available.
Taken for granted that you know C, here are a couple of
guidelines for those of you who have been spoilt by Turbo C++ or
one of its DOS kin. Linux's C compiler is called gcc
and lacks all the bells and whistles that usually accompany its
DOS counterparts: no IDE, on-line help, integrated debugger, etc.
It's just a rough command-line compiler, very powerful and
efficient. To compile your standard hello.c you'll
do:
$ gcc hello.c
which will create an executable file called a.out.
To give the executable a different name, do
$ gcc -o hola hello.c
To link a library against a program, add the switch -l<libname>. For example, to link in the math library:
$ gcc -o mathprog mathprog.c -lm
(The -l<libname> switch forces
gcc to link the library
/usr/lib/lib<libname>.so; so -lm
links /usr/lib/libm.so).
So far, so good. But when your prog is made of several source
files, you'll need to use the utility make. Let's
suppose you have written an expression parser: its source file is
called parser.c and #includes two header files,
parser.h and xy.h. Then you want to use
the routines in parser.c in a program, say,
calc.c, which in turn #includes
parser.h. What a mess! What do you have to do to
compile calc.c?
You'll have to write a so-called Makefile, which
teaches the compiler the dependencies between sources and objects
files. In our example:
# This is Makefile, used to compile calc.c # Press the <TAB> key where indicated! calc: calc.o parser.o <TAB>gcc -o calc calc.o parser.o -lm # calc depends on two object files: calc.o and parser.o calc.o: calc.c parser.h <TAB>gcc -c calc.c # calc.o depends on two source files parser.o: parser.c parser.h xy.h <TAB>gcc -c parser.c # parser.o depends on three source files # end of Makefile.
Save this file as Makefile and type
make to compile your program; alternatively, save it
as calc.mak and type make -f calc.mak,
and of course RMP. You can invoke some help about the C
functions, that are covered by man pages, section 3; for example,
$ man 3 printf
To debug your programs, use gdb. info
gdb to learn how to use it.
There are lots of libraries available; among the first you may
want to use are ncurses (textmode effects), and
svgalib (console graphics). Many editors can act as
an IDE; emacs and jed, for instance,
also feature syntax highlighting, automatic indent, and so on.
Alternatively, get the package rhide from ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/.
It's a Borland IDE clone, and chances are that you'll like it.
If you feel brave enough to tackle X11 programming (it's not that difficult), there are several libraries that make writing X11 programs a breeze. The main sites to visit are those of GTK+, http://www.gtk.org, and Qt, http://www.troll.no. Gtk+ is a C-based widget set originally written for the graphic package The GIMP ( http://www.gimp.org), and is used by the Gnome environment. Kdeveloper is based on C++-based Qt, used by KDE. Most likely, you'll use one of these.
Some of the best tools for visual programming are Kdevelop for Qt, http://www.kdevelop.org, and Glade for GTK+, http://glade.pn.org. This page has more information: http://www.free-soft.org/guitool/.
Wouldn't it be nice if you could write code that compiled
seamlessly under Linux and Windows using
gcc? As of this writing, there are some widget sets
that allow for more-or-less stable multi-platform programming. As
far as stability and completeness are concerned though, I would
say that the choice is narrowed down to only one: FLTK, the Fast
Light Tool Kit http://www.fltk.org. It's amazingly
small, quick, and stable. It also has a semi-visual builder
called Fluid.