LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1089|回复: 2

这个shell脚本作什么用?

[复制链接]
发表于 2009-3-15 15:15:51 | 显示全部楼层 |阅读模式
shell脚本如下:
#!/bin/tcsh
set n = 0
foreach f ( * )
  echo $f | grep " "
  if ( $? == 0 ) then
    mv "$f"  `echo $f | sed -e "s/ /_/g"`
    @ n += 1
  endif
end
echo $n changed

刚接触shell编程,我试了下上面这个脚本,其的作用是将当前文件夹下文件名中含有空格的文件改名,将空格替换为下划线,再打印出改名的文件的个数。但有几个地方我想再问下:
f ( * )是什么 f()是函数么 有什么特殊的指代么 它为什么能代表逐个的取当前文件夹下的所有文件名?

if ( $? == 0 ) then中的$?指的是什么?$? == 0是啥意思?

谢谢!
发表于 2009-3-15 15:52:14 | 显示全部楼层
没用过 tcsh,不过看起来是这样的:

1.
  1. foreach f ( * )
  2. ...
  3. end
复制代码
这是一个遍历循环,* 和 ls * 这样的 shell 命令里的星号是一样的,会被 shell 自动扩展成满足这个通配符的文件名列表;
遍历时每个文件名都赋值给变量 f (例如里面的 echo $f 就是显示它)
在其它一些语言里这种结构是类似于这样的形式:
  1. foreach x in items
  2.   print x
  3. end
复制代码
或者
  1. foreach items as x
  2.   print x
  3. end
复制代码

2. $? 应该是返回上一个命令的返回值
例如这里的,grep 假如找到了匹配的话会返回 0,没有的话会返回 1
  1. echo $f | grep " "
  2. if ( $? == 0 )
  3. ...
  4. endif
复制代码
就是只有 $f 里含有空格时才执行 if 里的内容( mv xxx xxx)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-15 16:28:15 | 显示全部楼层
谢谢你 我明白了!!
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表