linuxshell编程:Linux系统下的Shell编程精讲

其实作为命令语言互动式地解释和执行用户输入命令只是Shell功能个方面Shell还可以用来进行设计它提供了定义变量和参数手段以及丰富控制结构使用Shell编程类似于DOS中批处理文件称为Shell script又叫Shell或Shell命令文件 

Shell基本语法

像高级设计语言Shell也提供介绍说明和使用变量功能对Shell来讲所有变量取值都是个字串Shell采用$var形式来引用名为var变量

Shell有以下几种基本类型变量

(1)Shell定义环境变量:

Shell在开始执行时就已经定义了些和系统工作环境有关变量用户还可以重新定义这些变量常用Shell环境变量有:

HOME 用于保存注册目录完全路径名

PATH 用于保存用冒号分隔目录路径名Shell将按PATH变量中给出顺序搜索这些目录找到个和命令名称可执行文件将被执行

TERM 终端类型

UID 当前用户识别字取值是由数位构成字串

PWD 当前工作目录绝对路径名该变量取值随cd命令使用而变化

PS1 主提示符在特权用户下默认主提示符是#在普通用户下默认主提示符是$

PS2 在Shell接收用户输入命令过程中如果用户在输入行末尾输入“\”然后回车或者当用户按回车键时Shell判断出用户输入命令没有结束时就显示这个辅助提示符提示用户继续输入命令其余部分默认辅助提示符是>

(2)用户定义变量:

用户可以按照下面语法规则定义自己变量:

变量名=变量值

要注意点是在定义变量时变量名前不应加符号$在引用变量内容时则应在变量名前加$;在给变量赋值时等号两边定不能留空格若变量中本身就包含了空格则整个字串都要用双引号括起来

在编写Shell为了使变量名和命令名相区别建议所有变量名都用大写字母来表示

有时我们想要在介绍说明个变量并对它设置为个特定值后就不在改变它值时可以用下面命令来保证个变量只读性:

readonly 变量名

在任何时候创建变量都只是当前Shell局部变量所以不能被Shell运行其他命令或Shell所利用而export命令可以将个局部变量提供给Shell执行其他命令使用其格式为:

export 变量名

也可以在给变量赋值同时使用export命令:

export 变量名=变量值

使用export介绍说明变量在Shell以后运行所有命令或中都可以访问到

(3)位置参数:

位置参数是种在Shell命令行中按照各自位置决定变量是在名的后输入参数位置参数的间用空格分隔Shell取第个位置参数替换文件中$1第 2个替换$2依次类推$0是个特殊变量内容是当前这个Shell文件名所以$0不是个位置参数在显示当前所有位置参数时是不包括$0

(4)预定义变量:

预定义变量和环境变量相类似也是在Shell开始时就定义了变量所区别用户只能根据Shell定义来使用这些变量而不能重定义它所有预定义变量都是由$符和另个符号组成常用Shell预定义变量有:

$# 位置参数数量

$* 所有位置参数内容

$? 命令执行后返回状态

$ 当前进程进程号

$! 后台运行最后个进程号

$0 当前执行进程名

其中$?用于检查上个命令执行是否正确(在Linux中命令退出状态为0表示该命令正确执行任何非0值表示命令出错)

$变量最常见用途是用做暂存文件名字以保证暂存文件不会重复

(5)参数置换变量:

Shell提供了参数置换功能以便用户可以根据区别条件来给变量赋区别参数置换变量有4种这些变量通常和某个位置参数相联系根据指定位置参数是否已经设置类决定变量取值它们语法和功能分别如下

a. 变量=${参数-word}:如果设置了参数则用参数值置换变量否则用word置换即这种变量值等于某个参数如果该参数没有设置则变量就等于word

b. 变量=${参数=word}:如果设置了参数则用参数值置换变量否则把变量设置成word然后再用word替换参数注意位置参数不能用于这种方式在Shell中不能为位置参数赋值

c. 变量=${参数?word}:如果设置了参数则用参数值置换变量否则就显示word并从Shell中退出如果省略了word则显示标准信息这种变量要求定等于某个参数如果该参数没有设置就显示个信息然后退出因此这种方式常用于出错指示

d. 变量=${参数+word}:如果设置了参数则用word置换变量否则不进行置换

所有这4种形式中“参数”既可以是位置参数也可以是另个变量只是用位置参数情况比较多

Shell设计流程控制

和其他高级设计语言Shell提供了用来控制执行流程命令包括条件分支和循环结构用户可以用这些命令创建非常复杂

和传统语言区别Shell用于指定条件值不是布尔运算式而是命令和字串
Tags:  linuxshell命令 linuxshell linux系统编程 linuxshell编程

延伸阅读

最新评论

发表评论