免费注册 查看新帖 |

Chinaunix

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

[文件目录] 请教,针对数字型子目录,怎么循环总是出错? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-02-20 23:43 |只看该作者 |倒序浏览
本帖最后由 lbbei 于 2014-02-21 09:25 编辑

针对目录的操作,$DAY下有217,218,219三个子目录,求大虾指教,为何运行结果显示如下?是循环出的问题吗?结果是对的,可是多出了第四行。
#bash Rtime
218
219
220
Rtime: line 10: *+1: syntax error: operand expected (error token is "*+1")


还有,子目录名217,218,219是被当作字符读入变量的吗?我想判断当前子目录(217)的后一个目录(218)存不存在,用上面的条件语句怎么判断不了呢?不管是[-d ""$MYPWD"/"$stpwd"/"$YEAR"/"$nextday""] 还是[!-d ""$MYPWD"/"$stpwd"/"$YEAR"/"$nextday""]结果怎么都执行else里的语句呢?

程序如下:


#!/bin/bash
MYPWD=`pwd`
stpwd=data  
cd "$MYPWD"/"$stpwd"
for YEAR in *
do
cd "$MYPWD"/"$stpwd"/"$YEAR"
for DAY in *
  do
  nextday=$[$DAY+1]
echo $nextday
#  if [-d ""$MYPWD"/"$stpwd"/"$YEAR"/"$nextday""]
#  then
#  cd "$MYPWD"/"$stpwd"/"$YEAR"/"$DAY"
####################################################
#  for STA in *
#  do
#  cd "$MYPWD"/"$stpwd"/"$YEAR"/"$DAY"/"$STA"
#  cp "$MYPWD"/"$stpwd"/"$YEAR"/"$nextday"/"$STA"/* ./
#  echo "********"$YEAR" "$DAY" "$STA" has been do********"
#  done
#  else
#  echo "################"$YEAR" "$DAY" is this year last day!!!###"
#  fi
done
done






论坛徽章:
0
2 [报告]
发表于 2014-02-20 23:45 |只看该作者
求指导,求解惑,谢谢大家!


@yangkyo821

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
3 [报告]
发表于 2014-02-21 09:06 |只看该作者
回复 1# lbbei


for DAY in *
  do
  nextday=$[$DAY+1]

你有一个目录是空的, 所以, * 就是 *, 于是产生了 *+1 这样奇怪的结果.     

论坛徽章:
0
4 [报告]
发表于 2014-02-21 09:23 |只看该作者
本帖最后由 lbbei 于 2014-02-21 09:23 编辑

回复 3# q1208c


    还这样啊,谢谢啊。子目录数不固定,那该怎么改?

论坛徽章:
0
5 [报告]
发表于 2014-02-21 09:27 |只看该作者
回复 4# lbbei

把*换成`ls -d */ 2>/dev/null`
也许可以解决你的问题
   

论坛徽章:
0
6 [报告]
发表于 2014-02-21 09:35 |只看该作者
回复 5# runintostar

谢谢,换了这个,第四行那个没了,可是结果却不对了,结果显示是当前值了,没有+1.

还有那个判断是怎么回事?结果怎么都是假?都执行else呢?
   

论坛徽章:
0
7 [报告]
发表于 2014-02-21 09:36 |只看该作者
本帖最后由 runintostar 于 2014-02-21 09:39 编辑

回复 6# lbbei

Sorry,不好意思,我没有看清你下面要+1,因为结果都带个/的缘故,要改一下

`ls -d */ 2>/dev/null|sed 's/\/$//'`

   

论坛徽章:
0
8 [报告]
发表于 2014-02-21 09:48 |只看该作者
回复 7# runintostar


    谢谢,这样结果就对了,能解释下那句的意思吗?管道符太多,有点晕。    |前面是判断是否为非空目录?那后面呢?


还有个问题是下面那句的IF,判断它存不存在,运行说 -d  和 !-d 没找到,可是别人是那么说的,怎么我这里不给运行呢?

line 12: [!-x: command not found


#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限
if [ ! -x "$myPath"]; then
mkdir "$myPath"
fi
#这里的-d 参数判断$myPath是否存在
if [ ! -d "$myPath"]; then
mkdir "$myPath"
fi

论坛徽章:
0
9 [报告]
发表于 2014-02-21 10:10 |只看该作者
回复 8# lbbei
你代码没问题,看报错应该是[和! -x之间没空格
test时不能这样
[expression]
必须这样
[ expression ]

那句话你可以自己敲一下看看嘛
ls -d */
就是列出当前路径下所有的目录类型的文件,如果没有目录,就是空咯,对吧?
但是这样列出来的目录都带/
比如
ls -d */后会显示
213/ 223/
sed是把/去掉


   

论坛徽章:
0
10 [报告]
发表于 2014-02-21 10:41 |只看该作者
回复 9# runintostar


    万分感谢,问题解决。是  if [ XXXX ]   里 条件语句XXXX 和 [] 之间得有空格。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP