zoukankan      html  css  js  c++  java
  • 计算、判断

    两个变量相加    c=$[$a+$b]  或者  c=$(($a+$b))   echo $((a++))      $(($a+3))

    计算()     if  (($1<5))

    if [ $(($1%2)) == 0 ];then #    取余判断奇偶
    echo "this is even num"
    else
    echo jishu

    判断整数大小[]        if  [ $i  -lt  5 ]      判断浮点数大小  [ `echo "$a>$b| bc` -ne 0 ]   # 或-eq 1

    ${}             ${a}b

    zzx@zzx:~$ a=1.1
    zzx@zzx:~$ b=2.2
    zzx@zzx:~$ echo "$a>$b"
    1.1>2.2
    zzx@zzx:~$ echo "$a>$b"|bc
    0
    zzx@zzx:~$ echo "$b>$a"|bc
    1

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    #!/bin/bash
    while :;
    do
    read -t 10 -p "pls input two number" a b
    expr $a + 0 >/dev/null 2>&1 #注意+两边的空格一定要留
    [ $? -ne 0 ] && echo "the first num is error" && continue
    expr $b + 0 >/dev/null 2>&1
    [ $? -ne 0 ] && echo "the second num is error" && continue || break
    done

    echo your input are two int_num: $a and $b

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

    zzx@zzx:~$ a=`expr 1 > 2`
    zzx@zzx:~$ echo $a       
    0
    zzx@zzx:~$ a=`expr 11 > 2`
    zzx@zzx:~$ echo $a        
    1

    输入一个数  打印出相反  123  打印321

    #!/bin/bash
    read -p "please input a num:" a
    n=0
    b=0
    while(($a>0))
    do
    c=`echo  " $a % 10 "|bc`
    b=`echo " $b * 10 + $c "|bc`
    a=`echo " $a / 10 "|bc  `
    done
    echo $a
    echo $b

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    if [[ $1 =~ ^-?[0-9]+$ ]]; then
    echo zhengshu
    elif [[ $1 =~ ^-?[0-9]+.[0-9]+$ ]];then
    echo fudianshu
    else
    echo bufu
    fi

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    判断是否为整形
    ifint(){
            number=$1
            [[ "$number" =~ "^[0-9]+$" ]] && return 0 || return 1
    }      

    判断是否为数字
    ifnumber(){
            number=$1
            [ "$(echo $number*1|bc 2>/dev/null)" = "$1" ] && return 0 || return 1
    }
     
     

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    if  [ $a  -ne  1  -a  $a  !=  2 ]  

    1. for i in $(seq 4);do echo $i;done  
    2. for i in `seq 4`;do echo $i;done      $(命令)    等于   `命令`
    1. for ((i=0;i<5;i++));do echo $i;done    #最后一个可以不加 ;
    2. for i in {0..4};do echo $i;done 

    a=5; ((a++))   

    1. if [ $a -ne 1] && [ $a != 2 ]  
    2. if [[ $a != 1 && $a != 2 ]]  

    判断 数字 奇偶数

    #!/bin/bash  #脚本有点问题  当为浮点数会出错
    if [ $# != 1 ];then  ###
    echo "please input one arg"
    exit 1;
    else
    jd=`echo $1 |bc 2>/dev/null`  # 如果输入数字bc等到结果还是原数字  当字母加数字或者符号时是会出错 传给黑洞
    # echo $jd     数字为原结果  字母开头的为0   数字开头带字母或者符号的为空
    if [ 1"$jd" == 1$1 ];then ##echo 输入的是数字   加一个1防止$jd为空
    #if [[ $1 =~^-?[0-9]+$ ]];then


    if [ $(($1%2)) == 0 ];then #    取余判断奇偶
    echo "this is even num"
    else
    echo jishu
    fi #


    else
    echo 请输入数字
    exit 1
    fi ##


    fi ###

     

     

    fi几种特殊的替换结构:${var:-string},${var:+string},${var:=string},${var:?string}

    四种模式匹配替换结构:${var%pattern},${var%%pattern},${var#pattern},${var##pattern}

    if [  ]

     [ -d 文件 ] 为真 如果 文件 存在 而且 是一个 目录。

    [ -e 文件 ] 为真 如果 文件 存在。
    [ -f 文件 ] 为真 如果 文件 存在 而且 是一个 普通 文件。

    [ -r 文件 ] 为真 如果 文件 存在 而且 是可读的。

    [ -w 文件 ] 为真 如果 文件 为真 如果 文件 存在 而且 是可写的。

    [ -x 文件 ] 为真 如果 文件 存在 而且 是可执行的。

     [ 文件1 -ot 文件2 ] 为真 如果 文件1 比 文件2 旧, 或者 文件2 存在而且 文件1 不存在。
    [ 文件1 -ef 文件2 ] 为真 如果 文件1 而且 文件2 refer to the same device 而且 inode
    numbers。

    [ -z STRING ] 为真 如果 "STRING"的长度是零。
    [ -n STRING ] 或者 [ STRING ] 为真 "STRING"的长度是非零值。

    [ 表达式1 -a 表达式2 ] 如果表达式1 而且表达式2 同时为真则为真 。
    [ 表达式1 -o 表达式2 ] 如果表达式1 或者表达式2 其中之一为真则为真。

    zzx@sdcm152:~$ var=1
    zzx@sdcm152:~$ var=$var+1
    zzx@sdcm152:~$ echo $var
    1+1

    zzx@sdcm152:~$ var=1

    zzx@sdcm152:~$ let "var+=1"   #        或 let var+=1 这种写法运算符间不能有空格              

    zzx@sdcm152:~$ echo $var
    2

    zzx@sdcm152:~$ a=1
    zzx@sdcm152:~$ ((a+=1))  #let可以用(())代替,let ″j=i*6+2″等价于((j=i*6+2))
    zzx@sdcm152:~$ echo $a
    2

    zzx@sdcm152:~$ a=2
    zzx@sdcm152:~$ echo $((a++))
    2
    zzx@sdcm152:~$ a=1
    zzx@sdcm152:~$ echo $((++a))
    2

    zzx@sdcm152:~$ var=1
    zzx@sdcm152:~$ var=`expr  $var  +  1`
    echo $varzzx@sdcm152:~$ echo $var
    2

    上面的这几种做法都是只能处理整数运算,下面的这种做法是可以处理浮点数的: bc是linux上面的一个计算器,支持除位运算以外的所有运行

    var=1
    var=`echo "scale=1;$var*2.0"|bc` bc预设输出整数,用scale 指定小数点下位数 scale=n(当输入这条命令时,除法运算可以保留n位小数)
    echo $var

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    bc命令
     
    1,交互式
    • bc -l 进入bc
    • scale=10 将小数位定为10位
    • e(1) 计算e的小数点后10位
    • quit 退出bc
     
    2,echo "scale=10;0.46492572708365077*16205" | bc
        echo "obase=2;123"|bc#转换成2进制
     
    3,用百分数的形式输出
    printf "result: %.2f%% " `echo "scale=3;(6/17)*100"|bc`//前面一个%代表百分数的显示位数,后面两个%打印成一个%,scale=3是计算到小数点后面三位
     
    shell浮点数比较:
    shell脚本中浮点数的比较,一般有两种方式,使用bc和awk的方式,下面分别举例介绍:

    一,bc
    if [ `echo "0.5 > 0.3" | bc` -eq 1 ]; then echo "ok"; else echo "not ok"; fi; 

    二,awk
    x=3.1; y=3.2; echo "$x $y" | awk '{if ($1 > $2) print $1; else print $2}'
     
    shell比较:
    整数比较 
     
    -eq        等于,如:if [ "$a" -eq "$b" ] 
    -ne        不等于,如:if [ "$a" -ne "$b" ] 
    -gt        大于,如:if [ "$a" -gt "$b" ] 
    -ge        大于等于,如:if [ "$a" -ge "$b" ] 
    -lt        小于,如:if [ "$a" -lt "$b" ] 
    -le        小于等于,如:if [ "$a" -le "$b" ] 
    <        小于(需要双括号),如:(("$a" < "$b")) 
    <=        小于等于(需要双括号),如:(("$a" <= "$b")) 
    >        大于(需要双括号),如:(("$a" > "$b")) 
    >=        大于等于(需要双括号),如:(("$a" >= "$b")) 
     
    字符串比较 
    =        等于,如:if [ "$a" = "$b" ] 
    ==        等于,如:if [ "$a" == "$b" ],与=等价
    !=        不等于,如:if [ "$a" != "$b" ] 
    <        小于,在ASCII字母顺序下.如: 
    >        大于,在ASCII字母顺序下.如: 
    -z        字符串为"null".就是长度为0. 
    -n        字符串不为"null" 
  • 相关阅读:
    数据结构Java版之基数排序(四)
    数据结构Java版之递归与迭代算法(五)
    SpringBoot项目在新电脑上的配置运行,包括JDK+MAVEN+Git+SpringBoot配置等
    .NET 控制Windows文件和目录访问权限研究(FileSystemAccessRule)
    Navicat Premium 12.0.18安装与激活
    Spring Data JPA方法定义规范
    在c/c++中调用Java方法
    在Java中调用C/C++本地库
    XP环境下C# 调用Pocess.start()时提示文件找不到的错误解决办法
    C++ 获取当前正在执行的函数的相关信息
  • 原文地址:https://www.cnblogs.com/hanxing/p/4059526.html
Copyright © 2011-2022 走看看