下一页 上一页 目录

10. 编程入门

10.1 Shell 脚本:打了激素的 .BAT 文件

如果您曾经使用 .BAT 文件来创建长命令行快捷方式(我经常这样做),那么可以通过在 profile.bash_profile 中插入适当的别名行(请参阅上面的示例)来实现此目的。但是如果您的 .BAT 文件更复杂,那么您会喜欢 shell 提供的脚本语言:它与优秀的 QBasic 一样强大,甚至更强大。它具有变量、诸如 while、for、case、if... then... else 之类的结构以及许多其他功能:它可以很好地替代“真正的”编程语言。

要编写脚本(相当于 DOS 下的 .BAT 文件),您所要做的就是编写一个包含指令的标准 ASCII 文件,保存它,然后使用命令 chmod +x <脚本文件> 使其可执行。要执行它,请输入其名称。

一个警告。系统编辑器称为 vi,根据我的经验,大多数新用户都发现它非常难用。我不打算解释如何使用它;请查阅 Matt Welsh 的书或在网上搜索教程。这里只需说明:

一个好的初学者编辑器是 joe:通过键入 jstar 调用它,您将获得与 DOS/Win 编辑器相同的按键绑定。jed 在 WordStar 或 IDE 模式下甚至更好。请查阅 在哪里找到应用程序 部分,了解在哪里可以获得这些编辑器。

bash 下编写脚本是一个非常广泛的主题,它本身就需要一本书,我不会进一步深入探讨这个主题。我只会给您一个 shell 脚本的示例,您可以从中提取一些基本规则


#!/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."

10.2 亲自尝试 C 语言

在 UNIX 下,系统语言是 C 语言,无论你喜欢与否。还有许多其他语言(Java、FORTRAN、Pascal、Lisp、Basic、Perl、awk...)也可用。

假设您了解 C 语言,这里为那些被 Turbo C++ 或其 DOS 同类宠坏的人提供一些指导。Linux 的 C 编译器称为 gcc,它缺少通常伴随其 DOS 同类产品的所有花里胡哨的东西:没有 IDE、在线帮助、集成调试器等。它只是一个粗糙的命令行编译器,非常强大且高效。要编译您的标准 hello.c,您将执行:

$ gcc hello.c

这将创建一个名为 a.out 的可执行文件。要为可执行文件指定不同的名称,请执行:

$ gcc -o hola hello.c

要将库链接到程序,请添加开关 -l<库名>。例如,要链接数学库:

$ gcc -o mathprog mathprog.c -lm

-l<库名> 开关强制 gcc 链接库 /usr/lib/lib<库名>.so;因此 -lm 链接 /usr/lib/libm.so)。

到目前为止,一切都很好。但是当您的程序由多个源文件组成时,您需要使用实用程序 make。假设您编写了一个表达式解析器:其源文件名为 parser.c,并 #include 了两个头文件 parser.hxy.h。然后您想在程序中使用 parser.c 中的例程,例如 calc.c,而 calc.c 又 #include 了 parser.h。真是个烂摊子!您必须做什么才能编译 calc.c

您必须编写一个所谓的 Makefile,它会告诉编译器源文件和目标文件之间的依赖关系。在我们的例子中:


# 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.

将此文件另存为 Makefile 并键入 make 以编译您的程序;或者,将其另存为 calc.mak 并键入 make -f calc.mak,当然还有 RMP。您可以调用关于 C 函数的一些帮助,这些函数在手册页第 3 节中介绍;例如:

$ man 3 printf

要调试您的程序,请使用 gdbinfo gdb 以了解如何使用它。

有很多可用的库;您可能想要首先使用 ncurses(文本模式效果)和 svgalib(控制台图形)。许多编辑器可以充当 IDE;例如,emacsjed 也具有语法高亮、自动缩进等功能。或者,从 ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/ 获取软件包 rhide。它是 Borland IDE 的克隆,您很可能会喜欢它。

10.3 X11 编程

如果您觉得自己足够勇敢来处理 X11 编程(并没有那么难),那么有几个库可以使编写 X11 程序变得轻而易举。主要访问站点是 GTK+ 的站点 https://gtk.org.cn 和 Qt 的站点 http://www.troll.no。Gtk+ 是一个基于 C 的 widget 集,最初是为图形软件包 The GIMP ( http://www.gimp.org) 编写的,并被 Gnome 环境使用。Kdeveloper 基于 C++ 的 Qt,由 KDE 使用。最有可能,您将使用其中之一。

一些用于可视化编程的最佳工具是用于 Qt 的 Kdevelop http://www.kdevelop.org 和用于 GTK+ 的 Glade http://glade.pn.org。此页面包含更多信息:http://www.free-soft.org/guitool/

多平台编程

如果您可以编写在 Linux Windows 下使用 gcc 无缝编译的代码,那不是很好吗?在撰写本文时,有一些 widget 集允许或多或少稳定的多平台编程。就稳定性和完整性而言,我想说选择范围缩小到只有一个:FLTK,即 Fast Light Tool Kit http://www.fltk.org。它非常小巧、快速且稳定。它还有一个名为 Fluid 的半可视化构建器。


下一页 上一页 目录