免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: byrand1984
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2015-11-14 00:33 |只看该作者
回复 6# yjh777


小弟是小白,见笑了


   

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

这是小弟的最新脚本

#!/bin/bash
a=0
while :
  do
        read -p "Please input a directory: "   dir
        for each in $dir;do
        if [[ ! -d $each ]] || [ -z $dir ];then
                echo "Not a directory: $each"
                let a=a+1
                  while [ $a -eq 3 ];do
                        echo "You are wrong,Quit.."
                        exit 1
                  done
        else
                break 2
        fi
        done
done
echo $dir

目前还存在一个问题,比如用户直接回车的情况下,出错次数并没有累加,

即让用户输入目录时,如果直接回车三次以上,脚本依然不能退出

这个语句是否写的不正确,以至于不能判断?

[ -z $dir ]  或者 [ $dir == "" ] 都试过的




   

论坛徽章:
0
13 [报告]
发表于 2015-11-15 22:44 |只看该作者
回复 7# 我是一隻羊


大侠,有个新问题,请关注下12楼。



   

论坛徽章:
0
14 [报告]
发表于 2015-11-16 09:40 |只看该作者
直接回车,dir就为空,for each循环就没进去,所以次数没有累加。把累加和判断诺到for each循环外面应该就可以了。

放在循环里的另一个问题是:如果输入test*,而你的目录刚好有多个这样的文件,for each直接就会循环多次,导致退出。

论坛徽章:
5
金牛座
日期:2015-07-03 13:32:00卯兔
日期:2015-07-03 13:32:17程序设计版块每日发帖之星
日期:2015-11-29 06:20:0015-16赛季CBA联赛之同曦
日期:2015-12-15 09:36:06CU十四周年纪念徽章
日期:2016-07-06 17:18:48
15 [报告]
发表于 2015-11-16 13:05 |只看该作者
用sh -x *.sh执行脚本,会输出执行过程,这样你可以自己调试。

论坛徽章:
0
16 [报告]
发表于 2015-11-16 22:58 |只看该作者
回复 14# lgfang

小弟水平有限,脑筋着实转不过来,

这是最新的脚本,现在是输入目录或者不是他都累加了,郁闷

#!/bin/bash
a=0
while :
do
read -p "please input a directory:  " DIR
for each in  $DIR;do
if [[ ! -d $each ]];then
        echo "not a  directory: $each"
fi
done
if [[ -z $DIR ]];then
        echo "Not a directory"
fi
let a=a+1
if [[ $a == 3 ]];then
        echo "is wrong"
        exit
fi
done
echo $DIR



   

论坛徽章:
0
17 [报告]
发表于 2015-11-17 15:27 |只看该作者
  1. #!/bin/bash

  2. count=0
  3. while [[ "$count" -lt 3 ]]; do
  4.     ok=yes
  5.     count=$((count + 1))
  6.     read -p "please input a directory:  " DIR

  7.     if [[ -z "$DIR" ]]; then
  8.         ok=no
  9.         continue
  10.     fi

  11.     for each in $DIR; do
  12.         if [[ ! -d "$each" ]]; then
  13.             echo "not a dir: $each"
  14.             ok=no
  15.         fi
  16.     done

  17.     if [[ "$ok" == yes ]]; then
  18.         break
  19.     fi
  20. done

  21. if [[ "$ok" == yes ]]; then
  22.     echo done
  23. else
  24.     echo "abort" >&2
  25.     exit 1
  26. fi
复制代码

论坛徽章:
0
18 [报告]
发表于 2015-11-17 22:03 |只看该作者
回复 17# lgfang

感谢大侠的帮助,这个脚本已经达到了小弟的初衷

小弟水平有限,需要先消化再吸收。

在此,感谢大家的热心帮助

论坛徽章:
0
19 [报告]
发表于 2015-11-23 22:51 |只看该作者
对read 值,做个判断看是否为空,即可解决


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP