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" 
  • 相关阅读:
    Two strings CodeForces
    Dasha and Photos CodeForces
    Largest Beautiful Number CodeForces
    Timetable CodeForces
    Financiers Game CodeForces
    AC日记——整理药名 openjudge 1.7 15
    AC日记——大小写字母互换 openjudge 1.7 14
    AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
    AC日记——加密的病历单 openjudge 1.7 12
    AC日记——潜伏着 openjudge 1.7 11
  • 原文地址:https://www.cnblogs.com/hanxing/p/4059526.html
Copyright © 2011-2022 走看看