前提:shell环境pdksh和bash; Ubuntu下默认的shell环境是bash
语法篇:
<一>变量
1.变量分为三种类型:环境变量、内部变量和用户变量;其中环境变量和内部变量不需要用户定义,可以直接使用。
环境变量:由系统定义,用户不需要定义但可以改变变量的值。
内部变量:由系统提供的一种特殊类型的变量。这种变量在程序中用来做出判定。在shell程序内这些变量是不能够修改的。
部分内部变量如下:
$# 传递给shell程序的位置参数的数目;
$? 最后命令完成码或shell程序内所执行的shell程序;
$0 shell程序的名称;
$* 调用shell程序是所传送的变元的单字符串。
用户变量:由用户定义的,能够被用户所修改。
注意:1. 变量是无类型的(若类型的);
2. 不需要声明
3. 赋值 例子 a=10; “=”两边不可以有空格
字符串赋值有三种,分别是:“=”后直接跟字符串;字符串加单引号;字符串加双引号。但是有所区别
1. 当字符串中有空格出现时,不能采用第一种,必须用第二种或第三种;
2. 加‘’可以阻止shell解析变量
3. 加“”可以解析字符串中的所有变量
例如:x=abc def会产生错误,正确形式 x='abc def' 或 x="abc def"
双引号
var="test string"
newvar="Value of var is $var"
echo $newvar
输出结果为: Value of var is test string
单引号
var="test string"
newvar='Value of var is $var'
echo $newvar
输出结果为:Value of var is $var
反斜杠
在某个字符前利用反斜杠可以阻止shell把后面的字符解释为特殊字符。
test=3
var=$test
echo $var
输出结果是:3
test=3
var=/$test
echo $var
输出结果是:test
<二>表达式的比较
在不同的shell中执行逻辑比较的操作符是不同的,在pdksh和bash下,有一个叫做 test 的命令可以用来完成表达式的比较。test命令支持如下四种类型的比较
1. 字符串比较
= 比较两个字符是否相等
!= 比较两个字符串是否不相等
-n 比较字符串长度是否大于零
-z 比较字符串长队是否等于零
2. 数字比较
-eq 比较两个数字是否相等
-ge 比较第一个数是否大于等于第二个数
-le 比较第一个数是否小于等于第二个数
-ne 比较两个数是否不等
-gt 比较第一个数是否大于第二个数
-lt 比较第一个数是否小于第二个数
3. 文件操作比较
-d 判断文件是否是目录
-f 判断文件是否是普通文件
-r 判断是否对文件设置了读权限
-s 判断文件名长队是否大于0
-w 判断文件是否有写权限
-x 判断文件是否有执行权限
4. 逻辑操作符比较
! 逻辑非
-o 逻辑或
-a 逻辑与