shell 运算符

作者: ropon 分类: Shell 发布时间: 2020-01-20 13:52
# 算术运算符
# + - * / %		加 减 乘 除 取余
# **		幂运算
# ++ --		自增或自减 可放到变量前或后,放在变量前,先自加或自减再取值 
# ! && ||	逻辑非 逻辑与 逻辑或
# < <= > >= 比较运算符 小于小于等于 大于大于等于
# == != =	相等 不相等 对于字符串=表示相等
# << >>		向左移位 向右移位
# ~ | & ^	按位取反 按位异或 按位与 按位或
# = += -+ *= /= %=	赋值运算符


# 算术运算命令
# (())	用于整数运算 echo $((3+4)) 效率更高
# let 	用于整数运算 类似于(())
# expr 	用于整数运算
# bc 	linux下计算器程序 需要yum install bc -y echo 3+4|bc 可用于整数和小数运算
# $[]	用于整数运算
# 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 $1|sed '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 $s|wc -L
echo $s|awk '{print length($0)}'

# bc 计算器 支持小数
bc #进入交互界面
3+3
3*3
echo 3+3|bc

i=6
i=`echo $i+6|bc`

# sep 生成数字序列 -s指定数字序列分隔符
sep -s "+" 10
# {1..10} 生成以空格为间隔数字序列 tr将空格替换为+
echo {1..10}|tr " " "+"

# 应用
echo `seq -s "+" 10`=`seq -s "+" 10|bc`
echo `seq -s "+" 10`=$((`seq -s "+" 10`))
echo `seq -s "+" 10`=`seq -s " + " 10|xargs 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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!