一段shell 脚本报错 不知到错在哪

aa_niaofang 2011-07-30 04:02:23

1 #!/bin/bash
2 set -x
3 #del.lines
4 #script takes filename(s) and deletes all blanks
5
6 TEMP_F=/temp/del.lines.$$
7
8 usage()
9 {
10 #usage
11 echo "Usage:`basename $0` file[file..]"
12 echo "try `basename $0` -help for more infomation"
13 exit 1
14 }
15
16 if [ $# -eq 0 ];then
17 usage
18 fi
19
20 FILES=$1
21 echo $FILES
22 echo $#
23 while [ $# -gt 0 ]
24 do
25 echo "..$1"
26 case $1 in
27 -help) cat << MAYDAY
28 Use this script to delete all blank lines
29 MAYDAY
30 exit 0
31 ;;
32
33 *) FILE_NAME =$1
34
35 if [ -f $1 ]; then
36 sed `/^$/d` $FILE_NAME > $TEMP_F
37 mv $TEMP_F $FILE_NAME
38 else
39 echo "`basnename $0` cannot find this file :$1"
40 fi
41 ;;
42 shift
43 esac
44 done


错误:./del.lines: 行 44: 警告: 立即文档在第 27 行被文件结束符分隔 (需要 `MAYDAY')
./del.lines: 行 45: 语法错误: 未预期的文件结尾
...全文
724 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
aa_niaofang 2011-07-30
  • 打赏
  • 举报
回复
放到esac 之后可以了 多谢呀
steptodream 2011-07-30
  • 打赏
  • 举报
回复
这个shift 不是应该相对于while 循环来说的么?有点糊涂呀
------------
那你也该放在esac之后啊
case到esac之间是case的地盘啊
aa_niaofang 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 steptodream 的回复:]

引用 5 楼 aa_niaofang 的回复:

啊 太好了 分全给大神你了 开始碰这个东西 弄了一晚上了
还有个问题为什么shift 放在;;后面 不对呢?

case的每一个分支以;;结束 你放到他之后 他算怎么回事呢?
[/Quote]
这个shift 不是应该相对于while 循环来说的么?有点糊涂呀
steptodream 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 aa_niaofang 的回复:]

啊 太好了 分全给大神你了 开始碰这个东西 弄了一晚上了
还有个问题为什么shift 放在;;后面 不对呢?
[/Quote]
case的每一个分支以;;结束 你放到他之后 他算怎么回事呢?
aa_niaofang 2011-07-30
  • 打赏
  • 举报
回复
啊 太好了 分全给大神你了 开始碰这个东西 弄了一晚上了
还有个问题为什么shift 放在;;后面 不对呢?
steptodream 2011-07-30
  • 打赏
  • 举报
回复
32 *) FILE_NAME =$1
这行赋值 多了空格 改成
32 *) FILE_NAME=$1

38 echo "`basnename $0` cannot find this file :$1"
这行的命令打错
应该是basename 而不是basnename
aa_niaofang 2011-07-30
  • 打赏
  • 举报
回复
然后 我重新改了下

1 #!/bin/bash
2 #del.lines
3 #script takes filename(s) and deletes all blanks
4
5 TEMP_F=/temp/del.lines.$$
6
7 usage()
8 {
9 #usage
10 echo "Usage:`basename $0` file[file..]"
11 echo "try `basename $0` -help for more infomation"
12 exit 1
13 }
14
15 if [ $# -eq 0 ];then
16 usage
17 fi
18
19 FILES=$1
20 echo $FILES
21 echo $#
22 while [ $# -gt 0 ]
23 do
24 echo "..$1"
25 case $1 in
26 -help) cat << MAYDAY
27 Use this script to delete all blank lines
28 MAYDAY
29 exit 0
30 ;;
31
32 *) FILE_NAME =$1
33
34 if [ -f $1 ]; then
35 sed `/^$/d` $FILE_NAME > $TEMP_F
36 mv $TEMP_F $FILE_NAME
37 else
38 echo "`basnename $0` cannot find this file :$1"
39 fi
40 shift
41 ;;
42 esac
43 done



又有问题:
./del.lines: 行 32: FILE_NAME: 未找到命令
./del.lines: 行 38: basnename: 未找到命令
aa_niaofang 2011-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steptodream 的回复:]

第二个MAYDAY顶格写!
[/Quote]
多谢了 改了之后 还有个问题
./del.lines: 行 42: 未预期的符号 `newline' 附近有语法错误
./del.lines: 行 42: ` shift'
steptodream 2011-07-30
  • 打赏
  • 举报
回复
第二个MAYDAY顶格写!

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧