zoukankan      html  css  js  c++  java
  • 推荐掌握Linux shell中这7种运算命令

    #常见的算术运算符号

    1.+、-:加减
    2.*、/、%:乘、除、取余
    3.**:幂运算
    4.++、--:增加记减少
    5.!、&&、||:取反,并且,或
    6.<,<=,>,=> :比较符号:小于,小于等于,大于,大于等于
    7.==、!=、=:比较符号:相等,不相等
    8.<<,>> :向左移,向右移
    9.+=、-=:赋值运算,+=相当于i=i+1,-+相当于i=i-1

    #常见的的算数运算命令

    1.(()):用于整数运算的常用运算符
    2.let:用于整数运算
    3.expr:也可用于整数运算,还有其他额外功能
    4.bc:计算机程序,适用整数记小数运算
    5.$[]:用于整数运算
    6.awk:可以用于整数运算,也可用于小数运算
    7.declare:定义变量值和属性

    #1.(())双小括号

    (())双小括号作用是进行数值运算和数字比较

    #常见的操作

    ((a=i+1))
    i=$((i+1))
    echo $((1+4))

    #应用

    #使用(())进行数值计算
    [root@game ~]# echo $((10+5)) #进行相加
    15
    [root@game ~]# echo $((10-5)) #进行相减
    5
    [root@game ~]# echo $((10*5)) #相乘
    50
    [root@game ~]# echo $((10/5)) #相除
    2
    [root@game ~]# echo $((10**5)) #次幂
    100000
    [root@game ~]# echo $((10%5)) #取余
    0
    
    [root@game ~]# ((i=10))
    [root@game ~]# ((i=i*5))
    [root@game ~]# echo $i #适用echo输出
    50
    
    [root@game ~]# ((n=10+2-5*2/4+5))
    [root@game ~]# echo $n
    15
    [root@game ~]# echo $((100*(100+1)/2)) #计算1+2+3..+100的和
    5050

    #使用(())进行比较判断

    [root@game ~]# echo $((4<9)) #如果结果为真就输出1
    1
    [root@game ~]# echo $((4>9)) #如果结果为假就输出0
    0
    [root@game ~]# echo $((4==4))
    1
    [root@game ~]# if ((8>7&&6==6));then echo yes;fi #使用if语句进行判断条件是否成立
    yes

    #(())运算后赋值给变量

    [root@game ~]# mytest=66
    [root@game ~]# echo $((mytest+34))
    100
    [root@game ~]# mytest=$((mytest+34))
    [root@game ~]# echo $mytest
    100

    #将命令写进脚本执行

    [root@game test]# cat test1.sh 
    #!/bin/bash
    a=6
    b=3
    echo "a-b=$(($a-$b))"
    echo "a+b=$(($a+$b))"
    echo "a*b=$(($a*$b))"
    echo "a/b=$(($a/$b))"
    echo "a%b=$(($a%$b))"
    
    #效果
    [root@game test]# sh test1.sh 
    a-b=3
    a+b=9
    a*b=18
    a/b=2
    a%b=0

    #将脚本中定义的变量通过传参的方式来实现

    [root@game test]# cat test1.sh 
    #!/bin/bash
    a=$1
    b=$2
    echo "a-b=$(($a-$b))"
    echo "a+b=$(($a+$b))"
    echo "a*b=$(($a*$b))"
    echo "a/b=$(($a/$b))"
    echo "a%b=$(($a%$b))"
    
    #效果
    [root@game test]# sh test1.sh 8 4
    a-b=4
    a+b=12
    a*b=32
    a/b=2
    a%b=0

    #2.let命令

    #语法格式:let 赋值表达式

    #示例

    [root@game ~]# let n=10+3
    [root@game ~]# echo $n
    13
    [root@game ~]# let a=20/4
    [root@game ~]# echo $a
    5

    #实践

    #判断如果登录失败次数等于3次,那么就打印登录失败,退出脚本
    [root@game test]# cat login.sh 
    #!/bin/bash
    
    fail=0
    
    while ((1==1))
    do
        read -p "please enter you username: " user
        read -p "please enter you password: " password
        if [[ $user = 'guoke' && $password = 'guoke123' ]];then
            echo "login success"
            exit 1
        else
            if [ $? -ne 0 ];then
                let fail=fail+1 #如果登录失败次数就会加1
                if [ $fail -ge 3 ];then #当失败次数等于3就打印登录失败
                    echo "login fail"
                    exit 1
                fi
            fi
        fi
    done
    
    #效果
    [root@game test]# sh login.sh 
    please enter you username: 1
    please enter you password: 1
    please enter you username: 2
    please enter you password: 2
    please enter you username: 3
    please enter you password: 3
    login fail
    
    [root@game test]# sh login.sh 
    please enter you username: guoke   
    please enter you password: guoke123
    login success

    #3.expr命令

    #介绍

    expr - evaluate expressions
    expr - (evaluate(求值) expressions(表达式),可以用于整数运算,也可用于相关字符串、匹配的运算处理
    
    #查看更多帮助
    man expr

    #示例1:用于基本的计算

    [root@game ~]# expr 10 + 10 #相加
    20
    [root@game ~]# expr 10 - 10 #相减
    0
    [root@game ~]# expr 10 * 10 #相乘,相乘的时候需要使用转移,不然报错
    expr: syntax error
    [root@game ~]# expr 10 * 10
    100
    [root@game ~]# expr 10 / 10 #相除
    1
    #提示:expr后面的计算数字需要有一个空格

    #示例2:配合变量进行计算,需要使用反引号将计算表达式括起来

    [root@game ~]# n=10
    [root@game ~]# n=`expr $n + 100`
    [root@game ~]# echo $n
    110

    #案例

    #1.判断一个变量值或字符串是否为整数

    #将一个变量或字符串和一个非0的整数相加,查看返回值是否为0,如果为0,说明为整数,否则就不是整数
    [root@game ~]# a=10
    [root@game ~]# expr $a + 10 &>/dev/null
    [root@game ~]# echo $?
    0 #返回0,证明a的值为整数
    
    [root@game ~]# n=guoke
    [root@game ~]# expr $n + 10 &>/dev/null
    [root@game ~]# echo $?
    2 #返回非0,整数n的值不是整数

    #4.bc命令

    #介绍

    bc是Linux下的计算器,还可以作为命令行计算工具使用
    
    #查看帮助man bc
    #语法:
    bc [ -hlwsqv ] [long-options] [  file ... ]
    
    #提示:bc命令需要进行安装
    yum install bc

    #示例1:作为计算器来使用

    #直接在命令输入bc,然后进行相关的加减乘除操作
    [root@game ~]# bc
    bc 1.06.95
    Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
    This is free software with ABSOLUTELY NO WARRANTY.
    For details type `warranty'. 
    
    10+200
    210
    2*2
    4
    333-22
    311
    ^C
    (interrupt) Exiting bc.

    #示例2:在命令行下面实现运算功能

    [root@game ~]# echo 333+333|bc
    666
    [root@game ~]# echo 3.33+3.33|bc
    6.66
    [root@game ~]# echo 33*33|bc
    1089
    [root@game ~]# echo "scale=3;333/45"|bc
    7.400
    [root@game ~]# echo "scale=2;333/45"|bc
    7.40
    提示:根据bc所具有的特殊性来看,如果是小数,则选择bc运算没有问题,若是整数场景,可用”(())“、let、expr等

    #5.$[]命令

    #使用$[]来计算运算

    #应用

    [root@game ~]# i=10
    [root@game ~]# i=$[i+23]
    [root@game ~]# echo $i
    33
    [root@game ~]# echo $[100+100]
    200
    [root@game ~]# echo $[100-100]
    0
    [root@game ~]# echo $[100*100]
    10000
    [root@game ~]# echo $[100/100]
    1

    #6.declare命令

    #使用declare来运算,同typeset

    #示例1:定义整数变量,进行计算

    [root@game ~]# declare -i a=10 b=10
    [root@game ~]# a=a+b
    [root@game ~]# echo $a
    20

    #示例2:也可以作为变量输出

    [root@game ~]# DIR_TEST=/tmp/test
    [root@game ~]# declare |grep TEST
    DIR_TEST=/tmp/test

    #7.awk命令

    awk是一种编程语言,可以用来处理数据和生成报告,也可以实现计算,适合小数和整数运算

    #应用

    #进行相加
    [root@game ~]# echo "3.3 2.3" | awk '{print ($1+$2)}'
    5.6 
    #进行相减
    [root@game ~]# echo "3.3 2.3" | awk '{print ($1-$2)}'
    1
    #相乘
    [root@game ~]# echo "3.3 2.3" | awk '{print ($1*$2)}'
    7.59
    #先使用743-100再相除
    [root@game ~]# echo "743 234" | awk '{print ($1-100)/$2}'
    2.74786
    #先使用743-100再相乘
    [root@game ~]# echo "743 234" | awk '{print ($1-100)*$2}'
    150462
  • 相关阅读:
    [单链表]链表指针追赶问题
    二叉查找树与平衡二叉树
    二叉树的下一个结点
    fork进程函数总结
    《Effective C++》Item2:尽量以const,enum,inline替换#define
    Hash表的使用
    [数字]整数数字的算法
    算法题:找出整数数组中两个只出现一次的数字
    删除元素的操作
    [Reprinted] 使用Spring Data Redis操作Redis(一) 很全面
  • 原文地址:https://www.cnblogs.com/guoke-boy/p/13559608.html
Copyright © 2011-2022 走看看