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

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`;

Shell自学之运算符和echo(W3C)的更多相关文章

  1. Linux学习——shell编程之运算符

    shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...

  2. shell 6基本运算符

    shell支持多种运算符: * 算数运算符 * 关系运算符 * 布尔运算符 * 字符串运算符 * 文件测试运算符 算数运算符 + 加 `expr $a + $b` 结果为 30 - 减 `expr $ ...

  3. 『忘了再学』Shell基础 — 20、Shell中的运算符

    目录 1.Shell常用运算符 2.Shell中数值运算的方法 (1)方式一 (2)方式二 (3)方式三(推荐) 1.Shell常用运算符 Shell中常用运算符如下表: 优先级数值越大优先级越高,具 ...

  4. Linux Shell基础 Bash常见命令 echo命令

    概述 shell中常见的命令echo. 输出命令:echo echo命令的输出内容如果没有特殊含义,则将原内容输出到屏幕:如果输出内容有特殊含义,则输出打印其含义. 命令格式如下: [root@loc ...

  5. shell的比较运算符

    运算符 描述 示例 文件比较运算符 -e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ] -d filename 如果 filename 为目录, ...

  6. linux shell “(())” 双括号运算符使用

    导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格 ...

  7. shell之算数运算符、逻辑运算符、关系运算符、布尔运算符、文件测试运算符

    注意事项: (1)bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用: (2)完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Es ...

  8. linux shell (()) 双括号运算符使用

    估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...

  9. shell编程 之 运算符

    1 shell运算符简介 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符 形如:val=`expr 2 + 2`:echo "两数之和为 : $val"    ...

随机推荐

  1. bootstrap 模态框(modal)插件使用

    今天用户登陆时,在原网页上弹出新登陆窗口,发现使用的是modal插件,记录下该插件的使用方法,手写强化下. 首先,模态框(modal)是覆盖在父窗体上的子窗体,目的是显示来自一个单独的源的内容,可以在 ...

  2. Thinkjs关系数据库学习——查询数据

    模型提供了多种方法来查询数据: find 查询单条数据 select 查询多条数据 count 查询总条数 countSelect 分页查询数据 max 查询字段的最大值 avg 查询字段的平均值 m ...

  3. 【Spring源码深度解析学习系列】容器的基础XmlBeanFactory(二)

    一.配置文件封装 Spring的配置文件读取是通过ClassPathResource进行封装的,如new ClassPathResource("test.xml"),那么Class ...

  4. 利用拷贝data目录文件的方式迁移mysql数据库

    其实迁移数据库,一般用sql文件就行,把A服务器数据库的表结构和数据等等导出,然后导入到B服务器数据库, 但是这次数据文件过大,大约有40个G,使用命令行导入,效果不是很好,经常在执行过程中报错.卡死 ...

  5. Windows下编译SDL

    Windows下编译SDL的理由我就不多说了,无论用VS来编译或调试SDL库都是很方便的.而且SDL源代码中也包含了VC工程,你所要做的只是解压VC工程,进行适当的配置,然后编译.调试. 编译SDL大 ...

  6. PYTHON 词云

    #!/usr/bin/env python # -*- coding:utf-8 -*- import matplotlib.pyplot as plt from wordcloud import W ...

  7. Flask 学习 十一 关注者

    数据库关系 1.1多对多关系 添加第三张表(关联表),多对多关系可以分解成原表和关联表之间的两个一对多的关系 多对多仍然使用db.relationship()方法定义,但是secondary参数必须设 ...

  8. sqlserver之排序规则和ETL不支持sqlserverdatetime2的问题

    sqlserver的排序规则大概分为Windows 排序规则和 SQL Server 排序规则.数据在安装的时候,默认不设置会默认为SQL_Latin1_General_CP1_CI_AI.数据库在创 ...

  9. Struts2之Action的实现

    对于Struts2框架来说,最重要的莫过于Action类的编写,类比于Servlet,Action类也是通过类的实例对象调用方法来处理请求的,Action类的实例对象是由Struts2的核心Filte ...

  10. Java中RuntimeException和Exception的区别

    [TOC] 1. 引入RuntimeException public class RuntimeException { public static void main(String[] args) { ...