请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在初始输入时候我直接按回车,如何验证这种情况下的非法输入?

如图,万一我在please enter a position interger: 时候直接回车,我会得到许多

./practise_sum.sh: line 13: ((: 9691>: syntax error: operand expected (error token is “>”)

请问如何验证用户是不是输入了东西呢?
我的代码如下

#!/bin/bash
#

while true
do
	read -t 30 -p "Please enter an integer: " input
	if [ -n ${input//[0-9]/} ]
	then
		echo "Only integer is allowed."
	else
		index=1
		sum=0
		until (($index>$input))
		do
			sum=$(($sum+$index))
			((++index))
		done
		echo "Sum for 1+2+...+$input is: $sum"
		exit
	fi
done

正在回答

1回答

同学,如果想要判断输入得是否为空,可以对变量num做非空判断,像下图中这样就可以https://img1.sycdn.imooc.com//szimg/5dfc769509bdc3dc11400582.jpg

#!/bin/bash

#


while true

do

        read -p "pls input a positive number: " num


        if [ -z $num ];then

                echo "input enlegal"

                continue

        fi


        expr $num + 1 &> /dev/null


        if [ $? -eq 0 ];then

                if [ `expr $num \> 0` -eq 1 ];then

                        for((i=1;i<=$num;i++))

                        do

                                sum=`expr $sum + $i`

                        done

                        echo "1+2+3+....+$num = $sum"

                        exit

                fi

        fi

        echo "error,input enlegal"

        continue

done


0 回复 有任何疑惑可以回复我~
  • 提问者 云霄9 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-12-20 15:30:01
  • 提问者 云霄9 #2
    啊,是的好用!
    我一开始使用"if [ -z $input ] && [ -n ${input//[0-9]/} ]" 来验证,貌似不太好用呢!
    分开写就可以了! 为什么! T^T
    ```
    #!/bin/bash
    #
    
    while true
    do
    	read -t 30 -p "Please enter an integer: " input
    	if [ -z "$input" ]
    	then
    		echo "input illegal"
    		continue
    	fi
    	if [ -n "${input//[0-9]/}" ]
    	then
    		echo "Only integer is allowed."
    	else
    		index=1
    		sum=0
    		until (($index>$input))
    		do
    			sum=$(($sum+$index))
    			((++index))
    		done
    		echo "Sum for 1+2+...+$input is: $sum"
    		exit
    	fi
    done
    ```
    回复 有任何疑惑可以回复我~ 2019-12-20 15:47:19
  • 酷田 回复 提问者 云霄9 #3
    你这样写的话应该改成逻辑或,而不是逻辑与,只要不为数字或者是空输入,都非法,这样写:if [ -n ${input//[0-9]/} ] || [ -z $input ]
    回复 有任何疑惑可以回复我~ 2019-12-20 16:21:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信