LinuxSir.cn,穿越时空的Linuxsir!

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

关于一个简单程序的问题~~请大哥们解答~~

[复制链接]
发表于 2009-2-18 18:57:07 | 显示全部楼层 |阅读模式
大家好!!我是shell的初学者,今天看资料的时候看到一个例子:
if test -f "$1"
then
lpr $1
elif test -d "$1"
then
(cd $1;lpr $1)
else
echo "$1不是文件或目录"
fi
把它保存为prfile,再chmod +x prfile
执行刚才的程序: ./prfile aaa
我是在fedora 10中执行的,它报错为:lpr: Error - no default destination available.
请问下这是为什么????
后来我把lpr改为printf,当aaa为文件时它运行正确,但为文件夹是它并不是进入文件夹了打印出来而是直接显示aaa。
请问大虾们这是为什么???程序中不是有如果$1是文件夹就先进入了再打印出来吗???
发表于 2009-2-18 22:15:47 | 显示全部楼层
Post by fbjfw;1949305

(cd $1;lpr $1)

这句话有问题,除非这个目录里有一个和这个目录名相同的文件。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-18 22:46:21 | 显示全部楼层
我刚刚试了下,还是不行~~请大虾们解决下~~
回复 支持 反对

使用道具 举报

发表于 2009-2-18 23:04:40 | 显示全部楼层
allinster@debian:~/shells$ cat h.sh
if test -f "$1"
then
printf "$1\n"
elif test -d "$1"
then
(cd $1;printf "$1\n";pwd)
else
echo "$1不是文件或目录"
fi

这个是你原来的脚本,我这没有lpr命令,改成printf,为了显示清楚,加了个换行的 \n,为了说明参数目录存在时,shell确实进入了该目录,用pwd将其路径输出

allinster@debian:~/shells$ ls
aaa  dd  ddd  ha  hello.sh  h.sh  log_usrs.sh  num_char.sh  num_pars.sh #现在的aaa是个目录

allinster@debian:~/shells$ sh h.sh aaa
aaa
/home/allinster/shells/aaa      #看到没,shell已经进入了该目录了

allinster@debian:~/shells$ rmdir aaa

allinster@debian:~/shells$ touch aa

allinster@debian:~/shells$ sh h.sh aa
aa
allinster@debian:~/shells$ rm aa

allinster@debian:~/shells$ sh h.sh aa
aa不是文件或目录


关于楼主的问题,我以为是:shell确实进入了参数指定的目录,但是脚本执行完后,这个shell就退出来了,所以,你还在你当前的目录下,没有看到你当前的shell的目录变了,你可以将你的
(cd $1;lpr $1)改成(cd $1;pwd;lpr $1)让它显示有没有进到目录里去


以个人观点,楼主这种写法看着很不爽啊,我习惯这样:
#!/bin/bash
if [ -f "$1" ]
then
      printf "$1\n"
elif [ -d "$1" ]
then
      cd $1
      printf "$1\n"
      pwd
else
      echo "$1不是文件或目录"
fi

况且printf我也不多用啊,一般用echo,多方便
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-18 23:28:42 | 显示全部楼层
太感谢了~~高手啊!!高手!!问题终于解决了!!
谢谢~
回复 支持 反对

使用道具 举报

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

本版积分规则

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