第4章 Linux shell程序设计
Linux操作系统(第4版)shell编程
引用变量时,需在变量名前面加“$”符号。 • 使用变量时,需要在变量名前加“$”符号,
例如echo $season。当然使用时也会遇到一些 比较特殊的情况,就是变量名包含在其他字符 串中,这时就需要用“{}”将变量名括起来。
10.1.3 管道
• 管道和输入输出重定向十分类似。管道的 作用是在一个命令的标准输出和另一个命 令的标准输入之间建立一个通道。
10.1.4 shell里的特殊字符
• 和其他编程语言一样,shell里也有特殊字 符,常见的有美元符号“$”、反斜线“\” 和引号。美元符号表示变量替换,即用其 后指定的变量的值来代替变量。反斜线“\” 为转义字符,用于告诉shell不要对其后面 的那个字符进行特殊处理,只当作普通字 符。而shell下的引号情况比较复杂,分为3 种:双引号“"”、单引号“'”和倒引号 “`”。
• conditionN为分支条件,每个分支条件后必须以两个分号“;;” 结尾。如果都无法匹配,可用“*”代替,相当于default。 10.4.2小节中的if/elif/.../else结构多重分支语句示例也可改写 成如下形式。
• #!/bin/bash • case "$#" in • 0) echo "You didn't enter any parameter" • ;; • 1) echo "You entered only one parameter" • ;; • *) echo "You entered $# parameters" • ;; • esac • 当分支条件较多时,case语句将比if的多重分支显得简洁清晰。
Linux的Shell编程 Shell程序设计的流程控制
和其他高级程序设计语言一样,Shell提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令创建非常复杂的程序。
与传统语言不同的是,Shell用于指定条件值的不是布尔运算式,而是命令和字串。
1.测试命令test命令用于检查某个条件是否成立,它可以进行数值、字符和文件3个方面的测试,其测试符和相应的功能分别如下。
(1)数值测试:-eq 等于则为真。
-ne 不等于则为真。
-gt 大于则为真。
-ge 大于等于则为真。
-lt 小于则为真。
-le 小于等于则为真。
(2)字串测试:= 等于则为真。
!= 不相等则为真。
-z字串字串长度伪则为真。
-n字串字串长度不伪则为真。
(3)文件测试:-e文件名如果文件存在则为真。
-r文件名如果文件存在且可读则为真。
-w文件名如果文件存在且可写则为真。
-x文件名如果文件存在且可执行则为真。
-s文件名如果文件存在且至少有一个字符则为真。
-d文件名如果文件存在且为目录则为真。
-f文件名如果文件存在且为普通文件则为真。
-c文件名如果文件存在且为字符型特殊文件则为真。
-b文件名如果文件存在且为块特殊文件则为真。
另外,Linux还提供了与(!)、或(-o)、非(-a)三个逻辑操作符,用于将测试条件连接起来,其优先顺序为:!最高,-a次之,-o最低。
同时,bash也能完成简单的算术运算,格式如下:$[expression]例如:var1=2var2=$[var1*10+1]则var2的值为21。
2.if条件语句Shell程序中的条件分支是通过if条件语句来实现的,其一般格式为:if 条件命令串then条件为真时的命令串else条件为假时的命令串fi3.for循环for循环对一个变量的可能的值都执行一个命令序列。
赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。
for循环的一般格式为:for变量名[in数值列表]do若干个命令行done变量名可以是用户选择的任何字串,如果变量名是var,则在in之后给出的数值将顺序替换循环命令列表中的$var。
Linux shell程序设计
1.shell是Linux的一个重要层次,是用户与系统交互的界面。
2.Linux默认的shell是bash3.shell的特点:(1)对已有命令进行适当组合,构成新的命令。
如建立shell脚本。
(2)提供文件名扩展字符,使得用单一字符串可以匹配多个文件名,省去输入一长串文件名的麻烦。
(3)可以直接使用shell内置命令,而无需创建新的进程。
(4)允许灵活的使用数据流,提供通配符、输入输出重定向、管道线等机制,方便模式匹配、IO处理和数据传输。
(5)结构化的程序模块,提供顺序、条件、循环等控制流程。
(6)提供在后台执行命令的能力。
(7)提供可配置的环境,允许用户创建和修改命令、命令提示符和其他系统行为。
(8)提供一个高级命令语言,允许用户创建从简单到复杂的程序。
4.shell程序也可以放在文件上,称为shell脚本。
5.#!/bin/bash 表示下面的脚本使用bash编写的,必须调用bash程序对它解释执行。
6.执行shell脚本的方式:(1)输入定向到shell脚本。
用输入重定向方式让shell从给定文件中读入命令行,并进行相应处理。
(2)以脚本名作为bash参数。
(3)将shell脚本的权限设置为可执行,然后在提示符下直接执行。
7.shell脚本名可直接作为命令名使用。
8.事件表示一个操作已经发生,即命令已被执行。
显示的行命令之前的数字表示相应命令行在命令历史表中的序号,称为历史事件号。
历史事件号从1开始顺序向下排,最后执行的命令的事件号最大。
9.历史文件中能够保留的命令个数有限,默认值是500.如果用户输入的命令太多,超过限定值,最早输入的命令就会从历史表中删除。
10.一般通配符:(1)*(星号)匹配任意字符的0次或多次出现。
(2)?(问号)匹配任意一个字符。
(3)[字符组]匹配该字符组所限定的任何一个字符。
(4)!(惊叹号)表示非11.shell中的三种引号:(1)单引号(2)双引号(3)倒引号12. 双引号括起来的字符均作为普通字符对待。
linux下shell 程序设计_毕业课程设计
linux下shell 程序设计shell编程教学要点1.深入理解shell概念。
2.掌握linux下shell程序设计流程。
3.理解shell程序与C程序设计的区别。
4.掌握shell程序设计中用户变量和表达式的使用方法。
一.Shell编程概述问题1:请各位同学在home目录下创建5个目录,目录名称分别为student0,student1,student2,student3,student4.且修改它们的权限为所有用户都具有完全的操作权限。
问题2:请各位同学在home目录下创建100目录,目录名称为class1—class100.解决办法:通过一个shell脚本程序来实现,程序如下,用vi编辑器建立一个firstshell文件,内容如下:#!/bin/bash //指明该程序被那个shell来执行!cd /home/shelldir //进入home/shelldir目录mkdir newdir //在shelldir目录下新建newdir目录i=0 //给变量i赋初值while [ $i –lt 50 ]; do //循环,判断i是否小于50,成立继续循环let i=i+1 //让i变量值增加1mkdir /home/shelldir/newdir/student$i //在newdir目录下创建student1到student50chmod 754 /home/shelldir/newdir/student$idone保存文件,退出vi,通过执行#chmod a+x firstshell修改文件权限,赋予文件可执行权限,通过#./firstshell或者#/bin/bash firstshell来执行程序,查看程序运行结果。
程序说明:1.程序必须以下面的行开始(必须方在文件的第一行):#!/bin/bash符号#!用来告诉系统它后面的参数是用来执行该文件的程序。
在这个例子中我们使用/bin/bash来执行程序。
shell程序linux课程设计
shell程序linux课程设计一、课程目标知识目标:1. 理解Shell的基本概念,掌握其在Linux系统中的作用和重要性。
2. 学会使用基本的Shell命令,如文件操作、目录切换、权限管理等。
3. 掌握Shell脚本编写的基础知识,包括变量定义、流程控制、函数等。
4. 能够运用所学知识解决实际问题,如编写简单的自动化脚本。
技能目标:1. 培养学生熟练使用Linux终端和Shell命令的能力。
2. 培养学生编写和调试简单Shell脚本的能力。
3. 培养学生运用Shell脚本实现自动化任务的能力。
情感态度价值观目标:1. 培养学生对Linux系统和Shell编程的兴趣,激发学习热情。
2. 培养学生面对问题时的独立思考、解决问题的能力。
3. 培养学生的团队协作意识,学会与他人分享和交流学习经验。
课程性质:本课程为Linux shell程序设计,旨在让学生掌握Shell编程的基本知识,提高其在Linux系统下的操作能力和解决问题的能力。
学生特点:学生具备一定的计算机基础知识,对Linux系统有一定了解,但Shell编程经验较少。
教学要求:结合学生特点,课程设计应注重实践,以实例为主线,引导学生动手实践,提高其编程能力和实际操作能力。
将目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容1. Shell概述- Shell的定义与作用- 常见的Shell类型及特点2. 基本Shell命令- 文件和目录操作命令:ls、cd、pwd、mkdir、rm、cp、mv - 权限管理命令:chmod、chown- 文本处理命令:cat、grep、sort、uniq、cut、awk3. Shell脚本编写基础- 变量定义与使用- 流程控制语句:if、for、while- 函数的定义与调用4. Shell脚本实例分析- 简单自动化脚本编写- 系统监控脚本编写- 文件处理脚本编写5. Shell脚本调试与优化- 常见错误类型及解决方法- 调试技巧与优化策略教学内容安排与进度:1. 第1周:Shell概述及基本概念2. 第2周:基本Shell命令学习3. 第3周:Shell脚本编写基础4. 第4周:Shell脚本实例分析5. 第5周:Shell脚本调试与优化教材章节关联:1. Shell概述:《Linux操作系统》第3章2. 基本Shell命令:《Linux操作系统》第4章3. Shell脚本编写基础:《Linux Shell编程》第2章4. Shell脚本实例分析:《Linux Shell编程》第3章5. Shell脚本调试与优化:《Linux Shell编程》第4章三、教学方法本课程将采用以下教学方法,以促进学生主动学习,提高教学效果:1. 讲授法:教师通过讲解Shell编程的基本概念、语法和技巧,为学生提供必要的理论知识。
Linux shell 程序设计
2. Vi编辑器的使用(续)
进入插入模式的操作:
按“i”:从光标当前位置开始输入文件。 按“a”:从目前光标所在位置的下一个位 置开始输入文字。 按“o”:在光标所在的行的下面插入一行, 从行首开始输入文字。 按“I”:在光标所在行的行首插入。
2. Vi编辑器的使用(续)
进入插入模式的操作:
按“A”:在光标所在行的行末插入。 按“O”:在光标所在的行的上面插入一行。 按“s”:删除光标位置的一个字符,然后 进入插入模式。 按“S”:删除光标所在的行,然后进入插 入模式。
4. Shell变量(续)
预定义变量:
预定义变量和环境变量相类似,也是在Shell 一开始时就定义了的变量。所不同的是,用 户只能根据Shell的定义来使用这些变量,所 有预定义变量都是由符号“$”和另一个符号 组成的。
4. Shell变量(续)
预定义变量:
常用的Shell预定义变量如下。 $#:位置参数的数量。 $*:所有位置参数的内容。 $?:命令执行后返回的状态。 $$:当前进程的进程号。 $!:后台运行的最后一个进程号。 $0:当前执行的进程名。
2. Vi编辑器的使用(续)
复制:
“yw”:将光标所在之处到字尾的字符复制 到缓冲区中。 “nyw”:复制n个字到缓冲区。 “yy”:复制光标所在行到缓冲区。 “nyy”:例如,“6yy”表示复制从光标所 在行开始的6行字符。 “p”:将缓冲区内的内容写到光标所在位 置。
2. Vi编辑器的使用(续)
4. Shell变量
像高级程序设计语言一样,Shell也提供说明 和使用变量的功能。对Shell来讲,所有变量 的取值都是一个字符,Shell程序采用“$var” 的形式来引用名为var的变量的值。
第4章 Linux下的shell编程
§4 shell 的常用语句
逻辑运算符 &&(与)和 ||(或) ( (
条件1 条件2 条件1 条件2 条件 && 条件 或 条件 -a 条件 条件1 条件2 条件1 条件2 条件 || 条件 或 条件 -o 条件 ! 求反 : 空命令(表示什么也不做),条件为真,退出值 空命令(表示什么也不做),条件为真, ),条件为真 为0 true 条件总为真,退出值为0 条件总为真,退出值为 false 条件总为假,退出值不为0 条件总为假,退出值不为
§2 shell 变量
位置变量(位置参数) 位置变量(位置参数)
命令行: 参数1 参数2 参数3 命令行:命令名 参数 参数 参数 …… 位置变量: $1 $2 $3 …… $9 位置变量:$0 例:
#!/bin/bash # 打印第一个参数,首先检查是否有一个参数: 打印第一个参数,首先检查是否有一个参数: if [ "$#" -eq 0 ]; then echo "usage: $0" else echo " The argument is $1 " fi
§2 shell 变量
数组
只提供一维数组, 只提供一维数组,但不限制数组的大小 数组下标从0开始 数组下标从 开始 数组赋值
数组名[下标 值 数组名 下标]=值 下标 数组名={值 数组名 值1 值2 值3 ……}
取消数组定义
unset week[4]:取消week中第 个元素的定义 :取消 中第4个元素的定义 中第 unset week:取消整个 :取消整个week数组的定义 数组的定义
§3 shell 操作符
运算符
算术运算符:+,-, , , , 算术运算符:+,-,*,/,>>,<< :+,-, 逻辑运算符: 逻辑运算符:&&,||,! , ,! 比较运算符:= (-eq), (-gt), (-lt), 比较运算符:= (-eq),> (-gt),< (-lt), != (-ne),<= (-le),>= (-ge) , , 文件操作符: , , , , 数字, 文件操作符: -x,-f,-r,-w,-s 数字,……
项目四LinuxShell程序设计PPT课件
• 4.1.1 变量 • 在Shell中有三种变量:系统变量,环境变量,用户变量。其中系统变量在对参数判断
和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置,用户变量在编 程过程中使用最多。 • 这几种变量的赋值方法各不相同,主要有:直接设置变量值、变量之间的置换、从命令 行参数获取、从环境变量获取和用户输入等几种方式。 • 引用变量一般采用“$variable”的形式引用变量variable的值。
菜单供用户进行下一次选择,当用户按“q”键后,退出循环。Shell脚本的文件名为test7.sh。
第23页/共42页
任务三 编辑与运行Shell脚本 • 4.3.1 vim的使用 • vi/vim是Linux系统中使用最为普遍的全屏幕交互式文本编辑程序。它没
有菜单,只有命令,但功能非常强大。vim可以执行输出、删除、查找、 替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定 制。 • Vim有3种基本工作模式:命令模式、插入模式和末行模式。 • 运行Vim编辑器的命令格式是: • vim [选项] [文件名] • 执行vim命令后,首先进入的是命令模式。用户输入进入插入模式的命令 后,即可进入插入模式。
int2则为真gt如果int1int2则为真ge如果int1int2则为真lt如果int1int2则为真le如果int1int2则为真202131011表45常用的字符串测试运算符运算如果字符串str的长度不为0则为真202131012表46常用的文件测试运算符运算符说明如果文件存在且属于当前组文件则为真nt测试两个文件的新旧前一个文件比后一个新则为真ot测试两个文件的新旧前一个文件比后一个旧则为真202131013表47逻辑运算符运算与运算两个逻辑值为真返回值才为真否则为假202131014先练习使用表达式然后用文本编辑器gedit编写一个计算15的平方的shell脚本test2sh进一步熟悉表达式的作用
项目四LinuxShell程序设计
2.环境变量
HOME 当前用户的主目录 PATH 命令搜索路径 LOGNAME 用户登录名 PS1 第一命令提示符,是#或$ PS2 第二命令提示符,默认是> PWD 用户的当前目录 UID 当前用户标识符 TERM 终端的类型 SHELL 用户的Shell类型及路径 HISFILE 存储历史命令的文件
任务三 编写分支程序
if语句
1.if语句 if表达式1 then 语句块1 elif表达式2 then 语句块2 elif表达式3 then 语句块3 … else 语句块n fi
操作实例
编写一个Shell脚本test3.sh,接收用户 输入的文件名,然后在当前目录下检查该文 件是否存在。 #! /bin/bash echo “Enter a file name:” read file if [ -f $file ] then echo “File $file exists.” fi
任务六 作业调度
作业(Job)是用户提交给操作系 统计算的一个独立任务。 用户可以直接控制的作业称为前台 作业。用户放在内存中自动执行的作 业称为后台作业。
前台作业与后台作业
将作业放到后台执行的方法是在命 令后面加上“&”符号。 用“Ctrl+Z”键将当前在前台运行的 作业放到后台,并暂停执行。 列出后台作业状态命令-jobs 格式:jobs [选项] [作业ID]
任务四 编写循环程序
1.for循环 for循环变量 [in列表] do 语句块 done
操作实例
编写一个Shell脚本test5.sh,显示 当前目录下的所有.sh文件的名称和 内容。
#! /bin/bash for file in *.sh do echo “Filename:$file” cat $file echo “----------------------------------------” done
Linux程序设计之shell程序设计
Linux程序设计之shell程序设计 看了《linux程序设计(第4版)》(作者:Neil Matthew ,Richard Stones ,陈建,宋健建译)。
做个笔记,以备后⾯查看。
⾸先,清楚⼏个概念。
shell编程属于脚本编程,脚本⽂件就是指令的集合,GCC是GNU编译系统驱动程序。
Linux中的库分两种:静态库和共享库。
静态库以.a结尾,也叫归档⽂件(archive),类似于windows中的.lib⽂件,他的缺点是同时运⾏的多个程序使⽤同个函数库函数时,内存中会有多个该函数及该程序⽂件的副本,浪费了内存。
共享库以.so结尾,类似于windows中的.Dll⽂件。
shell是对linux内核的⼀种封装,提供了⼀些函数的接⼝,shell程序设计就是利⽤这些函数接⼝进⾏编程。
⼀般linux系统的shell装的是bash(Bourne Angain Shell),安装为/bin/sh,可以⽤$/bin/bash --version命令查看bash版本号:重定向 重定向有重定向输⼊和重定向输出,似乎重定向输出⽤的⽐较多,可以将默认输出到屏幕上的内容重定向输出到⼀个⽂档中,eg:也可以⽤>>将内容追加的重定向到已有的⽂件中,eg:重定向输⼊使⽤<符号管道管道的作⽤是可以让进程进⾏通信,这样⼀个进程的结果就可以作为另⼀个进程的操作对象,⽐如说想对ps列出的进程列表进⾏sort排序,然后分屏输出,就可以使⽤命令:ps | sort more通配符通配符可以匹配字符串、单个字符等*:表⽰任意字符串?:表⽰任意单个字符[]:[]中可以添加任意的字符[^ ]:表⽰不匹配[]⾥⾯的字符{}:中添加的是字符串创建脚本可以使⽤vim编辑脚本⽂件,使⽤bash的话脚本⽂件的⾸⾏是:#!/bin/sh 声明语句。
linux中的变量不⽤声明类型,系统默认是字符串型,当时数值时,系统会⾃动转变类型,使⽤“$”+变量名,可以访问变量内容。
Linux操作系统实验3-Shell程序设计
通过Shell编程中变量的定义和赋值的操作,进行条件测试语句的程序设计、选择结构的程序设计和循环结构的程序设计。
1.编写Shell程序,判断文件是否是符号链接文件,如果是则移动到/temp目录下,否则不做任何处理;代码:#!/bin/bash#filename:linkfileecho "Please input the direction of the file:"read FILENAMEif [ ! -f $FILENAME ];thenecho "$FILENAME is not exist!"exitelseif [ ! -L $FILENAME ];thenecho "$FILENAME is not a symbolic file!"exitelsemv $FILENAME /tempecho "$FILENAME has moved to /temp"fifi实验步骤:使用ln -s item link命令建立符号链接(软链接)文件,如图所示:为Q1.sh设置运行权限,并执行Q1.sh:查看链接文件情况:已经移动至/temp目录2.编写Shell程序,使用select命令生成选择菜单,允许用户在菜单中选择,并基于选择执行相应的命令;代码:#!/bin/bash#filename:selectPS3="Please choose the command:"select cmd in "ls -l" "date + %y" pwd who "cd /root" ps df clear exit do$cmdDone实验步骤:为Q2.sh设置运行权限,并执行Q2.sh:3.编写Shell程序,分别采用while和until循环结构来计算1~50之间所有奇数之和。
第4章 Shell程序设计PPT课件
-z string 度为0。
判断字符串string是否为空串,即长
-n string
判断字符串string 是否为非空串。
string1 = string2 判断字符串string1和 string2是否相等。
string1 != string2 判断字符串string1和 string2是否不等。
val1 –ne val2
判断val1和val2的数值是否
不等。
val1 –lt val2 判断val1是否小于val2。
val1 –le val2 判断val1是否小于等于val2。
val1 –gt val2 判断val1是否大于val2。
val1 –ge val2 。
判断val1是否大于等于val2
string1 < string2 按字符编码表排序,字符串 string1是否在string2之前。
string1 > string2 按字符编码表排序,字符串 string1是否在string2之后。
11
4.3.4 数值测试
val1 –eq val2 相等。
判断val1和val2的数值是否
不存在返回假。
-r pathname 存在返回假。
判断路径pathname是否为可读,若路径不
-s filename
判断文件filename的尺寸是否大于0,若文
件不存在返回假。
-S filename 存在返回假。
判断文件filename是否是Socket,文件不
-u pathname 判断路径pathname是否设置了SUID位, 若路径不存在返回假。
file1 -nt file2 判断文件file1是否比文件file2新。 file1 -ot file2 判断文件file1是否比稳健file2旧。
linux shell
程序文件视作命令来执行( 将shell程序文件视作命令来执行(因此,shell程序 程序文件视作命令来执行 因此, 程序 文件可以看作是将各种命令组合在一起而形成的新命 令),此时必须赋予 ),此时必须赋予shell程序文件执行权限 此时必须赋予 程序文件执行权限 $ <shell程序文件名 [<参数 程序文件名> 参数1> <参数 参数2> ……] 程序文件名 参数 参数 例: ① $ chmod a+x shex1 给程序文件赋予可执行属性
shell程序运行的 种方法 程序运行的2种方法 程序运行的
运行shell程序有两种方法: 程序有两种方法: 运行 程序有两种方法 环境下, 程序文件作为子shell程序被调 在shell环境下,将shell 程序文件作为子 环境下 程序被调 用执行 $sh <shell程序文件名 [<参数 程序文件名> 参数1> <参数 参数2> ……] 程序文件名 参数 参数 例: $sh shex1
编辑状态下的文字输入
在编辑状态下,有光标闪动,这是文字插入点。 在编辑状态下,有光标闪动,这是文字插入点。 在编辑状态下,输入以下编辑命令,便进入插入模式: 在编辑状态下,输入以下编辑命令,便进入插入模式: a:从光标所在位置后开始追加文字,光标后的文字 :从光标所在位置后开始追加文字, 随追加的文字向后移动。 随追加的文字向后移动。 i:从光标所在位置前开始插入文字,光标后的文字随 :从光标所在位置前开始插入文字, 追加的文字向后移动。 追加的文字向后移动。 o:在光标所在行下方新增一行,并进入编辑状态。 :在光标所在行下方新增一行,并进入编辑状态。 编辑状态下输入文字时, 种模式: 插入” 编辑状态下输入文字时,有2种模式:“插入”与“改 种模式 键即可转换状态。 写”,按“Insert”键即可转换状态。 键即可转换状态 编辑状态下按“ 编辑状态下按“ESC”键,就退出插入模式。此时输入 键 就退出插入模式。 “/”,进入一般命令状态,然后输入欲搜索的字符再按回车 ,进入一般命令状态, 光标将指向文本中与字符匹配的地方。 键,光标将指向文本中与字符匹配的地方。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
$ cat safrm cp $* ~/tmp #now remove the file rm $* $safrm abc def xx guio
程序中只用了$1,因此只有abc一个 文件被删除。
程序中用了$*,表示命令行 中的所有位置参数,因此四 个文件都被删除。
例4.4 书P109-110
4.4shell特殊字符
引号
双引号:除$、倒引号(`)和反斜线(\)外,均作 为普通字符对待。
单引号:单引号中的字符都作为普通字符出现。
倒引号:命令替换。
13
4.4shell特殊字符
引号
14
4.4shell特殊字符
输入/输出重定向符
输入重定向符——< 输出重定向符——> 输出附加定向符——>> 即时文件定向符——
exam10
4.5shell变量
环境变量
什么是环境变量
由系统统一命名的、一些决定系统运行环境的变量。部分环境变
量的值由系统给定,部分环境变量的值可由用户给定。
环境变量决定的相关内容:
系统提示符
可执行程序的搜索路径
用户主目录是什么 用户的当前目录是什么等等
31
4.5shell变量
Shell接收用户输入的命令并把它送入内核去执行。
Shell起着协调用户与系统的一致性和在用户与系统 之间进行交互的作用。
3
4.1shell概述
什么是shell
外层应用程序 命令解释器shell 系统核心 硬件
Shell在Linux系统中的地位
4
4.1shell概述
shell的功能
输入重定向到shell脚本 以脚本名作为bash参数 将shell脚本的权限设置为可执行
6
4.1shell概述
shell的特点和主要版本:
组合新命令 直接使用shell结构化的程序模块
可配置的环境
提供了文件名扩展字符 灵活地使用数据流 在后台执行命令 高级的命令语言
cmd <filename >filename2
cmd <filename cmd <delimiter
cmd命令以filename文件作为标准输入,以filename2
文件作为标准输出 cmd命令以filename文件作为标准输入 从标准输入中读入,直至遇到delimiter分界符
cmd <&m
cmd >&m cmd <&_
局部变量:在一个 SHELL 中,对一个变量仅做赋值和引用(不 做其它动作),该变量就称为是这个SHELL的局部变量。 一旦一个新的SHELL开始运行,就在它自己的环境中运行,并 且有它自己的局部变量,一般地,子SHELL不能存取由父 SHELL赋值的局部变量,也不能改变父SHELL的局部变量值。
36
4.5shell变量
.bashrc文件
37
4.5shell变量
.bash_logout文件
38
4.5shell变量
环境变量
局部变量
子SHELL:注册SHELL为了运行一个程序而产生并执行的一个
全新的SHELL,程序中的命令由这个全新的SHELL来解释,这 个全新的SHELL,称为注册SHELL的子SHELL。
程序运行 变量和文件名的替换 I/O重定向 管道
是否为内置命令 是外部命令 或实用程序 用户输入命令 提交给shell
环境控制
解释型程序设计语言
是内置命令
在系统中查找该命令的 文件并调入内存执行
内核中的系统功能调用
命令解释过程
5
4.1shell概述
执行shell脚本的三种方式:
$#:命令行上参数的个数。
$?:上一条命令执行后的返回值。
$$:当前进程的进程号。 $!:上一个后台命令对应的进程号。
$-:由当前shell设置的执行标志名组成的字符串。
$*:在命令行上实际给出的所有实参字符串。 $@:表示在命令行中给出的所有实参。
27
例4.2
$ cat sh_prg echo $# echo $* echo $1 $2 $3 shift 2 echo $# echo $* echo $1 $2 $3
第四章
Linux shell程序设计
主要内容:
shell的主要特点、类型、建立和执行的方式
bash变量的分类、定义形式及引用规则
各种控制语句的格式、功能及流程
bash函数的构成及使用规则 bash中的内置命令
2
4.1shell概述
什么是shell
Shell是系统的用户界面,提供了用户与内核进行交 互操作的一种接口(命令解释器) 。
通配符
模式表达式
*(模式表):匹配给定模式表中“模式”的0次或多次出现,各 模式之间以“|‖分开。 +(模式表):匹配给定模式表中“模式”的1次或多次出现, 各模式之间以“|‖分开。 ?(模式表):匹配给定模式表中“模式”的0次或1次出现,各 模式之间以“|‖分开。 @(模式表):仅匹配给定模式表中“模式”的1次出现,各模 式之间以“|‖分开。 !(模式表):除给定模式表中一个“模式”之外,它可以匹配 其他任何东西。 12
环境变量
用env或set 命令可以显示当前环境变量的名和它 们的值,也可用env或set 命令来设置变量
环境变量的名字是大写的字母
几个环境变量的意义:
HOME (用户主目录)
PATH (搜索路径)
PWD (当前目录) HOSTNAME (主机名) HISTFILESIZE (命令历史文件HISTFILE的大小) 32
把文件描述符m作为标准输入
把标准输出重定向到文件描述符Fra bibliotek中 关闭标准输入
4.4shell特殊字符
注释、管道线和后台命令
注释:# 管道线:| 后台命令:&
18
4.4shell特殊字符
命令执行操作符
顺序执行:各个命令之间以分号隔开 逻辑与:&& 逻辑或:||
19
4.4shell特殊字符
命令 [参数]<<标记符 输入行 …… 标记符
与文字描述字有关的重定向
标准输入、标准输出、错误输出 0 1 2
15
4.4shell特殊字符
输入/输出重定向符
$vi test.c #include <stdio.h> { int a; scanf(―%d‖,&a); printf(―%d\n‖,a); } $cat d1 3 $gcc test.c $./a.out <d1
4.2命令历史
配置历史命令环境
$HISTFILE=―/home/用户名/.myhistory‖ $HISTSIZE=600
9
4.3别名
定义别名
alias [name[=value]]…
取消别名
unalias name …
10
4.4shell特殊字符
通配符
一般通配符
4.5shell变量
位置参数
位置参数及其引用
可以编写一个shell脚本,当从命令行或者从其他shell脚 本中调用它的时候,这个脚本接收若干参数。这些选项是 通过Linux作为位置参数(positional parameter) 提供给shell程序的。在shell脚本中应用变量,接收实参, 这类变量的名称很特别,分别是1,2,3,…,这类变量 称为位置变量。位置参数1存放在位置变量1中,位置参数 2存放位置变量2中,……,在程序中可以使用$1, $2,……来访问。
数组:
declare –a 数组名 //声明一个数组 ${数组名[下标]} unset 数组名 //读取数组元素的值 //取消整个数组的定义
unset 数组名[*]
21
4.5shell变量
输入/输出命令
read:从键盘上读取数据,然后赋给指定的变量 echo:显示其后的变量值或者直接显示它后面的 字符串。
24
4.5shell变量
位置参数
用set命令为位置参数赋值
在shell程序中可以利用set命令为位置参数赋值或重新赋 值。 一般格式: set [参数表]
说明:该命令后面无参数时,将显示系统中的系统变量的 值;如果有参数将分别给位置参数赋值。
25
4.5shell变量
位置参数
*:任意多个字符
?:任意一个字符
[ ]:匹配字符组所限定的任意一个字符 !:若它紧跟在一对方括号的左方括号之后,则表示不在一 对方括号所列出的字符。 ^(幂次方号):只允许放在一行的开始匹配字符串。 $(美元号):只在行尾匹配字符串,它放在匹配单词的后 面。
11
4.4shell特殊字符
33
4.5shell变量
环境变量
set命令
显示迄今为止所定义的全部变量,包括局部量和公用量。 用来设定位置参数的值。 改变执行shell脚本时的选项设定,可以使用户改变shell的 功能。 利用set设置标志:set –标志 关闭标志:set +标志
34
4.5shell变量
环境变量
环境文件
.bash_profile(bsh和ksh 是 .profile;csh 是 .sh_login) .bashrc (在.bash_profile之后执行) .bash_logout (在用户退出时执行)
35