第十一次课 9 Shell 编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 自动输入历史命令history 用户在本次系统登录后输入的所有命令系统 都记录在文件~/.bash_history中,可记录命 令的最大条数有环境变量HISTSIZE决定。 可以用上下箭头来自动输入已输入过的历史 命令,也可以用命令 history n 来查看最近n条命令。
• 别名功能 在使用linux过程中,每个命令后都要跟一些参数, 可是对于常用的参数假如每次都是手动的添加就 是显得麻烦些了。linux 可能通过命令别名的功能 来减少输入。 例如: alias dir = ‘ls -l’ 则命令dir 与命令 ls –l具有相同的功能。不过使用 alias仅对本用户的本次登录有效。如果希望对本 用户长期有效,需要在~/.barsh_profile 中加入别 名设置即可。 如果需要对系统中所有用户永久生效,则应在 /etc/bashrc 中添加别名设置。
变量的使用
• 定义变量 变量=字符串或数字
如果用于赋值的字符串中包括空格符、换行符, 则必须用单引号或双引号括起来
• 取消变量 unset 变量名 • 显示变量 echo $变量名 例:a=‘This is a t” echo “${a}est for string”
使用变量的基本命令
• read myvar:从键盘读入数据给变量 • echo $myvar:显示变量 • printf $myvar:显示变量,不换行
test数值比较
• • • • • • • exp1 –eq exp2:两表达式相等结果为真 exp1 –ne exp2:两表达式不等,结果为真 exp1 –gt exp2 :exp1>exp2,结果为真 exp1 –ge exp2:exp1>=exp2,结果为真 exp1 –lt exp2:exp1<exp2,结果为真 exp1 –le exp2:exp1<=exp2,结果为真 ! exp :表达式为假真结果为真
除了上面介绍的条件测试运算外, 除了上面介绍的条件测试运算外,test 命令的可用参数还有如下这些。 命令的可用参数还有如下这些。 (1)-a:逻辑与(AND)。 ) :逻辑与( )。 (2)-o:逻辑或(OR)。 ) :逻辑或( )。 (3)!:逻辑非(NOT)。 ) :逻辑非( )。
If语句
Shell的类型
Linux支持的shell的类型都记录在/etc/shells中。 目前比较常用的shell有ash、bash、ksh、csh、zsh等, 用下面的命令来查看你自己的shell类型: echo $SHELL $SHELL是一个环境变量,它记录用户所使用的 shell类型。你可以用命令: #shell -name 来转换到别的shell,这里shell-name是你想要尝 试使用的shell的名称,如ash等。这个命令为用户又 启动了一个shell,这个shell在最初登录的那个shell 之后,称为下级的shell或子shell。使用命令: $exit 可以退出这个子shell。
Shell语法之变量
像高级程序设计语言一样,shell也提供说明和 使用变量的功能。对shell来讲,所有变量的取 值都是一个字符串,shell程序采用$var的形式 来引用名为var的变量的值。 Shell有以下几种基本类型的变量: (1)shell定义的环境变量 (2)用户自定义的变量 (3)位置参数 (4)预定义变量
$# $n $0 $? $* $@ $$ $!
Shell语法
• • • • • test语句 分支结构(if,case) 循环结构(for,until,while,select) goto语句 函数
test命令或[]
如果要对程序流程进行分支处理,首先需要 对条件进行判断,这时就需要使用test命令。 test命令被用来判断表达式并且产生返回值。 test命令不会产生标准输出,因此必须通过其 返回值来判断test的结果,如果表达式为真, 返回值会为0(TRUE),如果表达式为假, 返回值为1(FALSE)。test命令可对整数、 字符串,以及文件进行判断.
bash的功能
• • • • • • • 交互式处理(命令解释功能) 命令补全功能(按tab或连续按两次esc) 自动输入历史命令history 别名功能 后台处理 输入输出重定向 管道
Bash高级功能
• 命令补全功能(按tab或连续按两次esc) 对于初学者而言,Linux命令繁多,十分难记, bash提供了命令补全功能。 用户在不记得命令时,可以输入命令的前几 个字母,然后按tab键,如系统命令与已输 入的字符只有一个匹配的,自动补全。如 有多个,系统发出报警声后,继续按tab键, 列出所有匹配的命令。
附加输出重定向(>>或& >>) command>>file:将标准输出的结果追加到文件 中。 command>>&file:将标准输出和标准错误输出 的结构都追加到文件中。 输入重定向(<) command<FILE:一般的程序需要自标准输入设 备输入,利用输入重定向可以将所要输入的资 料统一放入文件中,利用重定向一起输入。 附加输入重定向(<<结束字符串)
– 由操作系统提供的不常驻内存的部分命令,需要由与 该命令对应的可执行的程序存放在硬盘上。 – 任何可执行的程序。 执行方法:命令(程序)的路径+名字 选项,参数
Shell中的特殊字符
特殊字符: *:可以匹配任意长度的字符串 ?:可以匹配任何一个字符 ;:分隔多个命令 #:注释 `(倒引号):由倒引号括起来的字符串被Shell解释为命令,在 执行时,Shell会先执行该命令,并以它的标准输出结果取代 整个倒引号部分。 []:指定字符范围 [!]:排除指定范围 $:表示变量的引用。 ‘’:由单引号括起来的字符都作为普通字符出现。 “”:由双引号括起来的字符,除$、倒引号(`)和反斜线(\)仍 保留其特殊功能外,其余字符均作为普通字符对待。
环境变量: shell在开始执行时就已经定义了一些和系统的工作环 境有关的变量,这些变量用户还可以重新定义,常用的shell环境 变量有:见教材p183 • HOME:用于保存注册目录的完全路径名。 • PATH:用于保存用冒号分隔的目录路径名,shell将按 PATH变量中给出的顺序搜索这些目录,找到的第一个与命令名 称一致的可执行文件将被执行。 • TERM:终端的类型。 • UID:当前用户的标识符,取值是由数字构成的字符串。 • PWD:当前工作目录的绝对路径名,该变量的取值随cd命 令的使用而变化。 • PS1:主提示符,在特权用户下,缺省的主提示符是“#”, 在普通用户下,缺省的主提示符是“$”。 • PS2:辅助换行提示符。在shell接收用户输入命令的过程中, 如果用户在输入行的末尾输入“\”然后回车,或者当用户按回 车键时shell判断出用户输入的命令没有结束时,显示这个辅助提 示符,提示用户继续输入命令的其余部分,缺省的辅助提示符是 “>”。 • USERNAME:当前登录的用户名。
• if语句是用来表示判断的最常用的一条语句。 其语法结构分为3种,如下所示。
• 1.if结构
if结构的格式如下: if [expression] then [EXPRESSIONS] fi
test中字符串比较
• • • • String1 = string2:如果相同返回真 String1 != string2:如果不同返回真 -n string :不空则结果为真 -z string :为空则结果为真
test 与文件有关的测试
• • • • • • • • • • -e file:文件存在则为真 -d file:文件是一个目录,结果为真 -f file:如果是一个普通文件,结果为真 -g file:set-group-id被设置,结果为真 -r file:文件可读,结果为真 -s file:长度不为0则结果为真 -u file:set-user-id被设置,结果为真 -w file:文件可写,结果为真 -x file:文件可执行,结果为真 -h file:文件为符号链接时为真
设置环境变量
使用用格式 环境变量名=变量值(=两边都没有空格) 即可重新设置环境变量。 查看所有环境变量的命令:set
Байду номын сангаас
用户变量
• 用户变量是最常用到的变量,使用也十分简单。 用户定义的 变量名必须由字母数字及下划线组成,并且变量名的第一个 字符不能为数字。 • Shell下的变量和C语言中的变量不同,无须声明即可使用, 赋值同时即声明了变量。对于用户变量,用户可按如下方式 赋值。 • varible_name=value • 若要定义只读变量,可用readonly限制。例如 readonly 变量名 • Export可以将一个局部变量提供给shell执行的其他命令使用 • 默认的赋值是对字符串赋值。 • 如果要对数字或数组进行声明,则要用declare命令。
• 管道pipe pipe同样可以在标准输入输出和标准错误输 出间做代替工作,这样一来,可以将某一个程 序的输出送到另一个程序的输入,其语法如下: command1| command2[| command3...] 也可以连同标准错误输出一起送入管道: command1| &command2[|& command3...]
Shell命令的格式
Shell命令的格式为: Command -options [arguments] 可以将用户输入的命令分为两类: • 内部命令:由操作系统提供,与操作系统内核联 系比较紧密的命令,在操作系统自举过程中已经 作为进程被启动,常驻内存。运行比较快。 执行方法:直接在命令提示符下输入命令名及其选 项和参数。 • 外部命令
第九章 Shell 编程
Shell基本概念
Shell是系统的用户界面 , 提供了用户与内核 是系统的用户界面, 是系统的用户界面 进行交互操作的一种接口。 进行交互操作的一种接口。它接收用户输入 的命令并把它送入内核去执行。 的命令并把它送入内核去执行。 Shell是一个命令解释器 , 它解释由用户输入 是一个命令解释器, 是一个命令解释器 的命令并且把它们送到内核。 的命令并且把它们送到内核。Shell有自己的 有自己的 编程语言,允许用户编写由shell命令组成的 编程语言,允许用户编写由 命令组成的 程序。 类似高级语言编程。 程序。Shell类似高级语言编程。用这种编程 类似高级语言编程 语言编写的Shell程序与其他应用程序具有同 语言编写的 程序与其他应用程序具有同 样的效果。 样的效果。
位置参数
• 位置参数是在程序或命令后面输入的参数, 是在调用shell程序的命令中按位置决定的 参数。可用$1..$9表示,特殊的,$0表示内 容通常为当前执行程序的文件名
预定义变量
和环境变量相似,也是shell开始时就定义的变量,在做一些参数检测 的时候十分有效,但用户不能修改这些变量。
变 量 名 命令行参数的个数 $1表示第一个参数,$2表示第二个参数,以此类推 当前程序的名称 前一个命令或函数的返回码 以"参数1 参数2 ... " 形式保存所有参数 以"参数1" "参数2" ... 形式保存所有参数 本程序的(进程ID号)PID 后台运行的最后一个进程的PID 含 义
• 输入输出重定向 在Linux中,每一个进程都有三个特殊的文件描述指针: 标准输入(standard input,文件描述指针为0)键盘 标准输出(standard output,文件描述指针为1)屏幕 标准错误输出(standard error,文件描述指针为2)屏幕 这三个特殊的文件描述指针使进程在一般情况下接收标 准输入终端的输入,同时由标准终端来显示输出, Linux同时也向使用者提供可以使用普通的文件或管道 来取代这些标准输入输出设备。 输出重定向: (>或& >)一般进程执行的结果输出到屏 幕上,但有时为了处理的方便,允许输出到文件中。 command>file:将命令的输出结果重定向到一个文件。 command>&file:将命令的标准错误输出一起重定向 到一个文件。