Linux操作系统第7讲Shell程序设计汇总
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
位置参数
如果把程序my4修改为: #Name display program if [ $# -eq 0 ];then echo “Name not provided” else echo”Your name is $2” fi 在bash中,如果执行mypgm1如下: #./my4 将得到输出: Name not provided 但是,如果执行mypgm1如下: #. /my4 wang zhang 则得到如下的输出: Your name is zhang
记录所有搜索路径 环境变量还有HOME、MAIL、SHELL
/usr/kerberos/sbin:/usr/kerberos/bin:/usr
常见的环境变量
PATH:决定了shell将到哪些目录中寻找命令或程序。 HOME:当前用户主目录。 UID:用户ID。
MAIL:当前用户的邮件存放目录。
反引号: 通知shell 执行由反引号定义的字符串。
wc当需要把执行命令的结果存放在变量中时,就可以在 shell程序中利用反引号。例如,要统计当前目录下一个文件 中test.txt有几行并把结果存在叫做var的变量中: var=`wc -l test.txt` pdksh和bash环境 见例子./my1111
通配符
字符
? * [] [a-z] [a,z]
说明
匹配一个字符 匹配一个或几个字符 列出字符的范围,例如 [abcd] 意指a到z的全部字符 意指a或z字符
特殊字符
反斜杠
在某个字符前利用反斜杠可以阻止shell把后面的字符解释为特 殊字符。例如,把$test的值赋给变量var。输入如下命令: var =$test 如下命令才把$test存放在var中: var=\$test 见例子./my111
环境变量(注意:变量名大写)
echo $PATH
指令ls完整文件名为:/bin/ls(这是绝对路径), 为什么我在任何目录下输入 ls 都可以显示呢? 这是因为环境变量 PATH 中的定义!
例如[root@www ~]# echo $PATH
/local/sbin:/usr/local/bin:/sbin:/bin:/usr /sbin:/usr/bin:/root/bin
见例子./if
测试文件f1是否存在,若存在删除它,不存在 建立文件f1
测试目录/root/u1是否存在,若存在删除 它,不存在建立它
Shell 程序设计流程控制
bash表达式的比较 1.字符串比较 = != -n -z
比较两个字符串是否相等 比较两个字符串是否不相等 判断字符长度是否大于零 判断字符长度是否等于零
SHELL:当前用户用的是哪种Shell。 HISTSIZE:保存历史命令记录的条数 LOGNAME:当前用户的登录名。 HOSTNAME:主机的名称。
内部变量
部分内部变量及其作用 变量 $# $? $0 $* 作用 传给shell程序的位置参数的数目 最后命令的完成码或在shell程序内所执行的shell程序 shell程序的名称 调用shell程序所传送的全部变元的单字符串
功能:shift语句按如下方式重新命名所有的位置参数变量: $2成为$1,$3成为$2……在程序中每使用一次shift语句, 都使所有的位置参数依次向左移动一个位置,并使位置参 数“$#”减一,直到减到0。
7. shift语句
Shell常用命令
8. wait
功能:是shell等待在后台启动的所有子进程结束。 Wait的返回值总是真。 功能:退出shell程序。在exit之后可有选择地指定一 个数字作为返回状态。 命令格式:. Shell程序文件名 功能:使shell读入指定的shell程序文件并依次执行文 件中的所有语句。
特殊字符
字符
$ | # & > < >> << .filmname 空格
说明
指出shell变量名的开始 把标准输出通过管道传送到下个命令 标记注释开始 在后台执行进程 输出重定向操作符 输入重定向操作符 输出重定向操作符{添加到文件} 跟在输入结束自符串后(HERE)操作符 执行(“源”)filename文件 在两个字之间的间隔符
命令格式:export 变量名 或:export 变量名=变量值 功能:shell可以用export把它的变量向下带入子shell从而 让子进程继承父进程中的环境变量。但子shell不能用 export把它的变量向上带入父shell。 注意:不带任何变量名的export语句将显示出当前所有的 export变量。
mypgm1还说明了shell编程的另一个方面,即内部变量。在 mypgm1中的变量$#是内部变量,并提供传给shell程序的位置参数 的数目。
设计一个Shell程序,读入一个正整数,如果是奇数显 示“odd”,如果是偶数显示“even” 。
read x let y=$x/2*2 if [ $y –eq $x ];then echo “even” else echo “odd” fi
my2的示范例子: echo “Number of parameters is ”$# echo “Shell return code is ”$? echo “Program name is ”$0 echo “Parameters as a single string is ”$* 在bash中,如果从命令行中执行my2如下: #./my2 wang zhang 将得到如下的结果: Number of parameters is 2 Program name is my2 Parameters as a single string is wang zhang
分支语句if
if 语句
if语句通过判断逻辑表达式来作出选择,在 pdksh和bash中的条件语句有如下的格式: if [ expression ]; then statements elif [ expression ]; then statements else statements fi if条件是可以嵌套的,
2. eval
Shell常用命令
3. exec
命令格式:exec 命令 命令参数 功能:当shell执行到exec语句时,不去创建新的子进程, 而是转去执行指定的命令,当指定的命令执行完时,该进程, 也就是最初的shell就终止了,所以shell程序中exec后面的 语句将不再被执行。
特殊字符
双引号 在字符串含有嵌入的空格时,用双引号括起来。 这是一个有关bash的例子: var=”test string” newvar=”Value of var is $var” echo $newvar 执行上面的三行shell程序,可得到如下的结果:./my1 Value of var is test string 单引号 利用单引号把字符括起来,以阻止shell解析变 量。把前面的双引号改为单引号,执行程序可得到 如下的结果:./my11 Value of var is $var
第7讲 Shell程序设计
Shell的含义
Shell 既是一种命令语言,又是一种程序 设计语言 作为命令语言,它交互式地解释和执行用 户输入的命令 作为程序设计语言,它定义了各种变量和 参数,并提供了在高级语言中才有的控制 结构,如循环和分支。
目前流行的Shell
ash:Linux中占用资源最少的一个小Shell,它只 包含24个内部命令 bash: Linux系统默认的Shell,包含40个内部命 令,基于GNU 架构发展而来。 ksh:与商业发行版的ksh兼容,包含42个内部命 令,由 AT&T Bell lab. 发展而来,兼容于 bash csh:是 Linux比较大的内核,共包含52个内部命 令,Bill Joy 设计依附亍 BSD 版 zsh:是 Linux最大的Shell之一,共包含84个内部 命令,若没有特殊用途,没有必要安装。
bash表达式的比较
2.数字比较 -eq 比较两个数是否相等 - ge 比较一个数是否大于或是等于另一个数 -le 比较一个数是否小于或是等于另一个数 -ne 比较两个数是否不等 -gt 比较一个数是否大于另一个数 -lt 比较一个数是否小于另一个数
bash表达式的比较
3.文件操作符 -d 确定文件是否为目录 -f 确定文件是否为普通文件 -r 确定是否对文件设置了读许可。 -s 确定文件名是否具有大于零的长度 -w 确定文件是否设置了写许可 -x 确定文件是否设置了执行许可
4. export
Shell常用命令
5. readonly
Байду номын сангаас
6. read
命令格式:readonly 变量名 功能:将一个用户定义的shell变量标识为不可变的。不带 任何参数的readonly命令将显示出所有只读的shell变量。 命令格式: read 变量名表 功能:从标准输入设备读入一行,分解成若干字,赋值给 shell程序内部定义的变量。
说明:以#开始行表示注释
变量
3种类型: 环境变量:系统提供,不用定义,可以修 改 内部变量:系统提供,不用定义,不能修 改 用户变量:定义,可以修改 与其他语言的区别:非类型性质,也就是 不必指定变量是数字或字符串等。
•
•
•
用户变量举例
例1:字符串变量赋值shell程序my1: var=”string” newvar=”Value of var is $var” echo $newvar 执行shell程序my1,可得到如下的结果: Value of var is string
例2:数值变量赋值shell程序mynu : x=15 echo $x 得到如下的结果: 15
变量赋值
给变量赋值locunt=0 访问变量值lcount=$var
例如要把var的值赋给变量lcount lcount = $var 进行数值运算:(把var的值加5赋给lcount ) lcount = $(($var+5)) 或 let lcount =$var+5 或 lcount = `expr $var + 5`
Bash的功能
命令记忆能力,可多达上千个,上次登录执行过 的命令记在~/.bash_history ,本次在内存 命令补全功能,按[Tab]键 shell scripts 通配符:*,?
Shell基本语法
输入输出重定向
“>” 输出重定向到一个文件 “>>” 输出追加到一个文件 “<” 输入重定向
9. exit
10. “.”(点)
创建和执行shell程序
1.创建一个别名文件:(bash)示范文件myenv,内容如下: #! /bin/bash clear cal echo hello !!! 2.在Linux下可以用以下方法来执行mynev. chmod命令: #chmod +x mynev 3.执行shell程序 命令行上: #. /mynev
管道“|” 前台与后台
前台:command 后台:command&
Shell常用命令
bash命令解释程序包含了一些内部命令。内部 命令在目录列表时是看不见的,它们由shell本身 提供 。 1. echo
命令格式:echo arg 功能:在屏幕上打印出由arg指定的字符串。 命令格式:eval args 功能:当shell程序执行到eval语句时,shell读入参数 args,并将它们组合成一个新的命令,然后执行。
位置参数及if语句
下述是一个shell程序的my3,只带了一个参数(名字),并在屏 幕上显示这个名字: #Name display program if [ $# -eq 0 ];then echo “Name not provided” else echo”Your name is ” $1 fi 在bash中,如果执行mypgm1如下: #./my3 将得到输出: Name not provided 但是,如果执行mypgm1如下: #. /my3 wang 则得到如下的输出: Your name is wang