• 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! " # -echo 开启转义, 换行,输入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代表的开启转义, 表示换行
    echo -e "OK! " ;
    echo "It is a test";
    #显示不换行,c表示不换行
    echo -e "OK! c";
    echo "This is a test";
    #原样输出,不进行转义或取变量
    echo '$name"';
    #显示命令的执行结果
    echo `date`;

  • 相关阅读:
    Java内存模型与volatile
    Struts2验证框架的注意事项
    利用Java编写简单的WebService实例
    加速Java应用开发速度1——加速spring/hibernate应用调试时启动速度
    Java关键字synchronized详解
    JAVA对象的序列化与反序列化
    加速Java应用开发速度3——单元/集成测试+CI
    java程序性能优化之找出内存溢出元凶
    加速Java应用开发速度2——加速项目调试启动速度
    java实现动态切换上网IP (ADSL拨号上网)
  • 原文地址:https://www.cnblogs.com/wadmwz/p/8833777.html
Copyright © 2020-2023  润新知