文章目录
- 需求
- 编码
- Way1
- Way2:
- 测试
需求
需求分析:
- 支持浮点型:使用let命令
编码
Way1
用下循环吧!
#!/bin/bash
# Author:
# Date:
# Description:
# functions defines:
input_check_to_startup() {
num1=$1
num2=$2
isNum_status=
noSpace_status=
if [[ "$num1" != *" "* ]] && [[ "$num2" != *" "* ]]
#if [[ "$num1" =~ ^[0-9]+$ ]] && [[ "$num2" =~ ^[0-9]+$ ]]
then
noSpace_status=yes
fi
#if (! (expr "$num1" + 1 &>/dev/null)) && (! (expr "$num1" + 1 &>/dev/null))
if expr "$num1" + 1 &>/dev/null && expr "$num2" + 1 &>/dev/null
then
isNum_status=yes
fi
# debug:
echo "num1 you input: $num1"
echo "num2 you input: $num2"
echo "isTwoNum_status:$isTwoNum_status"
echo "noSpace_status:$noSpace_status"
echo "isNum_status:$isNum_status"
if [[ "$isTwoNum_status" == yes ]] && [[ "$noSpace_status" == yes ]] && [[ "$isNum_status" == yes ]]
then
# input_action function
operat_num
else
echo "检测失败!"
input_check_to_startup
fi
}
operat_num() {
echo "请输入你要进行的操作(add/sub/mult/div/mod):"
read action
case "$action" in
"add")
# additon function
echo "additon"
;;
"sub")
# subtraction function
echo "subtraction"
;;
"mult")
# multiplication function
echo "multiplication"
;;
"div")
# division function
echo "division"
;;
"mod")
# modulus function
echo "modulus"
;;
*)
echo "检测错误,只能输入以下的一个:add/sub/mult/div/mod:"
operat_num
;;
esac
}
# main:
isTwoNum_Status=
#while [[ "${isTwoNum_Status}" != yes ]]
#do
echo "请输入你要操作的两个数字,用空格分隔:"
#IFS=$' \t'
#read -r num1 num2
read -r num1 num2
echo "the args nums you pass: $#"
if [ $# -eq 2 ]
then
isTwoNum_status=yes
#break
else
echo "Error! please input again!"
fi
#done
if [ "${isTwoNum_Status}" = "yes" ]
then
input_check_to_startup
fi
# There are still some errors!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!
在Shell脚本中,要解决这个问题,你需要确保用户输入了恰好两个数字,并且这两个数字之间用空格分隔。你可以使用read
命令来读取用户输入,并使用条件语句来检查是否确实读取了两个参数,以及这两个参数是否都是数字。
下面是一个简单的Shell脚本示例,它实现了这个功能:
#!/bin/bash
# 读取用户输入的两个数字
echo "请输入两个数字,用空格分隔:"
read -r num1 num2
# 检查是否确实读取了两个参数
if [ $# -ne 2 ]; then
echo "检测失败,请重新输入两个数字且空格分隔:"
echo "你输入了:$1 $2"
exit 1
fi
# 检查这两个参数是否都是数字
isNum_status=no
noSpace_status=no
if [[ $num1 =~ ^-?[0-9]+$ && $num2 =~ ^-?[0-9]+$ ]]; then
isNum_status=yes
else
echo "检测失败,请重新输入两个数字且空格分隔:"
echo "num1 输入:$num1"
echo "num2 输入:$num2"
exit 1
fi
# 检查输入的两个数字之间是否有空格分隔
if [[ $num1 && $num2 ]]; then
noSpace_status=yes
else
echo "检测失败,请重新输入两个数字且空格分隔:"
echo "num1 输入:$num1"
echo "num2 输入:$num2"
exit 1
fi
echo "num1 you input: $num1"
echo "num2 you input: $num2"
echo "noSpace_status:$noSpace_status"
echo "isNum_status:$isNum_status"
在这个脚本中,我们首先使用read
命令读取用户输入的两个数字。然后,我们使用条件语句检查是否确实读取了两个参数。接下来,我们使用正则表达式来检查这两个参数是否都是数字。如果这两个参数都是数字,那么isNum_status
变量将被设置为yes
。最后,我们检查输入的两个数字之间是否有空格分隔,如果有,那么noSpace_status
变量将被设置为yes
。
如果用户输入的不是两个数字或者数字之间没有用空格分隔,脚本将输出错误信息并退出。如果用户输入正确,脚本将输出用户输入的两个数字以及两个状态变量的值。
Way2:
#!/bin/bash
expr $1 + $2 &>/dev/null # 用expr检查$1和$2是否为整型,如果其中有不为整型的,那么这条命令执行就失败了,执行状态码就为非0;即$?就为非0
if [ $? -ne 0 ]
then
echo "请输入整型数字不要输其他的!"
elif [ $# -ne 2 ]
echo "请必须传入两个参数"
else
awk "BEGIN{print $1 + $2}"
awk "BEGIN{print $1 - $2}"
awk "BEGIN{print $1 * $2}"
awk "BEGIN{print $1 / $2}"
awk "BEGIN{print $1 % $2}"
fi
加上逻辑运算符后:
#!/bin/bash
num1=$1
num2=$2
[ $# -ne 2 ] && {
echo "请传递两个参数:"
exit
} || {
expr $num1 + $num2 &>/dev/null
[ $? -ne 0 ] && {
echo "输入的要是两个数字"
exit
} || {
[ $num2 -eq 0 ] && {
echo "除数不能是0 取余不能是0"
#echo "$num1 + $num2" = `expr $num1 + $num2`
#echo "$num1 - $num2" = `expr $num1 - $num2`
#echo "$num1 * $num2" = `expr $num1 \* $num2`
}
} || {
echo "$num1 + $num2" = `expr $num1 + $num2`
echo "$num1 - $num2" = `expr $num1 - $num2`
echo "$num1 * $num2" = `expr $num1 \* $num2`
echo "$num1 / $num2" = `expr $num1 / $num2`
echo "$num1 % $num2" = `expr $num1 % $num2`
}
}