1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
| # 算术运算符 # + - * / % 加 减 乘 除 取余 # ** 幂运算 # ++ -- 自增或自减 可放到变量前或后,放在变量前,先自加或自减再取值 # ! && 逻辑非 逻辑与 逻辑或 # < <= > >= 比较运算符 小于小于等于 大于大于等于 # == != = 相等 不相等 对于字符串=表示相等 # << >> 向左移位 向右移位 # ~ & ^ 按位取反 按位异或 按位与 按位或 # = += -+ *= /= %= 赋值运算符
# 算术运算命令 # (()) 用于整数运算 echo $((3+4)) 效率更高 # let 用于整数运算 类似于(()) # expr 用于整数运算 # bc linux下计算器程序 需要yum install bc -y echo 3+4bc 可用于整数和小数运算 # $[] 用于整数运算 # awk awk可用于整数运算 可以用于小数运算 # declare 定义变量值和属性 -i参数可用于定义整数变量做运算 #
# 练习 a=6 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))"
# 进一步改进支持传参计算任意值 if [ -z "$1" -o -z "$2" ]; then echo "参数不完整" exit 1 fi echo "a + b = $(($1+$2))" echo "a - b = $(($1-$2))" echo "a × b = $(($1*$2))" echo "a ÷ b = $(($1/$2))" echo "a % b = $(($1%$2))"
# 再次优化 checkNum() { # -z为空返回true 反之false -n为空表示是整数返回false 反之true if [ -z "$1" -o -n "`echo $1sed 's/[0-9]//g'`" ]; then echo "输入错误,请输入一个整数" exit 1 fi }
checkOp() { echo "test" }
read -p "请输入第一个整数: " num1 checkNum $num1 read -p "请输入第一个整数: " num2 checkNum $num2 read -p "请输入运算符: " op checkOp $op echo "$num1 $op $num2 = $(($num1$op$num2))"
# let 赋值表达式 相当于 ((赋值表达式)) i=2 let i+=8 # 相当于((i+=8)) 效率更高 echo $i
# expr + - \* / % expr 2 + 3
i=6 i=`expr $i + 6`
# 判断一个变量是否为整数 expr $i + 6 &>/dev/null # &>/dev/null 不保留任何输出 echo $? # 返回0 说明i是整数
# 判断输入是整数还是字符串 if [ -z "$1" ]; then echo "参数不完整" exit 1 fi expr $1 + 6 &>/dev/null [ $? -eq 0 ] && echo "int" echo "char"
#优化 持续判断 while true do read -p "请输入: " a if [ -n "$a" ]; then expr $a + 6 >/dev/null 2>&1 [ $? -eq 0 ] && echo "int" echo "char" fi done # 进一步改进支持传参计算任意整数 if [ -z "$1" -o -z "$2" ]; then echo "参数不完整" exit 1 fi expr $1 + $2 + 6 >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "请输入2个整数" exit 2 fi echo "a + b = $(($1+$2))" echo "a - b = $(($1-$2))" echo "a × b = $(($1*$2))" echo "a ÷ b = $(($1/$2))" echo "a % b = $(($1%$2))"
# expr其他用法 判断文件后缀名是否符合要求 expr "sdfad.txt2" : ".*\.txt$" >/dev/null 2>&1
# 计算字符串长度 s="teststrings" expr length "$s" echo ${#s} echo $swc -L echo $sawk '{print length($0)}'
# bc 计算器 支持小数 bc #进入交互界面 3+3 3*3 echo 3+3bc
i=6 i=`echo $i+6bc`
# sep 生成数字序列 -s指定数字序列分隔符 sep -s "+" 10 # {1..10} 生成以空格为间隔数字序列 tr将空格替换为+ echo {1..10}tr " " "+"
# 应用 echo `seq -s "+" 10`=`seq -s "+" 10bc` echo `seq -s "+" 10`=$((`seq -s "+" 10`)) echo `seq -s "+" 10`=`seq -s " + " 10xargs expr`
# awk运算 支持小数 echo "3.6 8.6"awk '{print ($1+$2)}'
# declare 定义整数变量 与typeset declare -i A=66 B=6 A+=B echo $A
# $[] 运算符 i=6 i=$[i+6] echo $i
# read命令 # 语法 read [参数] [变量名] # -p 设置提示信息 # -t 设置等待输入时间 单位秒 read -t 5 -p "Please input one number: " num1 read -t 5 -p "Please input tw0 number: " num1 num2
|