如果您曾经使用 .BAT 文件来创建长命令行快捷方式(我经常这样做),那么可以通过在 profile
或 .bash_profile
中插入适当的别名行(请参阅上面的示例)来实现此目的。但是如果您的 .BAT 文件更复杂,那么您会喜欢 shell 提供的脚本语言:它与优秀的 QBasic 一样强大,甚至更强大。它具有变量、诸如 while、for、case、if... then... else 之类的结构以及许多其他功能:它可以很好地替代“真正的”编程语言。
要编写脚本(相当于 DOS 下的 .BAT 文件),您所要做的就是编写一个包含指令的标准 ASCII 文件,保存它,然后使用命令 chmod +x <脚本文件>
使其可执行。要执行它,请输入其名称。
一个警告。系统编辑器称为 vi
,根据我的经验,大多数新用户都发现它非常难用。我不打算解释如何使用它;请查阅 Matt Welsh 的书或在网上搜索教程。这里只需说明:
i
,然后输入您的文本;x
;vi
,请键入 <ESC>,然后键入 :q!
:wq
。一个好的初学者编辑器是 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."
在 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.h
和 xy.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
要调试您的程序,请使用 gdb
。info gdb
以了解如何使用它。
有很多可用的库;您可能想要首先使用 ncurses
(文本模式效果)和 svgalib
(控制台图形)。许多编辑器可以充当 IDE;例如,emacs
和 jed
也具有语法高亮、自动缩进等功能。或者,从 ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/ 获取软件包 rhide
。它是 Borland IDE 的克隆,您很可能会喜欢它。
如果您觉得自己足够勇敢来处理 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 的半可视化构建器。