昨天我们说到了while循环.以及如何跳出循环,和中断本次循环
还有哦,就是我把这个原始的脚本放到了github上面了,需要的小伙伴可以下载哦.点击原文链接就可以看到了.
好啦,今天我们来接着认识shell,接着昨天的内容继续.
既然用户输入了信息,我们就应该对他输入的信息进行判断
/p>
1.是否真的输入了
[[${userInput}==""]]continue
用户未输入任何有用的信息,则继续
2.是否输入了纯数字
如果用户输入了信息,也不是q/Q,那么我们就对他输入的信息进行判断
/p>
那么,我们要怎么判断呢?
还记得我们之前有讲过`tr`这个命令嘛,忘记了的小伙伴呢,可以翻一下直接的记录哦:课程12
我们可以将输入的信息,进行转换判断,如果不是数字或者符号-,我们就把它编程换行,然后根据行号判断是否符合要求
echo"${userInput}"
tr-c"[0-9]-""\n"
wc-l
聪明的小伙伴可能已经发现了,这个会直接输出到终端上面,我们没有办法使用呀.所以呢,此时我们引出一个变量
neNumber,将值赋给它
lineNumber=`echo"${userInput}"
tr-c"[0-9]-""\n"
wc-l`
可能有人不是很明白``这个是什么含义.我们在前面也有提示过,这个的含义就是,里面的内容是一个可以执行的代码,相同功能的还有$(()),也是表示里面的内容是一个命令.当然,$(())还可以用来进行整数计算,也支持变量
numberOne=10
numberTwo=12
two=$((${numberTwo}-${numberOne}))
既然我们现在知道了有几行了,下面我们就进行判断
/p>
如果行数为1,则表示输入符合要求,
如果行数不为1,则表示输入不符合要求,应该要提示重新输入
可以使用if来进行判断.不过你可能发现了,我并没有使用if判断.
[[]]等价于test,也是一个判断语句,之前我们也有提过的哦.
[[${lineNumber}-ne1]]isNumber="false"
这行表示如果[[]]里面的内容为真,则执行后面的内容,否则,忽略跳过.
这里有一个误区哦,就是isNumber我们并没有给它初始化,也就是说,这个值不会被重新赋值,即使后来输入的是数字,也不会跳出循环.所以,我们需要每次在循环的开始,将这个值初始化
/p>
isNumber="true"
将这个内容放到:while循环的下面一行.
为了方便识别,我们也可以将这个变量放置在变量设置的区域,方便初始化.或者以后我们进行更大的项目时,成组,方便更改,以及简介
那么呢,其实我们也可以将这个判断输入的信息呢,组合成一个函数
/p>
那么什么是函数呢?
其实呢,简单点说,就是为了使代码变得简洁,可重复多次利用,而产生的的工具.
那么我们要怎么定义函数呢?其实前面我们也有过介绍哦
函数的定义如下:
functionfunctionName_P_O{
#函数体
}
function可以省略,但是函数名后面必须要有()
functionName_P_O(){
#函数体
}
二者等价
函数的命名没有硬性要求:
不过最好是我们可以一眼就知道所表达的含义最好.
前面我也有说过如何命名.我在简单的说一下.
我们可以使用这个函数的功能来为这个函数命名:例如交换两个数
我们就可以为它命名为:
functionswapTwoNumbe{}
当然,这个可以的.但是呢,我们都知道,既然需要交换两个数,则需要提供两个参数才可以,而且还要有一个输出:
所以呢,我觉得下面这个可能会更好点
functionswapTwoNumber_PP_O{}
P:parameter,O
utput
这里没有指出类型的范围:Int,String,Double等等
这个呢,就根据个人喜好啦.所以呢,我们就可以把上面的判断输入整合成一个函数啦:
local:表示只可以在这个函数内使用的变量,也就是说,这个函外面有一个同名的变量,也不会影响函数里面数值的变化的
因为函数名只有一个输入,并且只要求输入整形(其实我们里面并没有进行数学计算,所以呢,不输入整形也是可以使用的,这里可以使用_P来代替_I),没有输入,函数就没有加_O
既然有了结果,我们是不是就应该紧接着做判断:
如果${isNumber}=="false",表示不是数字,应该提示输入的信息无效,并且要求继续输入,或者[q/Q]退出
好啦,今天就先到这里吧.
所以呢,到了现在,你的代码呢应该是下面这个样子的:
其实呢,现在你的脚本就可以运行啦,你可以试试哦
预览时标签不可点收录于话题#个上一篇下一篇