Chinaunix

标题: 请教,针对数字型子目录,怎么循环总是出错? [打印本页]

作者: lbbei    时间: 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







作者: lbbei    时间: 2014-02-20 23:45
求指导,求解惑,谢谢大家!


@yangkyo821
作者: q1208c    时间: 2014-02-21 09:06
回复 1# lbbei


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

你有一个目录是空的, 所以, * 就是 *, 于是产生了 *+1 这样奇怪的结果.     
作者: lbbei    时间: 2014-02-21 09:23
本帖最后由 lbbei 于 2014-02-21 09:23 编辑

回复 3# q1208c


    还这样啊,谢谢啊。子目录数不固定,那该怎么改?
作者: runintostar    时间: 2014-02-21 09:27
回复 4# lbbei

把*换成`ls -d */ 2>/dev/null`
也许可以解决你的问题
   
作者: lbbei    时间: 2014-02-21 09:35
回复 5# runintostar

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

还有那个判断是怎么回事?结果怎么都是假?都执行else呢?
   
作者: runintostar    时间: 2014-02-21 09:36
本帖最后由 runintostar 于 2014-02-21 09:39 编辑

回复 6# lbbei

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

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

   
作者: lbbei    时间: 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
作者: runintostar    时间: 2014-02-21 10:10
回复 8# lbbei
你代码没问题,看报错应该是[和! -x之间没空格
test时不能这样
[expression]
必须这样
[ expression ]

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


   
作者: lbbei    时间: 2014-02-21 10:41
回复 9# runintostar


    万分感谢,问题解决。是  if [ XXXX ]   里 条件语句XXXX 和 [] 之间得有空格。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2