Shell自学之运算符和echo(W3C)

上面理论知识,最下面有我做的测试的例子:

10.Shell运算符
expr是一款表达式计算工具,使用它能完成表达式的求值操作
例:val=`expr 2 + 2`;echo "${val}"

注意:
表达式和运算符之间要有空格,2+2是错误的,2 + 2是正确的
完整的表达式要被``包含

A.算术运算符(假定两个变量a为10,b为20)
+ : `expr $a + $b` 结果为30
- : `expr $a - $b` 结果为-10
* : `expr $a \* $b` 结果为200 乘号(*)前边必须加反斜杠(\)才能实现乘法运算
/ : `expr $b / $a` 结果为2
% : `expr $b % $a` 结果为0
= : a=$b 把变量b的值赋给a
==: [ $a == $b ] 返回false (暂时不会用,只知道可以用来判断)
!=: [ $a != $b ] 返回true
if判断:
if [ $a == $b ]
then
echo "a 等于 b"
else
echo "a 不等于 b"
fi
注意条件表达式必须要放在方括号之间,并且要有空格
B.关系运算符($a为10,$b为20)
-eq : [ $a -eq $b ] 返回false,检查相等,相等返回true
-ne : [ $a -ne $b ] 返回true,检查相等,不相等返回true
-gt : [ $a -gt $b ] 返回false,检查左边的数是否大于右边的数
-lt : [ $a -lt $b ] 返回true,检查左边的数是否小于右边的数
-ge : [ $a -ge $b ] 返回false,检测左边的数是否大于等于右边的
-le : [ $a -le $b ] 返回true,检测左边的数是否小于等于右边的
C.布尔运算符
! : [ !false ] 返回true,非运算
-o : [ $a -lt 20 -o $b -gt 100] 返回true,或运算
-a : [ $a -lt 20 -o $b -gt 100] 返回false,与运算
D:逻辑运算符
&& : [[ $a -lt 100 && $b -gt 100 ]] 返回 false,逻辑与
|| : [[ $a -lt 100 || $b -gt 100 ]] 返回 true,逻辑或
E.字符串运算符(a为"abc",b为"efg")
= : [ $a = $b ] 返回false,检查两个字符串是否相等,相等返回true
!= : [ $a != $b ] 返回 true,检查两个字符串是否相等,不相等返回true
-z : [ -z $a ] 返回 false,检测字符串长度是否为0,为0时返回true
-n : [ -n $a ] 返回 true,检测字符串长度是否为0,不为0时返回true
str : [ $a ] 返回 true,检测字符串是否为空,不为空返回true

F.文件测试运算符(暂时用不到,以后用到再看)
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。
11.echo命令:
A:显示普通字符串
echo "It is a test"
echo It is a test
B:显示转义字符
echo "\"It is a test\"" 结果为:"It is a test"
C:显示变量
read命令从标准输入中读取一行,并把输入行的每个字段的值指定给shell变量
例子(.sh脚本):
read name
echo "$name It is a test"
执行后(等待输入):
OK #标准输入
OK It is a test #输出
D:显示换行
echo -e "OK!\n" # -echo 开启转义,\n换行,输入OK之后换行
E:显示不换行
echo -e "OK! \c" # -echo 开启转义,\c不换行,输入OK之后不换行
echo "It is a test"
结果为:OK! It is a test
F:显示结果定向至文件
echo "It is s test" > myfile
echo "It is s test" >> myfile
G:原样输出字符串,不进行转义或取变量(用单引号)
echo '$name\"' 结果为:$name\"
H:显示命令的执行结果
echo `date` 显示当前日期

 

#!/bin/bash
a=10;
b=20;

echo "a + b = " `expr $a + $b`;
echo "a - b = " `expr $a - $b`;
echo "a / b = " `expr $a / $b`;
echo "b / a = " `expr $b / $a`;
# 记住乘法要转义,前面加个\
echo "a * b = " `expr $b \* $a`;
echo "a % b = " `expr $b % $a`;
c=$a;
echo "c = $c";
# 判断等于与不等于
if [ $a == $b ]
then
echo "$a == $b : a 等于 b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
fi
# if---else---判断
if [ $a != b ]
then
echo "$a != $b : a 不等于 b "
else
echo "$a == $b : a 等于 b "
fi
# 这个输不出?疑惑点
# echo "a == b : [ $a == $b ]";
# echo "a != b : [ $a != $b ]";
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b";
else
echo "$a -eq $b : a 不等于 b";
fi
if [ $a -ne $b ]
then
echo "$a -ne $b : a 不等于 b";
else
echo "$a -ne $b : a 等于 b";
fi
# gt和ge是大于和大于等于
if [ $a -gt $b ]
then
echo "$a -gt $b : a 大于 b";
else
echo "$a -gt $b : a 小于 b";
fi
# lt和le是小于和小于等于
if [ $a -lt $b ]
then
echo "$a -lt $b : a 小于 b";
else
echo "$a -lt $b : a 大于 b";
fi
##################################################################################
#!/bin/bash
#布尔运算符
echo "布尔运算符:"

a=10;
b=20;
echo "-o表示或,有一个为真结果为真"
if [ $a -gt 100 -o $b -lt 100 ]
then
echo "$a -gt 100 -o $b -lt 100 : 返回true";
else
echo "$a -gt 100 -o $b -lt 100 : 返回false";
fi
echo "-a表示与,全为真时才为真"
if [ $a -lt 100 -a $b -lt 100 ]
then
echo "$a -lt 100 -a $b -lt 100 : 返回true";
else
echo "$a -lt 100 -a $b -lt 100 : 返回false";
fi

#逻辑运算符,自我感觉与-o和-a没区别
echo "逻辑运算符";
#记住格式:只有下面是正确的,有以下两种错误写法
#[ [ $a -lt 100 && $b -gt 100 ] ];第一个括号和第二个括号间不要空格
#[ $a -lt 100 && $b -gt 100 ];不加括号也是错的
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "$a -lt 100 && $b -gt 100 : 结果为true";
else
echo "$a -lt 100 && $b -gt 100 : 结果为false";
fi
if [[ $a -lt 100 || $b -lt 100 ]]
then
echo "$a -lt 100 || $b -lt 100 : 结果为true";
else
echo "$a -lt 100 || $b -lt 100 : 结果为false";
fi
####################################################################################
#!/bin/bash
#测试字符串运算符
echo "字符串运算符:";
a="abc";
b="def";
echo "= 检测两个字符串是否相等 : "
if [ a = b ]
then
echo " $a = $b 的结果为 : true";
else
echo " $a = $b 的结果为 : false";
fi
echo "!= 检查两个字符串不相等:"
if [ $a != $b ]
then
echo " $a != $b 的结果为 : true";
else
echo " $a != $b 的结果为 : false";
fi
echo "-z 检查字符串的长度是否为0 : ";
if [ -z $a ]
then
echo "$a 的字符串长度为 0 ";
else
echo "$a 的字符串长度不为 0 ";
fi
echo "-n 检查字符串的长度不为0 : ";
if [ -n $b ]
then
echo "$b 的字符串长度不为0 ";
else
echo "$b 的字符串长度为0 ";
fi
echo "str 检查字符串是否为空,不为空返回true(没看懂) : ";
if [ $a ]
then
echo "$a 不为空";
else
echo "$a 为空";
fi
##################################################################################

#!/bin/bash
#显示普通字符串
echo "It is a test";
#显示转义字符
echo "\"It is a test\"";
#显示变量(等待用户输入)
read name
echo "$name It is a test";
#显示换行 -e代表的开启转义,\n表示换行
echo -e "OK!\n" ;
echo "It is a test";
#显示不换行,\c表示不换行
echo -e "OK! \c";
echo "This is a test";
#原样输出,不进行转义或取变量
echo '$name\"';
#显示命令的执行结果
echo `date`;

 

posted @ 2018-04-15 21:23  庄子游世  阅读(844)  评论(0编辑  收藏  举报