当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 求教:为什么cat 老是出错?
帖子发表于 : 2006-12-12 22:55 

注册: 2006-09-24 19:20
帖子: 12
送出感谢: 0 次
接收感谢: 0 次
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
  cat <
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
USAGE: xtitlebar [-h] "string_for_titelbar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "cvs"
HELP
  exit 0
}
# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help
# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
#

以上程序是精华区里面的东西,但是我运行出现了如下错误
./xtitlebar: line 5: syntax error near unexpected token `newline'
./xtitlebar: line 5: `  cat <'

其实我就是看不懂这个cat
输出多断文字不是用here documnets么,权威文字如下:

当要将几行文字传递给一个命令时,here documents(译者注:目前还没有见到过对该词适合的翻译)一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果我们四有那个 here documents就不必用echo函数一行行输出。 一个 "Here document" 以 << 开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here documents打印帮助:
#!/bin/sh
# we have less than 3 arguments. Print the help text:
if [ $# -lt 3 ] ; then
cat <
ren -- renames a number of files using sed regular expressions
USAGE: ren 'regexp' 'replacement' files...
EXAMPLE: rename all *.HTM files in *.html:
 ren 'HTM$' 'html' *.HTM
HELP
 exit 0
fi
OLD="$1"
NEW="$2"
# The shift command removes one argument from the list of
# command line arguments.
shift
shift
# $* contains now all the files:
for file in $*; do
  if [ -f "$file" ] ; then
   newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
   if [ -f "$newfile" ]; then
    echo "ERROR: $newfile exists already"
   else
    echo "renaming $file to $newfile ..."
    mv "$file" "$newfile"
   fi
  fi
done

但是在这个程序里here documents在哪?
我尝试自己使用heredocuments
写一个测试的
#!/bin/sh
help()
{
cat <<emo
This is the usage of here documents!
second line
emo
}
help()
有如下错误:
./test: line 10: syntax error: unexpected end of file

高手帮忙阿
严重打击我学习shell的动力阿
呜呜


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-12-15 10:08 
头像

注册: 2005-12-08 16:53
帖子: 212
送出感谢: 0 次
接收感谢: 0 次
精华区那个代码和“权威说明”之后的示例代码中Here Document声明都是有遗漏的,楼主没注意到吗?

就精华区这个例子来说,把

代码:
cat <


改成

代码:
cat << HELP


就可以了。

关于楼主自己写的示例,Shell里执行自定义函数不要加括号,所以把最后一行的括号去掉便好。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-12-15 10:27 

注册: 2006-09-24 19:20
帖子: 12
送出感谢: 0 次
接收感谢: 0 次
thx


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译