shell语法教程
1、建立和运行shell程序
什么是shell程序呢? 简单的说shell程序就是一个包含若干行shell或者linuxcmd/ target=_blank class=infotextkey>linux命令的文件.
象编写高级语言的程序一样,编写一个shell程序需要一个文本编辑器.如VI等.
在文本编辑环境下,依据shell的语法规则,输入一些shell/linux命令行,形成一个完整的程序文件.
执行shell程序文件有三种方法
在编写shell时,第一行一定要指明系统需要那种shell解释你的shell程序,如:#! /bin/bash,
2、shell变量
1)常用系统变量
$ # :保存程序命令行参数的数目
$ ? :保存前一个命令的返回码
$ 0 :保存程序名
$ * :以("$1 $2...")的形式保存所有输入的命令行参数
$ @ :以("$1""$2"...)的形式保存所有输入的命令行参数
2)定义变量
shell语言是非类型的解释型语言,不象用C++/JAVA语言编程时需要事先声明变量.给一个变量赋值,实际上就是定义了变量.
在linux支持的所有shell中,都可以用赋值符号(=)为变量赋值.
例如:
由于shell程序的变量是无类型的,所以用户可以使用同一个变量时而存放字符时而存放整数.
例如:
在变量赋值之后,只需在变量前面加一个$去引用。
例如:echo $abc
3)位置变量
当运行一个支持多个命令行参数的shell程序时,这些变量的值将分别存放在位置变量里.
其中第一个参数存放在位置变量1,第二个参数存放在位置变量2,依次类推...,shell保留这些变量,不允许用户以令外的方式定义他们.同别的变量,用$符号引用他们.
3、shell中引号的使用方法
shell使用引号(单引号/双引号)和反斜线("")用于向shell解释器屏蔽一些特殊字符.
反引号(")对shell则有特殊意义.
例如:
LOGNAME变量是保存当前用户名的shell变量,假设他的当前值是ang.执行完两条命令后,abc1的内容是:$LOGNAME, how are you!.而abc2的内容是;wang, how are you!.
象单引号一样,反斜线也能屏蔽所有特殊字符.但是他一次只能屏蔽一个字符.而不能屏蔽一组字符.
反引号的功能不同于以上的三种符号.他不具有屏蔽特殊字符的功能.但是可以通过他将一个命令的运行结果传递给另外一个命令.
例如:
4、shell程序中的test命令
在bash/pdksh中,命令test用于计算一个条件表达式的值.它们经常在条件语句和循环语句中被用来判断某些条件是否满足.
test命令的语法格式:
test expression_r
或者
[expression_r]
在test命令中,可以使用很多shell的内部操作符.这些操作符介绍如下:
(1)字符串操作符 用于计算字符串表达式
(2)整数操作符具有和字符操作符类似的功能.只是他们的操作是针对整数
(3)用于文件操作的操作符,他们能检查:文件是否存在,文件类型等
(4)shell的逻辑操作符用于修饰/连接包含整数,字符串,文件操作符的表达式
注意:
tcsh shell 不使用test命令,但是tcsh中的表达式同样能承担相同的功能.tcsh
支持的表达式于C中的表达式相同.通常使用在if和while命令中.
5.条件语句
同其他高级语言程序一样,复杂的shell程序中经常使用到分支和循环控制结构,
bash,pdksh和tcsh分别都有两种不同形式的条件语句:if语句和case语句.
1)if语句
语法格式:
bash/pdksh用法:
if [expression_r1]
then
commands1
elif [expression_r2]
commands2
else
commands3
if
tcsh用法:
if (expression_r1) then
commands1
else if (expression_r2) then
commands2
else
commands3
endif
含义:当expression_r1的条件为True时,shell执行then后面的commands1命令;当
expression_r1的条件为false并且expression_r2的条件满足为True时,shell执行
commands2命令;当expression_r1和expressin2的条件值同为false时,shell执行
commands3命令.if语句以他的反写fi结尾.
2)case语句
case语句要求shell将一个字符串S与一组字符串模式P1,P2,...,Pn比较,当S与
某个模式Pi想匹配时,就执行相应的那一部分程序/命令.shell的case语句中字符
模式里可以包含象*这样的通配符.
语法格式:
bash/pdksh用法:
case string1 in
str1)
commands1;;
str2)
commands2;;
*)
commands3;;
esac
tcsh用法:
switch (string1)
case str1:
statements1
breaksw
case str2:
statements2
breaksw
default:
statements3
breaksw
endsw
含义:shell将字符串string1分别和字符串模式str1和str2比较.如果string1与str1匹配,则
shell执行commands1的命令/语句;如果string11和str2匹配,则shell执行commands2的命令/
语句.否则shell将执行commands3的那段程序/命令.其中,每个分支的程序/命令都要以两个
分号(;结束.