当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [问题]刚学shell编程,大虾们多多关照,顺便请教个问题
帖子发表于 : 2007-05-31 16:46 
头像

注册: 2007-05-28 11:17
帖子: 105
送出感谢: 0 次
接收感谢: 0 次
这是我们的作业,题目要求:编写一个shell脚本,显示当天日期,查找给定的 某用户是否在系统中工作,如果他在系统中,就发一个问候给他,下面是我写的,文件名叫ex6.10

date '+今天是:%Y年%b %d日'
fun(){
username=$1
count=`who | grep "${username} " | wc -l`
if [ $count -gt 0 ]
then
echo "Hello!${username}!"
else
echo "您输入的用户名不在系统中"
fi
}
echo $1 ###########测试
if [ $# -eq 0 ] ############如果参数个数等于0,那么要求输入用户名
then
echo -n "请输入一个用户名:"
read newname
set $newname
fun $1
else
fun $1
fi

开启一个xterm
输入 # . ex6.10

输出:
今天是:2007年 5月 31日

请输入一个用户名:

输入:root

输出:Hello!root!

OK!到目前为止没有任何问题

那我再试一次:

输入:# . ex6.10

这次就不提示我输入用户名了

输出是:
今天是:2007年 5月 31日
root
Hello!root!

然后我另开一个xterm
输入:# . ex6.10
现在又让我输入用户名了
完成以后,再输入# . ex6.10
输出又是:
今天是:2007年 5月 31日
root
Hello!root!

哪位高手能帮我解释一下?


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-05-31 21:41 

注册: 2007-04-09 12:19
帖子: 119
送出感谢: 0 次
接收感谢: 0 次
问题在于set $newname

这一段改成
引用:
if [ $# -eq 0 ]
then
echo -n "请输入一个用户名:"
read newname
fun $newname
else
fun $1
fi


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-05-31 23:32 
头像

注册: 2007-05-28 11:17
帖子: 105
送出感谢: 0 次
接收感谢: 0 次
很感谢您的回复,按照您的指点,问题已经解决了,可是我想写得更完善一点,于是改成了这样:

if [ $# -eq 0 ]
then
while [ ! $newname ]
do
echo -n "请输入一个用户名:"
read newname
done
fun $newname
else
fun $1
fi

可是结果又跟上面说的情况一样,这又是为什么?
还有您能不能给我讲解一下我头一次用了set $newmane为什么会不对,谢谢了


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-06-01 10:58 

注册: 2007-04-09 12:19
帖子: 119
送出感谢: 0 次
接收感谢: 0 次
其实主贴中的程序并没有错误。
问题在于你用. filename(而不是sh filename或者./filename)这样的方式执行的。
.命令等价于source命令,它并不像sh filename或者./filename那样启动一个子shell。根据《Advanced Bash-Scripting Guide》,其效果类似于C程序中的#include。
所以你程序中的变量会在程序结束后仍然保留下来。

所以,还是不要养成用“.命令”来执行的习惯。
如果必须要用这种方式执行,那么要在程序结束时,把需要进行条件测试的变量unset掉;或者不要在程序中定义需要进行条件测试的变量(像我前面改的那样)。


最后由 thword 编辑于 2007-06-01 19:12,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-06-01 17:28 
头像

注册: 2007-05-28 11:17
帖子: 105
送出感谢: 0 次
接收感谢: 0 次
喔~原来是这样,我明白了,谢谢你的指教,万分感谢! :)


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-06-01 17:30 
头像

注册: 2007-05-28 11:17
帖子: 105
送出感谢: 0 次
接收感谢: 0 次
也就说保留下来了,但是这个变量还只是对这个文件起作用,应该是这样的吧


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-06-01 19:21 

注册: 2007-04-09 12:19
帖子: 119
送出感谢: 0 次
接收感谢: 0 次
lululau 写道:
也就说保留下来了,但是这个变量还只是对这个文件起作用,应该是这样的吧

不是,是当前shell中起作用。


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-06-02 20:10 

注册: 2007-03-01 15:22
帖子: 22
地址: 广州
送出感谢: 0 次
接收感谢: 0 次
我试了下第一个脚本,shell直接就给我输出一大堆ENV变量了,真ft。


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

当前时区为 UTC + 8 小时


在线用户

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


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

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

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