零基础学员的shell脚本的写作思路详解

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言

这两天一直再批改学员的脚本作业大多数学员写的很好有的学员写的不太好。 还有一些还没有入门到学员不知道脚本该咋写。

不知道脚本怎么写的学员绝大多数犯了一个错误一上来就把脚本想的太复杂了。

我们今天单独聊聊这个问题

脚本错误范例示范

写一个防止误删除的脚本当用户要删除某个文件我们就让用户确认是否删除Y/N

  1. 若用户输入Y 表示删除先备份再删除
  2. 若用户输入N表示不删除退出
  3. 若用户输入其他字符非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. 增加备份

在这里插入图片描述
增加了方框内的两行确保在删除的时候可以提前备份然后在删除。

这样关于题目当中的内容我们就全部实现了。

接下来你还可以继续写比如

  1. 当前file是文件还是文件夹是不是可以加个判断。
  2. 如果用户输入的文件名没有怎么办是不是可以增加应该判断文件是否存在
  3. 在备份的时候是否备份成功怎么确定是不是可以加上备份是否备份成功的判断
  4. 当前用户是否具有删除的权限是不是可以判断用户身份确定当前用户具有删除文件的权限。
  5. 是不是在删除之前可以发送邮件给管理员让管理员参与确认是否能够删除

等等。

总结

写脚本一定要从小到大从简单到复杂遵循演化原则不要上来就想如何实现全部功能而是从一个小的功能开始一点点的递进不断测试最终完成大的脚本。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: shell

“零基础学员的shell脚本的写作思路详解” 的相关文章