免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3357 | 回复: 18
打印 上一主题 下一主题

[系统管理] 如果失败超过3次,则退出脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-13 14:05 |只看该作者 |倒序浏览
小弟的一个小脚本,让用户自行输入目录的路径,如果不是目录或者直接回车就退出脚本

现在假定用户在第一次或者第二次会输入错误,如果前两次错误,就弹出提示,告知用户

第三次失败就退出脚本


#!/bin/bash
read -p "please input a directory:  " DIR
for each in $DIR;do
if [[ ! -d $each ]];then
        echo "Not a  directory: '$each'"
        exit 1
fi
done
if [[ -z $dir ]];then
        echo "You input incorrect,quit"
        exit 1
fi

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
2 [报告]
发表于 2015-11-13 15:13 |只看该作者
加一个变量,每次错了类加不就行了吗

评分

参与人数 1信誉积分 +10 收起 理由
substr函数 + 10 很给力!

查看全部评分

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
3 [报告]
发表于 2015-11-13 15:16 |只看该作者
本帖最后由 expert1 于 2015-11-16 10:26 编辑


counter = 0
while :
do
    #判断
    if 错误,
      counter ++
      if counter == 2;
          ....
      else if  ==3 ;
     break
    else 正确, break
done

论坛徽章:
0
4 [报告]
发表于 2015-11-13 16:13 |只看该作者
本帖最后由 byrand1984 于 2015-11-13 16:15 编辑

回复 3# expert1

大侠,由于小弟是小白,经过你的指导,以下是小弟的新脚本,请看:

感觉自己写出来看着很臃肿,别扭,请你指导下,是否可以精简下。

#!/bin/bash
read -p "please input a directory: " dir
while :
counter=0
do
if [[ ! -d $dir ]];then
        echo "is wrong"
        let counter=counter+1
        if [ $counter -eq 1 ];then
        read -p "please input a directory: " dir
                if [[ ! -d $dir ]];then
                echo "is wrong"
                let counter=counter+1
                        if [ $counter -eq 2 ];then
                        read -p "please input a directory: " dir
                        if [[ ! -d $dir ]];then
                        echo "is wrong"
                        let counter=counter+1
                                if [ $counter -eq 3 ];then
        echo "Quit.."
        break
        fi
                fi
        fi
                fi
        fi
else
        break
fi
done

小弟在while循环中嵌套了for,请看:

read -p "please input a directory: " dir
while :
counter=0
do
for each in $dir;do
if [[ ! -d $each ]];then
        echo "is wrong"
        let counter=counter+1
        if [ $counter -eq 1 ];then
        read -p "please input a directory: " dir
                if [[ ! -d $each ]];then
                echo "is wrong"
                let counter=counter+1
                        if [ $counter -eq 2 ];then
                        read -p "please input a directory: " dir
                        if [[ ! -d $each ]];then
                        echo "is wrong"
                        let counter=counter+1
                                if [ $counter -eq 3 ];then
        echo "Quit.."
        break
        fi
                fi
        fi
                fi
        fi
else
        break
fi
done
done

如果用户输入的是目录,一个break它只能跳出for循环,脚本还是在while循环中转着





   

论坛徽章:
0
5 [报告]
发表于 2015-11-13 16:14 |只看该作者
回复 2# yjh777

累加了,新脚本在后面,请看看


   

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
6 [报告]
发表于 2015-11-13 17:21 |只看该作者
while :
counter=0
do

不是这样写,counter放在while之前,,;先看看语法吧

论坛徽章:
28
2015年迎新春徽章
日期:2015-03-04 10:16:53午马
日期:2015-03-20 17:11:07亥猪
日期:2015-03-20 17:11:23戌狗
日期:2015-03-20 17:11:33酉鸡
日期:2015-03-20 17:11:47申猴
日期:2015-03-20 17:11:58未羊
日期:2015-03-20 17:12:10子鼠
日期:2015-03-20 17:12:23丑牛
日期:2015-03-20 17:12:40卯兔
日期:2015-03-20 17:12:51辰龙
日期:2015-03-20 17:13:00巳蛇
日期:2015-03-20 17:13:12
7 [报告]
发表于 2015-11-13 18:39 |只看该作者
  1. #!/bin/bash
  2. for((;i++<3;));do
  3.         read -p "dir: " dir
  4.         [ ! -d $dir ] \
  5.                 && echo Wrong \
  6.                 || exit
  7. done
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-11-13 22:33 |只看该作者
#!/bin/bash
a=0
while true
  do
        read -p "请输入一个目录:" ml
        if [ -d $ml ];then
                echo "输入目录成功"
                exit 1
        else
                let a=a+1
        fi
        [ $a -eq 3 ]&& break
        echo "第三次输错就退出脚本"  
  done
   

论坛徽章:
0
9 [报告]
发表于 2015-11-14 00:32 |只看该作者
回复 7# 我是一隻羊

谢谢,小弟明天再试试


   

论坛徽章:
0
10 [报告]
发表于 2015-11-14 00:33 |只看该作者
回复 8# 扯淡的青春要扯淡对待

小弟明天再试试看。


谢谢   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP