《第31章 shell的使用和编程.pdf》由会员分享,可在线阅读,更多相关《第31章 shell的使用和编程.pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 11 1 大连理工大学软件学院大连理工大学软件学院邱铁邱铁办公楼办公楼409Tel:87571521E_mail:LinuxLinux操作系统操作系统操作系统操作系统第3章LINUX下shell的使用和编程1.命令的使用2.Vi编辑器的使用3.Shell的编程4.C语言的编程命令的使用命令书写格式命令书写格式:1.最常用的命令一般由两三个字母组成最常用的命令一般由两三个字母组成2.UNIX区分大小写区分大小写(同同LINUX)3.用户可以将多个命令放在一行上用户可以将多个命令放在一行上,只要用只要用;将它们隔开将它们隔开4.命令使用格式是统一的:命令使用格式是统一的:Command-opt
2、ionsargumentsCommand指指UNIX命令名命令名options表示命令的执行选项,可以默认表示命令的执行选项,可以默认arguments表示命令的执行参数,可以默认表示命令的执行参数,可以默认#ls/*按字母顺序列出目录中所有文件和目录的名字,命令行中无选项和参数按字母顺序列出目录中所有文件和目录的名字,命令行中无选项和参数#ls-l /*使用长列表方式列出当前目录下所有文件使用长列表方式列出当前目录下所有文件常用命令介绍常用命令介绍#echo$SHELL(注意大写注意大写)此命令告诉系统显示关于此命令告诉系统显示关于shell的设置信息的设置信息#cat/etc/shells
3、此命令告诉用户系统有哪些可用的此命令告诉用户系统有哪些可用的shell#chsh此命令可以改变此命令可以改变shell#man命令命令:对对UNIX命令获得联机帮助信息命令获得联机帮助信息,使用此命令使用此命令可以获得系统中对指定命令的解释可以获得系统中对指定命令的解释格式格式:man 命令名命令名 ls 命令命令:列出指定目录中的内容列出指定目录中的内容格式格式:ls optionnames-a:列出所有文件包括以列出所有文件包括以“.”打头的隐藏文件打头的隐藏文件-d:列出目录文件本身的状态列出目录文件本身的状态,而不是列出目录下包括的文件内容而不是列出目录下包括的文件内容-i:在列表中增
4、加列出文件的在列表中增加列出文件的I节点号节点号-l:以长列表方式列出文件及目录信息以长列表方式列出文件及目录信息-R:递归地列出其中包含的子目录中的文件信息和内容递归地列出其中包含的子目录中的文件信息和内容Names:可以是目录名也可以是文件名可以是目录名也可以是文件名 几个实用工具几个实用工具1.cal命令命令:打印日历打印日历格式格式:cal month year2.bc命令命令:计算器计算器使用方法使用方法:输入输入bc命令命令-输入表达式输入表达式-按按Enter键键退出退出:Ctrl+D3.more,less,pg;逐屏显示文件内容逐屏显示文件内容例例:more server.cm
5、ore*.chls-l|morepg*.chVi编辑器的使用vi的工作方式的工作方式UNIX shellvi的命令行方式的命令行方式Vi的末行命令方式的末行命令方式Vi的插入编辑方式的插入编辑方式用用“vi filename”命令命令用用“i,a”命令用命令用Esc键自动返回用键自动返回用“:,/,?”命令命令Vi编辑器的使用1.vi的启动方法的启动方法用法用法:vi filename例例:vi abc.c2.在在vi中使用中使用set命令命令命令格式命令格式:set option:set nooptionShell的编程 变量变量1.变量赋值和引用变量赋值和引用shell变量类型变量类型:只
6、有字符串型只有字符串型,变量可以被赋值变量可以被赋值,被修改被修改,被引用被引用变量名命名方法变量名命名方法:第一个字符为字母第一个字符为字母,其余字符可以是字母其余字符可以是字母,数字或下划线数字或下划线.变量定义变量定义:不需要事先定义不需要事先定义,直接赋值定义新变量直接赋值定义新变量,直接赋值修改原变量的值直接赋值修改原变量的值变量引用变量引用:在变量名前加在变量名前加$号号,代表变量内容代表变量内容例例1:addr=20.1.1.254echo$addr注注:1.等号两侧不允许有多余的空格等号两侧不允许有多余的空格.2.等号右侧的字符串中含有空格或者制表符等号右侧的字符串中含有空格或
7、者制表符,换行符时换行符时,要用引号将打算赋值的字符串括起要用引号将打算赋值的字符串括起3.引用一个未定义的变量引用一个未定义的变量,变量值为空字符串变量值为空字符串.2.read:读用户的输入读用户的输入内部命令内部命令read,可以从标准输入上读入一行可以从标准输入上读入一行,并将这行的内容赋值给一个变量并将这行的内容赋值给一个变量 可以用在脚本文件中可以用在脚本文件中,接受用户的输入。接受用户的输入。3.环境变量和局部变量环境变量和局部变量局部变量局部变量:所创建的所创建的shell变量变量,默认为局部变量默认为局部变量环境变量环境变量:(全局变量全局变量)在当前在当前shell下启动的
8、子进程只继承环境变量不继承局部变量下启动的子进程只继承环境变量不继承局部变量继承继承:就是指子进程有自己的一整套独立存储的环境变量就是指子进程有自己的一整套独立存储的环境变量,但是这些环境变量的初始状态是从父进程那里原封不动抄写下来的但是这些环境变量的初始状态是从父进程那里原封不动抄写下来的,从此以后从此以后,父子进程各保留一套父子进程各保留一套,子进程对全局变量的修改子进程对全局变量的修改,不影响父进程中的同名变量的值不影响父进程中的同名变量的值,子进程继续创建它自己的子进程时子进程继续创建它自己的子进程时,这些值生效这些值生效.二二.变量的转换方法变量的转换方法,使用内部命令使用内部命令e
9、xport一般来讲,当前所定义的变量均属于“本地变量”(local variable);只有用 export 命令的“输出”处理的变量,才能成為环境变量(environment variable)。CODE:$A=B$export A 或 CODE:$export A=B 变量变量 A 就成为一个环境变量供其后的命令使用。就成为一个环境变量供其后的命令使用。在使用在使用 export 的時侯,要注意的時侯,要注意 shell 在命令行对变量的在命令行对变量的“替換替換”(substitution)处理处理 CODE:$A=B$B=C$export$A上面的命令并未將 A 输出为环境变量,而是將
10、 B 作输出,這是因为在这个命令行中,$A 会首先被替换出 B,然后对B作 export 的參數。取消变量取消变量 要取消一个变量,在 bash 中可使用 unset 命令來处理:CODE:unset A与 export 一样,unset 命令行也同样会作变量替換,因此:CODE:$A=B$B=C$unset$A事實上所取消的变量是 B 而不是 A。变量一旦经过 unset 取消之後,其結果是將整个变量拿掉,而不僅是取消其变量值。如下兩行其實是很不一样的:如下兩行其實是很不一样的:CODE:$A=$unset A 第一行只是將变量 A 設定為“空值”(null value),但第二行則让变量
11、A 不在存在。CODE:$A=$echo$A$unset A$echo$A 大家务必理解 null value 與 unset 的本質區別,這在一些進階的变量处理上是很嚴格的。$str=expr若$str没设定,则expr作为返回值,同时将$str赋值为expr。否则以$str的值作为返回值。示例 CODE:$str=#设为 null$var=$str=expr#定义 var$echo$var$echo$str$unset str#取消$var=$str=expr#定义 var$echo$varexpr$echo$strexpr$str:=expr若$str没设定或为null,则expr作为返
12、回值,同时将$str赋值为expr。否则以$str的值作为返回值。示例 CODE:$str=#设为 null$var=$str:=expr#定义 var$echo$varexpr$echo$strexpr4.内置变量内置变量在在shell中已经定义的变量中已经定义的变量,可以在脚本文件中直接使用可以在脚本文件中直接使用,且不允许对这些变量赋值。且不允许对这些变量赋值。内置变量内置变量“$1”“$2”“$3”,将多个命令行参数看作是多个将多个命令行参数看作是多个“单词单词”“$1$2$3$4”,将所有命令行参数组织成一个整体将所有命令行参数组织成一个整体,作为一个单词作为一个单词第一个第一个,第
13、二个第二个,.,命令行参数脚本文件本身的名字命令行参数的个数命令行参数脚本文件本身的名字命令行参数的个数(不包括脚本文件的名字在内不包括脚本文件的名字在内)shell进程最近启动的后台进程的进程最近启动的后台进程的PIDshell进程自己的进程自己的PID最后一次执行的命令的返回码含义最后一次执行的命令的返回码含义$!$#$0$1$2,“$*”“$”$?位置变量位置变量$cat arg.cmain(int argc,char*argv)int i;for(i=0;iargc;i+)printf(“%d:%sn”,i,argvi);$gcc arg.c o arg$chmod u+x param;$cat param#!/bin/shecho$echo$#echo”Usage:$0 arg1 arg2”./arg“$”./arg“$*”$./param Copy Files to$HOME25524Usage:./param agr1 arg2 0:./arg1:Copy2:Files3:to4:/home/fe20070:./arg1:Copy Files TO/home/fe2007例例:位置变量位置变量$*与与$的区别的区别示例示例:position_var 下一节内容提示:shell程序设计程序设计