$cat test
#!/bin/bash
val1=baseball
val2=hockey
if [ $val1 \> $val2 ]
thenecho"$val1 is greater than $val2"elseecho"$val1 is less than $val2"fi
$
$./test
baseball is less than hockey
$cat test
#!/bin/bash
val1=Testing
val2=testing
if [ $val1 \> $val2 ]
thenecho"$val1 is greater than $val2"elseecho"$val1 is less than $val2"fi
$
$./test
Testing is less than testing
$sort testfile
testing
Testing
$
字符串大小
-n和-z参数:检查一个变量是否含有数据
val1=testing
val2=' 'if [ -n "$val1" ] //检查val1变量是否长度非零
then
...if [ -z "$val2" ] //检查val2变量是否长度为零
then
...if [ -z "$val3" ] //检查val1变量是否长度非零,这个变量并未在shell脚本中定义过,所以说明字符串长度仍然为零
then
11.4.3 文件比较
test命令的文件比较功能
比较
描述
-d file
检查file是否存在并是一个目录
-e file
检查file是否存在
-f file
检查file是否存在并是一个文件
-r file
检查file是否存在并可读
-s file
检查file是否存在并非空
-w file
检查file是否存在并可写
-x file
检查file是否存在并可执行
-o file
检查file是否存在并属当前用户所有
-G file
检查file是否存在并且默认组与当前用户相同
file1 -nt file2
检查file是否比file2新
file1 -ot file2
检查file是否比file2旧
11.5 复合条件测试
fi-then语句允许使用布尔逻辑来组合测试
[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]
11.6 if-then的高级特性
用于数学表达式的双尖括号
用于高级字符串处理功能的双方括号
11.6.1 使用双尖括号
双脚括号允许将高级数学表达式放入比较中
格式:(( expression ))
expression:可以是任意的数学赋值或比较表达式
如下常用的表达式
符号
描述
val++
后增
val–
后减
++val
先增
–val
先减
**
幂运算
<<
左位移
&
位布尔和
&&
逻辑和
$cat test
#!/bin/bash
val1=10if (( $val1 ** 2 > 90 )) //大于号无需转义
then
(( val2 = $val1 ** 2 ))
echo"The square of $val1 is $val2"fi
$
$./test
The square of 10 is 100
$
11.6.2 使用双方括号
双方括号命令提供了针对字符串的高级特性
格式:[[ expression ]]
expression:使用了test命令中采用的标准字符串进行比较
它提供了test命令为提供的另一个特性——模式匹配
模式匹配中,可以定义一个规则表达式来匹配字符串
$cat test
#!/bin/bash
if [[ $USER == r* ]]
thenecho"Hello $USER"elseecho"Sorry, I do not know you"fi
$
$./test
Hello rich
$
11.7 case命令
格式如下
case命令会将指定的变量同不同模式进行比较,匹配则shell会执行该模式指定的命令
可以通过竖线操作符来分隔模式,在一行输出多个模式
星号会补货所有跟所有列出的模式都不匹配的值
//格式:
case variable in
pattern1 | pattern2) commands1;;
pattern3) commands2;;
*) default commands;;
esac
//例程:
$ cat test
#!/bin/bash
case$USERin
rich | barbara)
echo"Welcome, $USER"echo"Please enjoy your visit";;
testing)
echo"Special testing account";;
jessica)
echo"Do not forget to log off when you're done";;
*)
echo"Sorry, you are not allowed here";;
esac
$
$./test
Welcome, rich
Please enjoy your visit
$