做网站的研究生专业,网站建设店淘宝,外贸公司网站建设需要注意,wordpress网页走丢Linux Shell 脚本编程和其他编程语言一样#xff0c;支持算数、关系、布尔、字符串、文件测试等多种运算#xff0c;同样也需要进行根据条件进行流程控制#xff0c;提供了if、for、while、until等语句。
上期学习笔记中我们研究了字符串数据的使用#xff0c;今天我们研…Linux Shell 脚本编程和其他编程语言一样支持算数、关系、布尔、字符串、文件测试等多种运算同样也需要进行根据条件进行流程控制提供了if、for、while、until等语句。
上期学习笔记中我们研究了字符串数据的使用今天我们研究字符串运算为了应用实例进行讲解我们同时研究了进行判断的时候经常使用的if语句。
一、常用字符串运算符
运算符说明检测两个字符串是否相等相等返回 0true否则返回1false。!检测两个字符串是否不相等不相等返回 0true否则返回1false。-z检测字符串长度是否为0为0返回 0true否则返回1false。-n检测字符串长度是否不为 0不为 0 返回 0true否则返回1false。$检测字符串是否不为空不为空返回0true否则返回1false。
二、if语句
与C、C、Pascal等其它编程语言相似在 Linux Shell 编程中同样需要进行根据条件进行流程控制也提供了if、for、while、until等语句。
因为我们在下面进行字符串运算的实例讲解时需要使用流程控制来演示所以今天我们先看看在进行判断的时候经常使用的if语句。
Linux Shell 脚本编程中 使用的 if 语句形式 与C、C、Pascal等语言中还是较大差别的。
Linux Shell 脚本编程中 if 语句主要有以下几种形式和组合。 一 if - then -fi 语句
if [condition]
then符合 condition 的执行语句
fi 二 if -then-else-fi 语句
if [condition]
then符合 condition 的执行语句
else不符合 condition 的执行语句
fi
写起来是不是感觉有点麻烦
所以Linux Shell 脚本编程中还提供了两种简写格式
三 if ;- then -fi 语句
也就是将 then 与 if 写在同一行这时]后面需要添加分号例如
if [condition]; then符合 condition 的执行语句
fi
四if -then-elif-then-fi 语句
将 else if 简写为 elifelif 后面也要有 then来配对如下所示
if [condition1]
then符合 condition1 的执行语句
elif [condition2]
then符合 condition2 的执行语句
else 不符合 condition1 和 condition2 的执行语句
fi
或者
if [condition1]
then符合 condition1 的执行语句
elif [condition2]; then符合 condition2 的执行语句
else 不符合 condition1 和 condition2 的执行语句
fi
请注意两点 1.结尾是将 if 倒过来写 fi 作为结束标志而不是endif。 2.condition条件表达式要放在方括号之间并且运算符和运算对象之间要有空格分隔。 例如 [$a$b] 这种写法是错误的因为$a$b是赋值语句 要进行比较必须写成 [ $a $b ]。 网上有些教程说 条件表达式要放在方括号之间并且要有空格间隔即 [$s1] 要写为 [ $s1 ]。
但在下面第三部分的实例中我们写为 [ $s1] 仍能执行并获得正确的结果。。 三、字符串操作实例
一字符串是否相等 user host: ~ $s1ab user host: ~ $s2cd user host: ~ $s3ab user host: ~ $rexpr $s1 $s2 user host: ~ $echo $r 0 user host: ~ $rexpr $s1 $s3 user host: ~ $echo $r 1 user host: ~ $ 注意上面的命令中使用的反引号不是单引号
从上例中我们可以看到
由于变量s1和s2不相等所以$s1 $s2 的比较结果是0。
由于变量s1和s3相等所以$s1 $s3 的 比较结果是1。 二字符串是否不相等 user host: ~ $s1ab user host: ~ $s2cd user host: ~ $s3ab user host: ~ $rexpr $s1 ! $s2 user host: ~ $echo $r 1 user host: ~ $rexpr $s1 ! $s3 user host: ~ $echo $r 0 user host: ~ $ 注意上面的命令中使用的反引号不是单引号
从这个实例中我们可以看到
由于变量s1和s2不相等所以$s1 ! $s2 的比较结果是1。
由于变量s1和s3相等所以$s1 ! $s3 的比较结果是0。
字符串是否不相等 实例的比较结果跟前面字符串是否相等 的实例中正好相反。
三检测字符串长度是否为0 user host: ~ $ s1ab user host: ~ $ if [ -z $s1 ]; then echo -z $s1 0 else echo -z $s1 !0 fi -z ab !0 user host: ~ $ s1 user host: ~ $ if [ -z $s1 ]; then echo -z $s1 0 else echo -z $s1 ! 0 fi -z 0 user host: ~ $ 由于我们还没有研究到脚本文件在上面的实例中我们是通过命令行输入了两个命令序列
第一个命令序列是
s1ab
if [ -z $s1 ]; thenecho -z $s1 0
elseecho -z $s1 !0
fi由于s1ab它的长度是2所以执行结果为 -z ab !0 第二个命令序列是
s1
if [ -z $s1 ]; thenecho -z $s1 0
elseecho -z $s1 !0
fi
由于s1它的长度是0所以执行结果为 -z 0 四检测字符串长度是否不为0 把上面两段命令序列中的 -z $s1 改为 -n $s1那么执行的结果就是下面这样的 user host: ~ $ s1ab user host: ~ $ if [ -n $s1 ] then echo -n $s1 0 else echo -n $s1 ! 0 fi -n ab 0 user host: ~ $ s1 user host: ~ $ if [ -n $s1 ] then echo -n $s1 0 else echo -n $s1 ! 0 fi -n 0 user host: ~ $ 五检测字符串是否不为空 user host: ~ $ s1ab user host: ~ $ if [ $s1 ]; then echo $s1 ! null else echo $s1 null fi ab ! null user host: ~ $ s1 user host: ~ $ if [ $s1] then echo $s1 ! null else echo $s1 null fi null user host: ~ $ 在上面的实例中我们是通过命令行输入了两个命令序列
第一个命令序列是
s1ab
if [ $s1 ]; thenecho $s1 ! null
elseecho $s1 null
fi
由于s1ab其值不为空所以执行结果为 ab ! null 第二个命令序列是
s1
if [ $s1]
thenecho $s1 ! null
elseecho $s1 null
fi
由于s1其值为空所以执行结果为 null 第二个命令序列中的 if语句我们写成了 if [ $s1]仍能执行并获得正确的结果。