shell程序设计(1)

1.shell概述

Unix系统中通常提供三种不同的shell,即Bourne shell(sh)、C-shell(csh)、和Korn shell(ksh)。在Linux系统中还包含了Bash,它是由sh发展而来。稍有不同。还包含csh、ksh的特色,但大多数sh脚本可以不加修改的在Bash下运行。

2.shell脚本执行
执行shell脚本的方式基本上有三种:
1)输入定向到shell
这种方式是用输入重定向方式让shell从给定文件中读入命令行并进行相应处理。其一般形式是:
$sh < 脚本名
例如:$sh < ex1
shell从文件ex1中读取命令行,并执行他们,当shell到达文件末尾时,就终止执行并把控制返回到shell命令状态。

2)以脚本名作为shell参数
其一般形式是:$sh 脚本名 [参数]
这种方式好处是能讲参数值传递给程序中的命令,从而使一个shell脚本可以处理多种情况。

3)将shell脚本改为有执行权限
由正文编辑器建立的shell脚本通常对用户是没有设定执行权限的。需要利用命令chmod将它改为有执行权限。例如:chmod a +x ex2 :把ex2脚本改成对所有用户都有执行权限。

2.shell变量

shell变量没有众多存储类型的限制,也不需要预定义、然后才能赋值。
shell有两种变量:环境变量和临时变量。环境变量使永久性变量,其值不会随shell脚本执行结束而消失。临时变量使在shell脚本内部定义的,使用范围仅限于定义它的程序。shell脚本临时变量又分为两类:用户定义的变量和位置参数。

1)用户定义的变量
变量名是以字母或下划线打头的字母数字和下划线符序列;并且大小写字母意义不同。长度不受限制定义变量的一般形式:变量名=字符串
注意在赋值语句中赋值号两边没有空格,否则会有错误
变量的值可以改变,只须利用赋值语句重新赋值即可。
在程序中使用变量的值时,要在变量名前加上一个符号“$”。
一个未明确赋过值的变量也仅含一个空字符串。
如果在赋给变量的值中含有空格、制表符或换行符,那么就应该用双引号
在一个赋值语句中可以出现多个赋值,变量赋值可以迭代进行。但必须注意的是,各赋值动作是从右向左实现的。A=$B B=$C C=good
变量值可以作为某个长字符串的一部分,如果它在长字符串的末尾,直接引用就可以:
s=ing
echo read$s and writ$s
如果变量在字符串的开头或者中间,需用{}区分:
dir=/usr/meng
cat ${dir}qc/ml.c
2)位置参数
由出现在命令行上的位置确定的参数称作位置参数,在sh中共有十个位置参数,其对应的名称依次是$0,$1,$2,....$9.其中$0始终表示命令名或shell脚本名。对于一个命令行,必然有命令名,也就必然有$0.
3)移动位置参数
shell中规定,位置参数不能超过9个,如果超过9个,需要使用shift命令移动位置参数。每执行一次shift命令,就把位置参数左移一次。但$0的值不会改变。
shift命令可以携带一个整数作为参数。表示左移位数,默认为1
4)预先定义的特殊变量
只能由shell根据实际情况赋值,不能通过用户重新赋值
(1)$#:记录传递给shell的参数个数,不包含脚本名本身
(2)$?:包含最后一条命令执行后的返回值,正确为0,否则非0
(3)$$:当前进程的进程号
(4)$!:在后台运行的最后一个进程的进程号
(5)$-:由当前shell设置的执行标志名组成的字符串,也就是命令的参数
(6)$*:表示命令行中实际给出的所有位置参数的字符串
(7)$@:与$*基本相同,但"$@"的值和"$*"不同。例如若$*表示位置参数字符串f1 f2 f3,那么"$*"表示"f1 f2 f3",而"$@"表示"f1""f2""f3"
5)环境变量
所有的环境变量都可以由用户自己重新定义
(1)HOME:用户主目录名
(2)IFS:定界符,内部字段分隔符。默认空白符
(3)MAIL:用户存放信件的文件路径名。必须由用户自己设置。
(4)PATH:指定shell在查找命令时所需要的检索路径。由冒号隔开。
(5)PS1:主提示符,默认为$,超级用户默认为#
(6)PS2:次提示符,默认为>(大于号+一个空格)
(7)SHELL:表示要查找当前所用shell的路径,默认值为/bin/sh
(8)TERM:终端类型
(9)HZ:每秒时钟的中断次数,值取决于系统的硬件,并且在配置在文件/etc/initscript
(10)TZ:时区
(11)LOGNAME:用户注册名
(12)MAILCHECK:确定多长时间(以秒为单位)shell检查一次由变量MAIL或者MAILPATH指定的文件中是否有邮件到达。默认是600秒。如果把它设置为0,则在每次出现系统提示符之前shell都检查一次是否有邮件到达。
(13)MAILPATH:表示各个邮箱的路径,它是由冒号隔开的一系列邮件文件的路径名,相当于建立了多个邮箱。如果设置了这个变量,那么当邮件到达该路径名中所包内含的任何一个文件时,shell都将通知用户。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值