零基础学员的shell脚本的写作思路详解
Posted 互联网老辛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零基础学员的shell脚本的写作思路详解相关的知识,希望对你有一定的参考价值。
前言
这两天一直再批改学员的脚本作业,大多数学员写的很好,有的学员写的不太好。 还有一些还没有入门到学员不知道脚本该咋写。
不知道脚本怎么写的学员,绝大多数犯了一个错误:一上来就把脚本想的太复杂了。
我们今天单独聊聊这个问题
脚本错误范例示范
写一个防止误删除的脚本,当用户要删除某个文件,我们就让用户确认是否删除Y/N
- 若用户输入Y, 表示删除,先备份再删除
- 若用户输入N,表示不删除,退出
- 若用户输入其他字符,非Y/N,提示用户输入正确的字符。
脚本的写作是遵循演化过程的,这个脚本虽然很简单,但有的学员还是没有思路,没有思路的原因在于,他一直再想,这里应该用if循环,我怎么判断呢? 怎么可以一步到位写出来效果呢?
最后想不出来就参考优秀学员作业,发现优秀学员作业写的更复杂
照着改编一下:
最后写出来的脚本就成了这个样子,(注意,这是个错误示范)
脚本中出现了变量但后面没用上,或者没有定义的变量但后面用上了。
注意: 脚本遵循演化原则,当你还没有具有一步到位写出来的能力的时候,先从最简单的需求写起。
正确写作思路
遵循演化原则:
1. 实现最基础的功能
用户输入文件名,直接删除
#!/bin/bash
read -p "请输入你要删除的文件" file
rm -rf $file
这样实现的功能是用户不管输入啥文件,我们都给他删掉,用户没有犹豫的机会,接下来我们给用户犹豫的机会,让他考虑是否删除
2. 提示用户是否确认删除
#!/bin/bash
read -p "请输入你要删除的文件" file
read -p "你是否确认删除文件$file (Y/N)" YN
rm -rf $file
这一步虽然我们提示用户是否删除,让用户输入Y/N来确定是否删除了,但真正执行的时候,因为没有对Y/N进行判断,导致不管用户输入的是Y/N 都会被删除。
因为脚本是从上往下运行的。
所以我们喜欢判断第三行的变量 $YN, 如果用户输入Y我们就删除,如果用户输入N,我们就不删除。
3. 开始增加判断
#!/bin/bash
2 read -p "请输入你要删除的文件" file
3 read -p "你是否确认删除文件$file (Y/N)" YN
4 if [ $YN == Y ] ;then
5 echo "正在删除"
6 rm -rf $file
7 fi
8
9 if [ $YN == N ];then
10 echo "请确定好再来,正在退出"
11 exit
12 fi
但这样还有一个问题,如果用户输入的既不是Y,也不是N怎么办, 于是我们想到了多分之语句,可以使用多分之语句实现不是Y/N的情况
4. 开始使用多分支语句
1 #!/bin/bash
2 read -p "请输入你要删除的文件" file
3 read -p "你是否确认删除文件$file (Y/N)" YN
4 if [ $YN == Y ] ;then
5 echo "正在删除"
6 rm -rf $file
7 elif [ $YN == N ];then
8 echo "请确定好再来,正在退出"
9 exit
10 else
11 echo "请输入正确的字符,比如Y/N"
12 exit
13 fi
代码长了之后,没有格式看起来不好看,我们给他加上空格
到这一步后,我们基本上完成了,用户让用户输入用户名并确认,如果确认的时候我们再删除。
但这里还有个问题,虽然我们提示的是Y/N, 如果用户输入的是y/n 怎么办,接下来我们希望当用户输入小写的时候也能判断。
5. 增加小写也能够判断的情况
在这个脚本中 -o 表示或者,意思是,$YM =Y或者等于y
这样基本上很完美了,但我们题目中要求我们必须要加备份。也就是确认删除的时候先备份。
6. 增加备份
增加了方框内的两行,确保在删除的时候,可以提前备份,然后在删除。
这样关于题目当中的内容,我们就全部实现了。
接下来你还可以继续写,比如:
- 当前file是文件还是文件夹,是不是可以加个判断。
- 如果用户输入的文件名没有怎么办,是不是可以增加应该判断文件是否存在
- 在备份的时候是否备份成功怎么确定,是不是可以加上备份是否备份成功的判断
- 当前用户是否具有删除的权限,是不是可以判断用户身份,确定当前用户具有删除文件的权限。
- 是不是在删除之前可以发送邮件给管理员,让管理员参与确认是否能够删除
等等。
总结
写脚本一定要从小到大,从简单到复杂,遵循演化原则,不要上来就想如何实现全部功能,而是从一个小的功能开始一点点的递进,不断测试,最终完成大的脚本。
以上是关于零基础学员的shell脚本的写作思路详解的主要内容,如果未能解决你的问题,请参考以下文章