计算、判断

两个变量相加    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%%\n" `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" 
posted on 2014-10-29 14:51  寒星12345678999  阅读(309)  评论(1编辑  收藏  举报