Linux
Download
1 / 109

Linux 环境中的程序设计基础 - PowerPoint PPT Presentation


  • 83 Views
  • Uploaded on

Linux 环境中的程序设计基础. 使用 vi 编辑文件. vi 编辑器使用. vi editor 是一个全屏幕文本编辑器 所有的 Linux 版本都提供了这一编辑器 在 Linux 系统中使用 vi 来编写文本文件 vi 也是 Unix 世界里极为普遍的全屏幕文本编辑器. vi 的启动.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Linux 环境中的程序设计基础' - leila-hebert


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Linux

Linux环境中的程序设计基础

使用vi编辑文件


vi编辑器使用

  • vi editor是一个全屏幕文本编辑器

  • 所有的Linux版本都提供了这一编辑器

  • 在Linux系统中使用vi来编写文本文件

  • vi也是Unix世界里极为普遍的全屏幕文本编辑器


vi的启动

格式:vi [options] [filename]

功能:自动载入所要编辑的已有文件,或开启一个新文件

输出:如果未指定选项或文件,将进入vi程序并开始编辑一个新缓冲区。当屏幕的左边出现“~”号,表示本行为空行。

常用选项/功能:

+n 从第n行开始编辑文件

+/exp 从文件中匹配字符串exp的第一行开始编辑


Shell
shell程序文件的建立实例

用vi编辑器建立shell程序文件shex1的步骤:

① 键入命令“vi shex1”,启动vi;

② 按命令“i”,进入vi的插入状态;

③ 输入程序文件内容;

clear

cal 1 98

cal 2 98

cal 3 98

④ 按<Esc>键,再键入“:”,切换到vi的命令状态;

⑤ 在“:”后键入命令“wq”,即保存文件内容后,退出vi


vi的2种状态

进入vi后有2种状态:“编辑”状态和“一般命令”状态。

  •   编辑状态

      在此状态下输入文本编辑命令,输入文本文字信息。

  •   一般命令状态

    在此状态下键入的都是命令,这些命令用来下达一些文件存档、以及离开vi等等的操作指令。

      当进入vi,先在编辑状态,等待编辑命令的输入。

  • 2种状态的转换

    任何情况下,按“ESC”键就进入编辑命令状态,光标定位在文档中,等待编辑命令的输入。

      在编辑命令状态下,按“:”键,进入一般命令状态,屏幕左下方出现“:”提示符,等待输入一般命令。


编辑状态下的文字输入

  • 在编辑状态下,有光标闪动,这是文字插入点。

  • 在编辑状态下,输入以下编辑命令,便进入插入模式:

    • a:从光标所在位置后开始追加文字,光标后的文字随追加的文字向后移动。 

    • i:从光标所在位置前开始插入文字,光标后的文字随追加的文字向后移动。

    • o:在光标所在行下方新增一行,并进入编辑状态。 

  • 编辑状态下输入文字时,有2种模式:“插入”与“改写”,按“Insert”键即可转换状态。

  • 编辑状态下按“ESC”键,就退出插入模式。此时输入“/”,进入一般命令状态,然后输入欲搜索的字符再按回车键,光标将指向文本中与字符匹配的地方。


vi 下有多种编辑命令可完成以下功能:

  • 删除与恢复

  • 修改

  • 剪贴板

  • 查找与替换

  • 光标移动

  • 寻找、搜索

  • ……

      但记住编辑命令是麻烦的,实际上,在命令模式下移动方向键就可以移动光标;按[Delete]键与[backspace]键就可删除字符。


退出vi

  •   在一般命令状态下,键入以下命令:

    q 结束编辑(打开的文档未作任何修改),退出vi

    q! 放弃编辑不作保存(打开的文档已编辑过),退出vi

    wq 保存当前文件后退出vi

    wq! 强制性保存当前文件(包括只读文件)后退出vi

    w [filename] 用于对新建文件(直接键入vi)或当前 正编辑的文件作保存后继续编辑

    e <filename> 当前没有未保存的修改,则进入由<文 件名>指出的文件进行编辑

    e! <filename> 即使有未保存的修改,也不作保存,进 入由<文件名>指出的文件进行编辑


删除与恢复

  • 在编辑状态下,对文档内容作删除操作的命令:

    x 删除当前光标所在位置的字符,功能同“Del”键。

    dw 删除当前光标所在位置的单词。

    dd 删除当前光标所在的行,注意:dd是按两次d。

    d$ 删除当前光标所在位置至本行结尾的所有字符。

    dG 删除当前光标所在位置至文件结尾处的所有字符。

  • 恢复是指对误删除的恢复,在编辑状态下,若要恢复误删除的内容,则使用命令u。


修改

R 键入R,然后键入修改后的单词。

r 改写光标所在处的单个字符。

~ 用来改变光标所在处的字符的大小写。


剪切、复制、粘贴

yy 将光标所处行选中,并复制到系统剪贴板上。

c 即cut,是将光标所处行移到剪贴板上,原行内容在屏幕上消失。

p 即paste,是将剪贴板上的内容复制到光标所在行。


查找和替换

  • vi中也可进行查找和替换,这无疑为修改相同的字符串带来了方便,vi的查找和替换功能是在命令方式下实现的,其命令如下:

    s / 需替换内容 / 修改后内容 / 需改内容所在行号

  • 注意:在查找替换操作前,必须将光标移至文件首。

例:

用“After completion”来替换“Once I have completed it.”


Shell 2
shell程序运行的2种方法

运行shell程序有两种方法:

  • 在shell环境下,将shell 程序文件作为子shell程序被调用执行

    $sh <shell程序文件名> [<参数1> <参数2> ……]

    例:

    $sh shex1


  • shell程序文件视作命令来执行(因此,shell程序文件可以看作是将各种命令组合在一起而形成的新命令),此时必须赋予shell程序文件执行权限

    $ <shell程序文件名> [<参数1> <参数2> ……]

    例:

    ① $ chmod a+x shex1 给程序文件赋予可执行属性

    ② $ /home/user1/shex1 以完整的路径名键入程序名

    或 $ ./shex1 以相对路径名键入程序名


带参数的运行命令

  • 运行命令中有[参数]和无[参数]的2种情况,分别称为带参数的运行命令和不带参数的运行命令

  • 在shell程序中一般使用的形参为:$0、$1、$2、……$9,共10个

  • 当程序运行时,命令行中的<参数1>、<参数2>…依次赋值给$1、$2、…,通常称运行命令中所带的参数为实参

  • $0是一个特殊的形参,其值规定为当前运行的shell程序命令本身


例:建立shell程序shex3,其内容为:

clear

cal $1 98

cal $2 98

cal $3 98

执行时输入命令的形式为:

$ sh shex3 1 2 3

第一个实参值是1,运行时代换给程序中的形参$1,

第二个实参值是2,运行时代换给程序中的形参$2,

第三个实参值是3,运行时代换给程序中的形参$3


Shift
命令shift作用

  • 由于形参个数有限(一般为10个),当参数较多时,可通过命令shift来移动形参与实参的对应关系

  • 执行一次 shift 后,$1、$2、……变为依次与<参数2> <参数3>……对应

  • 再执行一次shift后,$1、$2、……变为依次与<参数3> <参数4>……对应,依此类推


例:建立shell程序shex2,其内容为:

echo $0 $1 $2

shift

echo $0 $1 $2

运行时情况如下:

# /root/shex2 yesterday today tomorrow

/root/shex2 yesterday today

/root/shex2 today tomorrow

#

可见: $0始终是当前运行的shell程序命令本身,即/root/shex2


Shell1
Shell 变量

  • shell 变量大致可以分为三类:内部变量、用户变量和环境变量。

  • 内部变量:由系统提供,用户不能修改。

  • 用户变量:由用户建立和修改,在 shell脚本编写中会经常用到。是在当前shell中使用的局部变量,不能被在shell下运行的其他命令或其它shell程序使用

  • 环境变量:这些变量决定了用户工作的环境,它们不需要用户去定义,可以直接在 shell中使用,其中某些变量用户可以修改。它可将值传给shell运行的其他命令或shell程序使用,也就是说系统变量是全局变量


Shell2
常见的 Shell 变量


Shell3
常见的 Shell 变量


Shell4
Shell 变量

  • PATH 变量是最重要的环境变量之一。当用户在命令行中输入命令时, shell 就会根据该变量定义的路径(目录)和顺序,查找并执行该命令。如果没有正确设置 PATH 变量,则必须输入完整的路径名来运行某个命令。

  • 在 Linux 下输入命令的两种方式:

  • 直接在命令行中输入命令:根据 PATH 查找该命令

  • 输入完整的路径名

  • 用户可以根据需要修改环境变量 如:HISTSIZE,PATH,PS1,PS2 等


Shell5
Shell 变量查询

  • 查询当前 shell中的环境变量:env

env

  • 查询某个变量的值:echo

echo ${变量名}


命令提示符

  • 在 bash 中,有两个级别的命令输入提示:

  • 一级提示符是当 bash等待输入命令时所出现的提示符,由环境变量 PS1控制,缺省值为 “$”;

  • 二级提示符是在 bash执行一个命令后,需要用户进一步输入才能完成次命令时,所出现的提示符,由环境变量PS2控制,缺省值为 “>”。

  • 重设 PS1和PS2的设置

export

使变量的值对当前shell及其所有子进程都可见

例:export PS1=“\t\w\$”


命令提示符

  • 在创建提示符时,可以使用下面的特殊字符:


bash 配置文件

  • bash 配置文件

  • 在命令行中设置和修改的变量值,只在当前的 shell 中有效。一旦用户退出 bash,所做的一切改变都会丢失。

  • 在启动交互式会话过程中,在出现提示符前,系统会读取几个配置文件,并执行这些文件中的命令。所以这些文件可以用来定制 bash环境。如:设置 shell变量值或建立别名等。

  • bash 配置文件:

/etc/profile

~/.bash_profile

~/.bash_login

~/.profile

~/.bashrc


bash 配置文件

  • /etc/profile

Linux 系统中的全局 bash启动脚本,任何用户登录系统时/etc/profile都会被执行。通常用来设置标准 bash环境,但修改该文件需 root 权限。

  • 读取 /etc/profile文件后,bash将在用户主目录中按顺序查找以下文件,并执行第一个找到的文件:

~/.bash_profile

~/.bash_login

~/.profile

在这些文件中,用户可以定义自己的环境变量,而且能够覆盖在 /etc/profile中定义的设置。


bash 配置文件

  • bash 启动后,将读入配置文件 ~/.bashrc ,并执行这个文件中的所有内容。

  • 另外,还可以从另一个 shell或者 bash自身启动一个新的 bash,这种过程称为非登录交互式,启动新 bash的命令为 bash,此时所读入的唯一 bash 配置文件是 ~/.bashrc

通常,个人bash环境设置都定义在 ~/.bashrc 文件里


  • 变量名必须以字母或下划线开头,后面可以跟字母、数字 或下划线。任何其它字符都标志变量名的结束。

  • 变量名关于大小写敏感。

  • 变量类型:

  • 根据变量的作用域,变量可以分为局部变量和环境变量

  • 局部变量只在创建它们的 shell中可用。而环境变量则 在所有用户进程中可用,通常也称为全局变量。

  • 变量赋值:

variable=value

  • 等号两边不能有空格

  • 如果要给变量赋空值,可以在等号后面跟一个换行符

变 量


变量赋值

格式:<变量名> =<字符串>

功能:将等号右边的字符串赋给等号左边的变量

变量名可以由任意字符、数字或下划线组成,但数字不能作为变量名的首字符。

变量名不能包含空格、惊叹号字符

变量名不能使用shell中保留的关键词等符号

变量名不能多于一个词,因为shell使用空格分析命令、定界命令名和参数,所以若字符串中含有空格,则在字符串上加上引号

例:name1=MARY

name2="X Window"


echo $variable或 echo ${variable}

  • 清除变量

unsetvariable

  • 显示所有变量

set

例:

myname=jypan

echo $myname

unset myname

echo $myname

变 量



是指变量在一个程序中那些地方可见。对于 shell来说,局部变量的作用域限定在创建它们的 shell中。

例:

局部变量和作用域

$是特殊变量,用来存储当前运行进程的PID


引用变量

格式:$<变量名>

功能:引用变量的值。只要在变量名前加上“$”字符,变量名即将变量值取代

例:

# name2=$name1

将变量name1值赋予变量name2

# echo $name1

在屏幕上显示变量name1的值


单引号和双引号允许用户一次把几个字符引起来。双引号不可以把美元符单引号和双引号允许用户一次把几个字符引起来。双引号不可以把美元符$引起,因为$操作符将导出变量所代表的值。如果已包含在双引号中有$字符,并紧跟变量名,则在执行shell命令时,字符串中的变量将被变量所代表的数值所取代

例:

# winner=david

# notice="The person who won is $winner."

# echo $notice

显示结果为:The person who won is david.


但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

例:

# winner=david

# notice='The name is in the $winner variable.'

# echo $notice

显示结果为:The name is in the $winner variable.


若要将美元符使用,可以加上反斜杠但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符\来引导$操作符

例:

# winner=david

# result="$winner won \$100.00"

# echo $result

显示结果为: david won $100.00.


释放变量但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

格式:unset <变量名>

功能:释放一个现存的shell变量。要慎用unset *,因为它将删除全部shell变量

例:

# unset name1


  • 环境变量但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 作用域包含创建它们的 shell,以及从该 shell产生的任意子 shell或进程。

  • 按照惯例,环境变量通常使用大写。

  • 环境变量是已经用 export内置命令输出的变量。

环境变量

  • 变量被创建时所处的 shell称为父 shell。如果在父 shell中启动一个新的 shell(或进程),则该 shell ( 或进程 ) 被称为子shell ( 或子进程 )。

  • 环境变量就象 DNA,可以从父亲传递给儿子,再到孙子,但不能从子进程传递给父进程。


export但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符:使变量的值对当前shell的所有子进程都可见。

说明:设置或显示环境变量。

语法:export [选项] [变量名称]=[变量设置值]

该命令的各选项含义如下:

-f 代表[变量名称]中为函数名称;

-n 删除指定变量,变量实际未删除,只是不输出到后续指令的执行环境中;

-p 列出所有shell赋予程序的环境变量。


  • 设置环境变量但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

export variable=value

variable=value; export variable

例:

export -n variable

export -p

环境变量举例

将全局变量转换成局部变量

列出所有全局变量


Printf
printf 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符命令

  • printf可用来按指定的格式输出变量

printf format 输出参数列表

printf的打印格式与 C语言中的 printf相同

printf "%-12.5f\n" 123.456

format以%开头

格式符

flag

field width

precision

-:左对齐

+:输出符号

0:空白处添0

空格:前面加一空格

字段宽度

小数点后输出位数


Printf1
printf 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符命令

printf命令的格式说明符

format中还可以使用


Printf2
printf 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符命令举例

例:

printf "The number is: %.2f\n" 100

printf "%-20s|%12.5f|\n" "Joy" 10

printf "%-10d%010o%+10x\n" 20 20 20

printf "%6d\t%6o\"%6x\"\n" 20 20 20


位置参量(命令行参数)但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 位置参量是一组特殊的内置变量,通常被 shell脚本用来从命令行接受参数,或被函数用来保存传递给它的参数。

  • 执行 shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本名后面的用空格隔开的每个字符串都称为位置参量。

  • 在脚本中使用这些参数时,需通过位置参量来引用。例如: $1表示第一个参数,$2表示第二个参数,以此类推。 $9以后需要用花括号把数字括起来,如第 10 个位置参量以 ${10}的方式来访问。


位置参量列表但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符


Shell6
shell 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符脚本

  • Shell脚本

当命令不在命令行中执行,而是从一个文件中执行时,该文件就称为 shell脚本,即按顺序执行的Linux命令集。shell脚本按行解释。

  • Shell 脚本的编写

  • Shell脚本是纯文本文件,可以使用任何文本编辑器编写

  • Shell脚本通常是以 .sh 作为后缀名

  • Shell 脚本的执行

chmod+xscript_name

./script_name

shscript_name


条件测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 条件测试可以根据某个特定条件是否满足,来选择执行相应的任务。

  • Bash中允许测试两种类型的条件:命令成功或失败,表达式为真或假

  • 任何一种测试中,都要有退出状态(返回值),退出状态为 0 表示命令成功或表达式为真,非0 则表示命令失败或表达式为假。


测试表达式的值但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 表达式测试包括字符串测试、整数测试和文件测试。

  • 内置测试命令test

  • 通常用 test命令来测试表达式的值

x=5; y=10

test $x-gt$y

echo $?

  • test命令可以用 方括号 来代替

x=5; y=10

[$x-gt $y ]

echo $?

方括号前后要留空格!


测试表达式的值但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 2.x版本以上的 Bash中可以用双方括号来测试表达式的值,此时可以使用通配符进行模式匹配。

name=Tom

[ $name= [Tt]??]

echo $?

[[ $name= [Tt]??]]

echo $?


字符串测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 字符串测试

操作符两边必须留空格!

name=Tom; [ -z $name ];echo $?

name2=Andy; [ $name= $name2];echo $?


整数测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 整数测试,即比较大小

操作符两边必须留空格!

x=1; [ $x-eq1];echo $?

X

x=a; [ $x-eq1];echo $?


整数测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 整数测试也可以使用 let命令或双圆括号

只能用于整数测试!

  • 相应的操作符为:

==、!=、>、>=、<、<=

  • 例:

x=1; let"$x==1";echo $?

x=1; (($x+1>= 2 ));echo $?

  • 两种测试方法的区别

  • 使用的操作符不同

  • let和 双圆括号中可以使用算术表达式,而中括号不能

  • let和 双圆括号中,操作符两边可以不留空格


逻辑测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 逻辑测试

x=1; name=Tom;

[ $x-eq1 –a –n $name];echo $?

注:不能随便添加括号

X

[($x-eq1) –a (–n $name)];echo $?


逻辑测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 可以使用模式的逻辑测试

x=1; name=Tom;

[[ $x-eq1 && $name = To?]];echo $?


文件测试但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 文件测试:文件是否存在,文件属性,访问权限等。

常见的文件测试操作符

  • 更多文件测试符参见 test的在线帮助

man test


检查空值但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 检查空值

["$name"="" ]

[ !"$name" ]

["X${name}"!="X" ]


if 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符条件语句

  • 语法结构

if expr1 # 如果expr1 为真(返回值为0)

then # 那么

commands1 # 执行语句块 commands1

elifexpr2 # 若expr1 不真,而expr2 为真

then # 那么

commands2 # 执行语句块 commands2

... ...# 可以有多个 elif 语句

else # else 最多只能有一个

commands4 # 执行语句块 commands4

fi #if 语句必须以单词 fi终止


几点说明但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • elif可以有任意多个(0 个或多个)

  • else最多只能有一个(0 个或 1 个)

  • if语句必须以 fi表示结束

  • expr通常为条件测试表达式;也可以是多个命令,以最后一个命令的退出状态为条件值。

  • commands为可执行语句块,如果为空,需使用 shell提供的空命令 “ : ”,即冒号。该命令不做任何事情,只返回一个退出状态 0

  • if语句可以嵌套使用

ex4if.sh,chkperm.sh,chkperm2.sh,name_grep,tellme,tellme2,idcheck.sh


case 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符选择语句

  • 语法结构

case exprin # expr为表达式,关键词in不要忘!

pattern1) # 若expr与pattern1匹配,注意括号

commands1 # 执行语句块commands1

;; # 跳出case结构

pattern2) # 若expr与pattern2匹配

commands2 # 执行语句块commands2

;; # 跳出case结构... ...# 可以有任意多个模式匹配

*) # 若expr与上面的模式都不匹配

commands # 执行语句块commands

;; # 跳出case结构esac # case语句必须以esac终止


几点说明但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • 表达式 expr按顺序匹配每个模式,一旦有一个模式匹配成功,则执行该模式后面的所有命令,然后退出 case。

  • 如果 expr没有找到匹配的模式,则执行缺省值 “ *) ” 后面的命令块 ( 类似于 if中的 else ); “ *) ” 可以不出现。

  • 所给的匹配模式 pattern中可以含有通配符和“ | ”。

  • 每个命令块的最后必须有一个双分号,可以独占一行,或放在最后一个命令的后面。

  • case语句举例:yes_no.sh


for 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符循环语句

  • 语法结构

for variableinlist

# 每一次循环,依次把列表list中的一个值赋给循环变量

do # 循环开始的标志

commands # 循环变量每取一次值,循环体就执行一遍

done # 循环结束的标志

  • 几点说明

  • 列表 list可以是命令替换、变量名替换、字符串和文件名列表 ( 可包含通配符 )

  • for循环执行的次数取决于列表 list中单词的个数

  • for循环体中一般要出现循环变量,但也可以不出现


for 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符循环执行过程

  • 循环执行过程

执行第一轮循环时,将 list中的第一个词赋给循环变量,并把该词从 list中删除,然后进入循环体,执行 do 和 done之间的命令。下一次进入循环体时,则将第二个词赋给循环变量,并把该词从 list中删除,再往后的循环也以此类推。当 list中的词全部被移走后,循环就结束了。

forloop.sh,mybackup.sh

  • 位置参量的使用:$* 与$@

greet.sh

  • 可以省略in list,此时使用位置参量

permx.sh tellme greet.sh / permx.sh *


While
while 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符循环语句

  • 语法结构

while expr # 执行expr

do # 若expr的退出状态为0,进入循环,否则退出while

commands # 循环体

done # 循环结束标志,返回循环顶部

  • 执行过程

先执行 expr,如果其退出状态为 0,就执行循环体。执行到关键字 done后,回到循环的顶部,while命令再次检查 expr的退出状态。以此类推,循环将一直继续下去,直到 expr的退出状态非 0 为止。


Shift1
循环控制 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符shift 命令

shift[n]

  • 用于将参量列表 list左移指定次数,缺省为左移一次。

  • 参量列表 list一旦被移动,最左端的那个参数就从列表中删除。while循环遍历位置参量列表时,常用到 shift。

例:

doit.sh a b c d e f g h

shft.sh a b c d e f g h


条件判断命令但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符test

条件表达式是控制程序流程的关键,shell提供的test命令适用于条件控制流和循环控制流

格式:test <表达式>

功能:返回表达式成立与否的状态值,

—如果表达式成立,则test返回真的状态值0,

—反之,test返回假的状态值,即一个非0值。


条件控制流但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

  • ① if-then-else 结构

    • if<条件判断命令>

      • then<命令集1>

      • else <命令集2>

  • fi

② if-then-fi结构

if<条件判断命令>

then<命令集>

fi

通常采用“ test <表达式>”,当条件成立,则返回0;条件不成立,则返回一个非0值

注意:其中if和fi必须配对出现


例:如果但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符/etc目录中的文件profile存在,则将其复制到/home中,并分屏显示/home下的profile内容;否则在屯幕上显示信息“profile is not exist!”

if test -e /etc/profile

then cp /etc/profile /home

cat /etc/profile|more

else echo “profile is not exist!”

fi


建立程序文件但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符shp3,存放在当前目录下。如果shp3运行时未带参数,则在屏幕上显示信息“Parameter is lost!” ,并结束程序运行;如果shp3运行时带一个参数,则判断参数所指定的文件是否存在,如果存在则复制该文件到/home;否则先在屏幕上显示信息“File not found!”,然后显示程序本身。


if test -z $1 但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符-z判$1存在否

then echo Parameter is lost! 如带一参数

else if test -e $1 则$1肯定在

then cp $1 /home

else echo File not found!

cat $0 $0指程序本身

fi

fi


例:编写但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符shell程序shp6,存放在当前目录下。运行shp6时带一个正真数参数,将数值存入变量value;

如果该参数大于等于1但小于3,则在屏幕上显示“value is less than 3 and not less than 1”;

如果该参数大于等于3,则在屏幕上显示“value is not less than 3”;

最后以“value=xx”的形式显示变量value的值。


value=$1但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

if test value -ge 1 -a value -lt 3

then echo value is less than 3 and not less than 1

fi

if test value -ge 3

then echo value is not less than 3

fi

echo value=$value


例:编但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符1个shell程序shp10,当以命令“shp10 xx yy”执行时,(其中xx为年份参数,yy为季度参数),能自动清屏,并显示指定年份指定季度中的3个月的月历。


if test $k -eq 3但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

then cal 7 $1

cal 8 $1

cal 9 $1

fi

if test $k -eq 4

then cal 10 $1

cal 11 $1

cal 12 $1

fi

clear

k=$2

if test $k -eq 1

then cal 1 $1

cal 2 $1

cal 3 $1

fi

if test $k -eq 2

then cal 4 $1

cal 5 $1

cal 6 $1

fi


但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符case结构

case<变量>in

字符串1)<命令集1>

;;

字符串n) <命令集n>

;;

*)<缺省命令>

;;

esac

说明:其中,字符串中可含通配符。

如果能同时匹配多个字符串,则只能执行第一个匹配字符串后的<命令集>。


循环控制流但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

① for-in结构

for <循环变量> [in <循环变量取值集>]

do

<命令集>

done

  其中,<循环变量取值集>中的值与值之间用空格分隔。


例:用但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符for命令实现,在当前目录下创建名为user0、user1、…user9十个子目录,用长格式显示这10个目录的目录信息,然后用for命令删去这10个目录后,再用长格式显示这10个目录的目录信息。

for i in 0 1 2 3 4 5 6 7 8 9

do mkdir user$i

done

ls -dl user?|more

for i in 0 1 2 3 4 5 6 7 8 9

do rm -rf user$i

done

ls -dl user?|more


例:但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

(1)清屏

(2)当程序运行时,屏幕显示如下形式信息:

**********************

*This is a shell program *

**********************

(3)检查/home目录下,是否存在由参数1指定的文件,若不存在,则屏幕显示信息“File not found!”;若存在,则将参数1指定的文件改名为由参数2指定的文件名,然后用for命令对改名后的文件显示其长格式的目录信息和文件内容


clear但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

echo “**********************”

echo “*This is a shell program *”

echo “ **********************”


if test -n $1 -a -n $2但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符

then if test $1!=$2

then if test -e $1

then mv $1 $2

for cn in “ls -l”“cat”

do

$cn $2

echo “”

done

else echo File not found!

fi

fi

fi


但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符while 结构

while <条件判断命令>

do

<命令集>

done

说明:当<条件判断命令>返回0时,则执行一轮由do和done括起来的循环体中的<命令集>,直到<条件判断命令>返回一个非0值时,则不再执行循环体中的命令,执行done后面的命令


但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符until 结构

until <条件判断命令>

do

<命令集>

done

执行过程说明:与while 结构相反,当<条件判断命令>返回非0时,执行循环体中的命令,直到<条件判断命令>返回一个0值时,继续执行done后面的命令。


Shell7
shell但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符程序的调试

有两种简便的跟踪功能可以用于shell程序的调试

格式1:set -v

功能:当执行一个shell程序时,会在执行程序文件中的每条命令之前,自动在屏幕上先显示该条命令

格式2:set -x

功能:当执行shell程序时,它会把将要执行的命令逐条进行参量定值,并以最后执行的形式在屏幕上显示


Linux1

Linux但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符环境中的程序设计基础

Linux编程环境


Linux c c
Linux C/C++但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符编程

  • C语言是一种在Unix操作系统中被广泛使用的通用编程语言。

  • 用C语言写的程序执行速度很快。

  • C语言非常适合编写系统程序,Linux内核就是使用C语言编写的。

  • ANSI C的C语言标准

    • 目标是为各种操作系统上的C程序提供可移植性保证,而不仅仅限于Unix。

    • 不仅定义了C编程语言的语法和语义,还定义了一个标准库。


  • 标准库可以根据头文件划分为但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符15个部分,其中包括字符类型<ctype.h>、错误码<errno.h>、浮点常数<float.h>、数学常数<math.h>、标准定义<stddef.h>、标准I/O<stdio.h>、工具函数<stdlib.h>、字符串操作<string.h>、时间和日期<time.h>、可变参数表<stdarg.h>、信号<signal.h>、非局部跳转<setjmp.h>、本地信息<local.h>及程序断言<assert.h>等。


C但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符语言开发环境简介

  • Linux上广泛使用的C语言编译器是GNU C编译器,GNU C建立在自由软件基金会的编程许可证的基础上,可以自由发布。在Linux下,一个完整的C语言开发环境到少包括以下三个组成部分:

    • 函数库glibc

    • 编译器gcc

    • 系统头文件glibc_header

  • glibc是构成一个完整的C语言开发环境所必不可少的组成部分,也是Linux下C语言的主要函数库。

  • glibc_header中包含了系统编译源代码所需要的声明文件,如果缺少系统头文件,很多用到系统功能的C程序将无法编译。


  • glibc但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符有两种安装方式:

    • 安装成测试用的函数库

      在编译程序时用不同的选项来试用新的函数库。

    • 安装成主要的C语言函数库

      所有新编译程序均使用的函数库。

  • gcc是可以在多种硬件平台上编译出可执行程序的超级编译器,gcc编译器能将C语言、C++语言源程序、汇编语言程序和目标程序编译、连接成可执行文件。

  • 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而gcc则通过后缀来区别输入文件的类型。


  • gcc但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符支持编译的一些源文件的后缀及其说明:


但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符Linux中,gcc(GNU C Compiler)是C、C++、Objective-C源程序的编译器,gcc编译C源程序并生成可执行文件要经过以下四步:

(1)预处理

gcc编译器调用cpp程序,对各种命令如 #define、#include进行分析。

(2)编译

gcc编译器调用ccl 程序,根据输入文件产生中间文件。

(3)汇编

gcc编译器调用as程序,用中间文件作为输入产生以.o作为类型名的目标文件。

(4)连接

gcc编译器调用 ld程序,将各目标程序组合于可执行文件中的适当位置,这一程序引用的函数也放在可执行文件中。


C但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符函数库

  • 定义:是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的。它们通常是一组相互关联的用来完成某项常见工作的函数构成(比如c库里面的标准输入输出函数、时间函数和数学函数等)。

  • 函数库中的函数可以通过连接程序与应用程序进行连接,而不必在每次开发程序时都对这些通用的函数进行编译。

  • 不同类型的应用程序将会使用不同的函数库。如数学应用将使用数学库libm,X-Window应用程序将使用Xlib库及libX11。


  • 所有的程序都将使用标准的但若用户不希望求出包含在字符串中的变量的值,在这种情况下,应该使用单引号作为字符串的定界符。单引号将抑制任何变量值,并把美元符看成另一个字符C函数库-libc,该库中包含了内存管理或输入输出操作的基本函数,这些库都存放在/usr/lib这些系统公用的目录中,系统中的任何用户都可以利用这些库。

  • 库可以有三种使用的形式:

    • 静态库:代码在编译时就已连接到开发人员开发的应用程序中。

    • 共享库:只是在程序开始运行时才载入,在编译时,只是简单地指定需要使用的库函数。

    • 动态库:是共享库的另一种变化形式,也是在程序运行时载入,使用的库函数不是在程序运行开始,而是在程序中的语句需要使用该函数时才载入。


  • 动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

  • 由于共享库和动态库并没有在程序中包括库函数的内容,只是包含了对库函数的引用,因此代码的规模比较小。

  • 已经开始的大多数库都采用共享库的方式。ELF格式的可执行文件使得共享库能够比较容易地实现,当然使用旧的a.out模式也可以实现库的共享。Linux系统中目前可执行文件的标准格式为ELF格式。


  • 系统中可用的库都存放在动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。/usr/lib和/lib目录中。库文件名由前缀lib和库名以及后缀组成。根据库的类型不同,后缀名也不一样。共享库的后缀名由.so和版本号组成,静态库名的后缀名为.a或.sa(采用旧的a.out格式的共享库)。

    • 共享库名的格式:库的名称.so.主版本号.次版本号

    • 静态库名的格式:库的名称.a

      例如:

      libm.so.5 数学共享库的标识字符为m,版本号为5

      libm.a 静态数字库


库文件与头文件的位置动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

函数库存放的标准目录:

/lib 系统必备共享库

/usr/lib 标准共享库和静态库

/usr/i486-linux-libc5/lib libc5兼容性函数库

/usr/X11R6/lib X11R6的函数库

/usr/local/lib 本地函数库

头文件存放的目录:

/usr/include 系统头文件

/usr/local/include 本地头文件

共享库及相关配置文件在/etc目录中,其中:

ld.so.conf 包含共享库的搜索位置

ldconfig 共享库管理工具,一般在更新了共享库之后要运行该命令

ldd 可查看可执行文件所使用的共享库


gcc动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。的基本用法和选项

格式:gcc [options] [filename]…

常用选项的说明:

-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。

-c 对源程序进行预处理、编译,产生目标文件,但不进行连接成为可执行文件。

-DMACRO 以字符串“1”定义 MACRO 宏。

-DMACRO=DEFN 以字符串“DEFN”定义 MACRO 宏。

-E 在预处理后停止,输出预处理后的源代码至标准输出,不进行编译。


-g动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。 产生一张用于调试和排错的扩展符号表,此选项使程序可用gdb进行调试。

-o <文件名> 定义输出的执行文件名为<文件名>

-S 在编译后停止,产生类型名为s的汇编代码文件,不生成中间文件。

-O 对程序编译进行优化,减少被编译程序的长度和执行时间,但此时的编译速度比不作优化慢且要求较多的内存。

-lobjc 可用于连接类型名为o的目标文件生成可执行文件。

-w 不生成任何警告信息

-Wall 生成所有警告信息。


Main c factorial c
假设有 两个源文件 动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。main.c 和 factorial.c ,现在要编译生成一个计算阶乘的程序。

/*程序清单main.c*/

#include <stdio.h>

#include <stdlib.h>

int factorial (int n);

int main (int argc, char **argv)

{

int n;

if (argc < 2)

{

printf ("Usage: %s n\n", argv [0]);

return -1;

}

else

{

n = atoi (argv[1]);

printf ("Factorial of %d is %d.\n", n, factorial (n));

}

return 0;

}

/*程序清单factorial.c*/

#include <stdio.h>

#include <stdlib.h>

int factorial (int n)

{

if (n <= 1)

return 1;

else

return factorial (n - 1) * n;

}

$ gcc -o factorial main.c factorial.c

$ ./factorial 5

Factorial of 5 is 120.


  • GCC 动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。可同时用来编译 C 程序和 C++ 程序。一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是 C+ + 程序。

  • 在 Linux 中,C 源文件的后缀名为 .c,而 C++ 源文件的后缀名为 .C 或 .cpp。 但是,gcc 命令只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库连接。因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。

  • 假设我们有一个如下的 C++ 源文件(hello.C):

    #include <iostream.h>

    void main (void)

    {

    cout << "Hello, world!" << endl;

    }

$ g++ -o hello hello.C

$ ./hello

Hello, world!


调试动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。C程序

  • 当编译后得到的目标程序在运行时出现故障时,需要对你的源程序进行调试以找出错误,排除故障。Linux提供了调试源程序的工具gdb(GNU debugger)。

  • GNU 的调试器称为 gdb,该程序是一个交互式工具,工作在字符模式。在 X Window 系统中,有一个 gdb 的 前端图形工具,称为 xxgdb。

  • gdb 是功能强大的调试程序,可完成如下的调试任务:

    • 设置断点;

    • 监视程序变量的值;

    • 程序的单步执行;

    • 修改变量的值。


  • gdb动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。不仅允许用户在运行程序时显示源代码,而且在调试过程中允许在预设的断点处暂停程序的运行,显示变量的内容。

  • 在可以使用 gdb 调试程序之前,必须使用 -g 选项编译源文件。可在 makefile 中如下定义 CFLAGS 变量:

    CFLAGS = -g

  • 运行 gdb 调试程序时通常使用如下的命令:

    #gdb progname


动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。gdb 提示符处键入help,将列出命令的分类,主要的分类有:

  • aliases:命令别名

  • breakpoints:断点定义

  • data:数据查看

  • files:指定并查看文件

  • internals:维护命令

  • running:程序执行

  • stack:调用栈查看

  • statu:状态查看

  • tracepoints:跟踪程序执行

    键入 help 后跟命令的分类名,可获得该类命令的详细清单。


gdb 动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。的常用命令


注意:在使用动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。gdb调试程序前,必须使用gcc –g对源程序进行编译。


建立C源程序文件动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。star.c,输出结果如下

**********

程序内容如下:

#include <stdio.h>

int main()

{

int i=10;

do

{

printf(“*”);

++i;

}while(i<10);

printf(“\n”);

}

}

编译程序star.c,其目标程序以star命名且可用gdb进行调试


#gcc -o star -g star.c动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

#gcc -g star.c -o star

#./star

*

为了查找该程序中的逻辑错误,使用gdb进行调试:

#gdb ./star

GNU gdb Red Hat Linux

………

(gdb)run

*

(gdb)where

No stack


(gdb)list动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

1 #include <stdio.h>

2 int main()

3 {

4 int i=10;

5 do

6 {

7 printf(“*”);

8 ++i;

9 }while(i<10);

10 printf(“\n”);

(gdb)break 1

Breakpoint 1 at 0x8048370:file star.c,line 1.

(gdb)run

Breakpoint 1,main() at star.c:3

3 {


(gdb)step动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

7 printf(“*”);

(gdb)print i

$1=7146752

可见i的值为随机数,出错在于变量i

在gdb中,可以直接修改变量的值,为此在第4行处设置断点

(gdb)clear 1

Deleted breakpoint 1

(gdb)break 4

Breakpoint 2 at 0x8048380:file star.c,line 4.


(gdb)run动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其他程序使用。

The program being debugged has been started already.

Start it from the beginning?(y or n) y

Starting program:/root/star

Breakpoint 2,main() at star.c:4

4 int i=10;

(gdb)step

7 printf(“*”);

(gdb)print i

$2=10

(gdb)set var i=0

(gdb)print i

$3=0

(gdb)continue

**********


ad