
Linux操作系统实验 实验二 Linux(unix)环境程序设计基础.doc
15页实验二 Linux/Unix环境程序设计基础一. 实验目的1. 掌握使用Linux环境下的常用编辑工具编辑程序的方法2. 熟悉shell程序设计的基本技术3. 掌握Linux环境下使用GNU gcc/gdb等工具进行程序设计的基本技术二. 实验指导1. Linux的文本编辑工具在Linux环境下可使用vi、emacs、kate、kedit等编辑工具编写源代码,其中emacs和vi可在字符模式下运行,而kate和kedit需在图形用户界面下使用,都是全屏幕编辑工具,使用简单,kate带有一个文件列表区、一个文件编辑区和一个命令输入区,是一个编写程序的好工具启动vi、kate和kedit编辑文件的命令行方法如下:$ vi 程序文件名 $ kate 程序文件名 $ kedit 程序文件名kate和kedit的图形界面启动方法:.开始菜单|运行命令|kate开始菜单|运行命令|kedit2. 文件编辑器vi vi是在UNIX 上被广泛使用的中英文编辑软件vi是visual editor的缩写,是UNIX提供给用户的一个窗口化编辑环境进入vi,直接执行vi编辑程序即可例:$vi test.c显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。
vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变编辑完成后,使用者可决定是否要取代原来旧有的文件1、vi的工作模式vi提供二种工作模式:输入模式(insert mode)和命令模式(command mode)使用者进入vi后,即处在命令模式下,此刻键入的任何字符皆被视为命令,可进行删除、修改、存盘等操作要输入信息,应转换到输入模式1)命令模式在输入模式下,按ESC可切换到命令模式命令模式下,可选用下列指令离开vi::q!离开vi,并放弃刚在缓冲区内编辑的内容:wq将缓冲区内的资料写入磁盘中,并离开vi:ZZ同wq:x同wq:w将缓冲区内的资料写入磁盘中,但并不离开vi:q离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(2)命令模式下光标的移动 H左移一个字符J下移一个字符K上移一个字符L右移一个字符0移至该行的首$移至该行的末^移至该行的第一个字符处H移至窗口的第一列M移至窗口中间那一列L移至窗口的最后一列G移至该文件的最后一列W, W下一个单词 (W 忽略标点)B, B 上一个单词 (B 忽略标点)+移至下一列的第一个字符处-移至上一列的第一个字符处(移至该句首)移至该句末{移至该段首}移至该段末NG移至该文件的第n列N+移至光标所在位置之后第n列n-移至光标所在位置之前第n列(3)输入模式输入以下命令即可进入vi输入模式:a(append) 在光标之后加入资料A 在该行之末加入资料i(insert)在光标之前加入资料I 在该行之首加入资料o(open)新增一行于该行之下,供输入资料用O新增一行于该行之上,供输入资料用Dd删除当前光标所在行X删除当前光标字符X删除当前光标之前字符U撤消重做F查找s 替换,例如:将文件中的所有"FOX"换成"duck",用":%s/FOX/duck/g"ESC离开输入模式更多用法见 info vi3. shell程序设计基础 shell是用户与Linux操作系统之间的接口,是命令语言、命令解释程序和程序设计语言的总称。
用户在提示符下输入的命令都由shell先加以解释,然后传给Linux内核,或调用相关程序执行shell支持绝大多数高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构,可以解释执行包含这些结构的shell程序Linux中有多种shell,如bash、ksh、csh等,默认的是bash 当用户打开终端后,系统为该终端建立一个程序shell的进程,由进程去读入、识别和执行用户输入的各种命令Linux命令有可执行二进制程序和shell程序,shell程序类似于DOS中的批处理程序1) shell程序的编辑shell程序可用编辑工具vi、kate、kedit等编写,并保存为一个磁盘文件Shell程序的第一行通常为#!/bin/bash,告知Linux使用/bin/bash解释执行该程序2) shell程序的执行方法一:bash shell文件名方法二:直接执行将shell程序的权限设置为644键入 ./shell程序名(3) I/O重定向shell程序中经常涉及到输入输出Linux有通过3个特殊文件实现信息的输入输出:标准输入(stdin, 文件描述符为0)、标准输出(stdout,文件描述符为1)和标准错误输出(stderr, 文件描述符为2)。
Shell通过标准输入接受用户的键盘命令,将执行结果送往标准输出从终端显示,而将出错信息写到标准错误输出,而从终端显示Linux通过I/O重定向,可以改从文件输入命令,将输出结果或出错信息改送文件以下是一些示例:1) 输出重定向命令格式:command > file 或command >>file 将命令输出信息写到文件例:ls –l >fileinfo 将当前目录下的文件信息以长格式方式保存到文件fileinfo中,覆盖原来的内容;date>>fileinfo 将date命令的输出追加到文件fileinfo后;2) 输入重定向命令格式:command < file 从文件读命令信息例:wc< fileinfo 统计文件fileinfo中文本的行数、单词数和字符数3) 标准错误输出重定向命令格式: command >& file 或command >>&file(4) 管道将前一命令的输出作为后一命令的输入命令格式:命令1|命令2[|命令3…]例:who | sort >user_list 将who命令的结果排序,写入文件user_list5) shell变量shell变量只有字符类型,其值为字符串,变量名以字母或下划线开始,大小写敏感,用$var的形式引用名为var的变量的值。
定义格式:变量名=变量值例:$ no=10 $ hello=”hello everybody” $ echo $no $ echo $hello环境变量:shell定义的与工作环境有关的变量,可由用户修改 HOME 保存登录主目录的完全路径名 PATH 保存命令搜索路径,多个路径间以”:”隔开 PWD 当前工作目录的绝对路径名 PS1 主提示符预定义变量:由shell定义,用户不能修改 $? 前一命令执行的返回状态 $$ 当前进程的pid 位置变量:shell程序命令行参数由shell写到位置变量中,可在程序中引用 $0 当前进程的进程名 $1 第1个命令行参数 $2 第2个命令行参数 $3 第3个命令行参数 … $# 位置参数个数(6) 条件执行语句格式:if 条件 then 命令行 else 命令行 fi条件格式: [测试语句] 或 test 测试语句文件测试: -e filename 如果文件存在 -r filename 如果文件存在并可读 -x filename 如果文件存在且可执行 -w filename 如果文件存在且可写 -d filename 如果文件存在且为目录 -f filename 如果文件存在且为普通文件数值测试: test n1 –eq n2 整数n1和n2相等 test n1 –ne n2 整数n1和n2不相等 test n1 –gt n2 整数n1大于n2 test n1 –ge n2 整数n1大于或等于n2字符串测试: test s 测试字符串非空 test s1=s2 字符串s1等于s2 test s1!=s2 字符串s1不等于s2 test –z s 字符串s为空串例:#!/bin/bash if [$# -ne 1] then echo “Usage - $0 file-name” exit 1 fi if test –f $1 then echo “$1 file exists” else echo “sorry, $1 file does not exits” fi(7) case语句 利用case语句可根据字符串或变量的值从多个选项中选择一项执行格式:case string in expr1) 命令行1;; expr2) 命令行2;; … *) 其它命令行;; esac例:从命令行输入一个简单的算术表达式,计算结果: #!/bin/bash if test $#=3 then case @2 in +) let z=$1+$3 ;; -) let z=$1-$3 ;; /) let z=$1/$3 ;; X|x) let z=$1*$3 ;; *) echo "error" exit 1;; esac echo "Answer is $z" fi 测试:$./test 5 + 7(8) 循环for循环格式: for 变量名 [in 数值列表] do 命令行 donefor循环例: #!/bin/bash for i in 1 2 3 4 5 do echo "Welcome $i times" donewhile循环格式: while 命令行1 do 命令行2 donewhile循环例:显示number=10; number=20;…;一直到number=100。
#!/bin/bash i=1 while [$i –le 10] do echo "number=’expr $i \*10’ ; " expr表示对表达式求值 i= ‘expr $i+1’ donebreak和continue:可于用终止循环和开始下一重循环(9) shell程序调试shell程序的调试主要通过利用shell解释程序的’-v’和’-x’选项跟踪程序的执行过程来实现调用格式:bash –选项 shell程序文件名选项含义:-v 当读入shell输入行时把它们显示出来 -x 执行命令时把命令和它们的参数显示出来4. GNU C编译器LINUX上可用的C编译器是GNU C编译器,它建立在自由软件基金会编程许可证的基础上,因此可以自由发布LINUX 上的GNU C编译器(GCC)是一个全功能的ANCI C兼容编译器,而一般UNIX(如SCO UNIX)用的编译器是CC下面介绍GCC和一些GCC编译器最常用的选项1) 使用GCC通常后跟一些选项和文件名。












