4.7 参数置换变量
是另一种为变量赋值的方式,其一般形式是:
变量2=$ {变量1 op 字符串}
其中,op表示操作符,它可以是下列四个操作符之一:
:- : = : + : ?
变量2的值取决于变量1(参数)是否为空串、利用哪个操作符以及字符串的取值。
在操作符的前后不留空格。
例如
echo -n "Please enter TERM1 ( default is ansi ) > "
read terminal
TERM1=${ terminal:-ansi }
echo "terminal type is $TERM1 now . "
echo "terminal=$terminal "
4.8 算 术 运 算
bash中执行整数算术运算的命令是let,其语法格式为:
let arg …
其中arg是单独的算术表达式。它使用C语言中表达式的语法、优先级和结合性。除++、--和逗号(,)之外,所有整型运算符都得到支持,此外,还提供了方幂运算符“**”。
在算术表达式中直接利用名称访问命名的参数,不要前面带有“$”符号
let 命令的替代表示形式是:
((算术表达式))
例如:
let ″j=i*6+2″
等价于: ((j=i*6+2))
如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1。
当表达式中有shell的特殊字符时,必须用双引号将其括起来。例如,let ″val=a|b″
只有使用 $((算术表达式))
形式才能返回表达式的值
4.9 控制流结构
4.9.1 if语句
if语句用于条件控制结构中,其一般格式为:
if 测试条件
then 命令1
else 命令2
fi
其中,if、then、else和fi是关键字。例如:
if test -f "$1"
then echo "$1 is an ordinary file . "
else echo "$1 is not an ordinary file . "
fi
if语句中else部分可以缺省。例如,
if test -f "$1"
then echo "$1 is an ordinary file . "
fi
if 语句的else部分还可以是else—if结构,则用关键字“elif”代替“else if”。例如,
if test - f "$1"
then pr $1
elif test - d "$1"
then ( cd $1 ; pr * )
else echo "$1 is neither a file nor a directory . "
fi
if的语句的更一般形式是:
if 命令表1
then 命令表2
else 命令表3
fi
4.9.2 条件测试
条件测试有三种常用形式:一种是用test 命令,如上所示。另一种是用一对方括号将测试条件括起来。这两种形式是完全等价的。例如,测试位置参数$1是否是已存在的普通文件,可写为:
test -f "$1"
也完全可写成:[_ -f "$1“_]
第三种形式是: [[条件表达式]]
test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:文件测试运算符、字符串测试运算符、数值测试运算符和逻辑运算符。
1.有关文件方面的测试
2.有关字符串方面的测试
3.有关数值方面的测试
4.逻辑运算符 上述测试条件可以在if 语句或循环语句中单个使用,也可以通过逻辑运算符把它们组合起来使用。可以在测试语句中使用的逻辑运算符有:
! 逻辑非( NOT ),它放在任意逻辑表达式之前,使原来为真的表达式变为假,使原来为假的变为真。例如, [ ! -r $1 ] , ! test -r “$1”等。 - a 逻辑与( AND ),它放在两个逻辑表达式中间,仅当两个表达式都为真时,结果才为真。例如, [ - f "$myfile" - a - r “$myfile" ] - o 逻辑或( OR ),它放在两个逻辑表达式中间,其中只要有一个表达式为真,结果就为真。例如, [ "$a" -ge 0 -o "$b" -le 100 ] (表达式) 圆括号,它可以把一个逻辑表达式括起来,使之成为一个整体,优先得到运算。例如, [ \( "$a" -ge 0 \) -a \( "$b" -le 100 \) ]逻辑表达式中的条件测试运算符优先级高于“!” 运算符,“!” 运算符的优先级高于“ -a”运算符,“-a”运算符高于 “-o”,而且圆括号( )高于 “-a”
5.特殊条件测试(1) :表示不做任何事情,其退出值为0。(2)true 表示总为真,其退出值总是0。(3)false 表示总为假,其退出值是255。
|