初学shell 懵懂

sh/bash/dash/ksh/zsh等Shell脚本
回复
muyuyuzhong
帖子: 5
注册时间: 2007-10-10 15:57

初学shell 懵懂

#1

帖子 muyuyuzhong » 2008-04-07 16:48

#!/bin/sh

salutation="Hello"
echo $salutation
echo "The program $0 is now running"
echo "The second parameter was $2"
echo "The first parameter was $1"
echo "The parameter list was $*"
echo "The user's home directory is $HOME"

echo "Please enter a new greeting"
read salutation

echo $salutation
echo "The script is now complete"

exit 0
我的shell源文件如上

执行时为什么有这样的提示,执行起来也是对的啊,为什么会出现:not found 之类的语句呢? 不明白...

lucky@lucky-desktop:~/linux程序设计/chapter02$ /bin/sh try_var
: not found
Hello
The program try_var is now running
The second parameter was
The first parameter was
The parameter list was
The user's home directory is /home/lucky
: not found:
Please enter a new greeting
Sire
: bad variable namen
: not found:
Hello
The script is now complete
: not found:
exit: 17: Illegal number: 0
muyuyuzhong
帖子: 5
注册时间: 2007-10-10 15:57

#2

帖子 muyuyuzhong » 2008-04-07 16:51

#!/bin/sh

yes_or_no() {
echo "Is your name $* ?"
while true
do
echo -n "Enter yes or no: "
read x
case "$x" in
y | yes ) return 0;;
n | no ) return 1;;
* ) echo "Answer yes or no"
esac
done
}

echo "Original parameters are $*"

if yes_or_no "$1"
then
echo "Hi $1, nice name"
else
echo "Never mind"

上面的源文件编译后执行得出这样的结果的,为什么?身边没人学这个,自己单挑,真是辛苦


lucky@lucky-desktop:~/linux程序设计/chapter02$ chmod +x my_name
lucky@lucky-desktop:~/linux程序设计/chapter02$ ./my_name
bash: ./my_name:/bin/sh^M:损坏的解释器: No such file or directory
lucky@lucky-desktop:~/linux程序设计/chapter02$
头像
yaoms
帖子: 4952
注册时间: 2007-10-19 14:51
来自: 深圳

#3

帖子 yaoms » 2008-04-07 16:51

你的shell脚本里肯定有 ^M 字符。
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
头像
percy
帖子: 508
注册时间: 2006-09-10 8:19
系统: Gentoo/Mac OS X
来自: Shanghai,China
联系:

#4

帖子 percy » 2008-04-07 20:27

测试了一下第一个,没问题啊

代码: 全选

 ./hello.sh 
Hello
The program ./hello.sh is now running
The second parameter was 
The first parameter was 
The parameter list was 
The user's home directory is /home/pjq
Please enter a new greeting
hello
hello
The script is now complete
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

#5

帖子 BigSnake.NET » 2008-04-07 20:30

可能是在Windows下编辑的
行结束符就有了^M
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
percy
帖子: 508
注册时间: 2006-09-10 8:19
系统: Gentoo/Mac OS X
来自: Shanghai,China
联系:

#6

帖子 percy » 2008-04-07 20:31

测试了第二个,在最后加上fi
再测试没问题


代码: 全选

./hello2.sh pjq
Original parameters are pjq
Is your name pjq ?
Enter yes or no: yes
Hi pjq, nice name
muyuyuzhong
帖子: 5
注册时间: 2007-10-10 15:57

#7

帖子 muyuyuzhong » 2008-04-08 14:01

yaoms 写了:你的shell脚本里肯定有 ^M 字符。
我用GEDIT打开过后在VIM里才看到^M,怪了.把^M删掉后就一切正常了.谢谢了!
头像
yang119345
帖子: 570
注册时间: 2005-06-19 14:22
来自: 上海
联系:

#8

帖子 yang119345 » 2008-04-13 15:16

dos2unix处理下
头像
Jianying
帖子: 70
注册时间: 2007-05-06 23:35
联系:

#9

帖子 Jianying » 2008-05-08 11:07

我也出现了楼主说的第一个问题。

用gedit打开之后没看到^M,关了之后在vi里也没看到.

我是直接在Ubuntu7.04里弄得。

ps:这个是<Beginning linux programming>书上的例子吧,hehe,我也是独学.遇到问题有时候挺郁闷。
muyuyuzhong 写了:
yaoms 写了:你的shell脚本里肯定有 ^M 字符。
我用GEDIT打开过后在VIM里才看到^M,怪了.把^M删掉后就一切正常了.谢谢了!
CPU AMD Athlon 64 X2 3600+
主板 升技AN52
内存 DDR2 667 1GB
显卡 小影霸 Nvidia GeForce 7300 GT 256M
硬盘 ST380021A 80GB
OS Ubuntu 7.04

#I believe I can fly!
头像
Jianying
帖子: 70
注册时间: 2007-05-06 23:35
联系:

#10

帖子 Jianying » 2008-05-08 11:14

刚刚找到原因了,第一行应该是
#!/bin/sh
我把它写成
#!bin/sh
了,漏了一个/
寒...

Jianying 写了:我也出现了楼主说的第一个问题。

用gedit打开之后没看到^M,关了之后在vi里也没看到.

我是直接在Ubuntu7.04里弄得。

ps:这个是<Beginning linux programming>书上的例子吧,hehe,我也是独学.遇到问题有时候挺郁闷。
muyuyuzhong 写了:
yaoms 写了:你的shell脚本里肯定有 ^M 字符。
我用GEDIT打开过后在VIM里才看到^M,怪了.把^M删掉后就一切正常了.谢谢了!
CPU AMD Athlon 64 X2 3600+
主板 升技AN52
内存 DDR2 667 1GB
显卡 小影霸 Nvidia GeForce 7300 GT 256M
硬盘 ST380021A 80GB
OS Ubuntu 7.04

#I believe I can fly!
回复