LinuxSir.cn,穿越时空的Linuxsir!

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

请问linux下的shell程序跟unix(BSD)下的是一样嘛

[复制链接]
发表于 2003-8-15 20:27:57 | 显示全部楼层 |阅读模式
不知道为什么,有许多shell程序在我的bsd下都运行通不过,但是到在linux下却可以通过,不知道为什么,
linux下使用bash, FreeBSD下使用csh ,bash,都不能通过,
多谢
发表于 2003-8-15 20:53:23 | 显示全部楼层
当然是一样的。

通不过的原因,应该是脚本文件的第一行的路径问题,一般来说如果脚本的执行程序如果是/bin/sh 的话,都能通过,因为所有的unix类操作系统最基本的shell:sh的路径都是/bin/sh。

现在大多数的linux的缺省shell是bash,所以有不少linux的脚本的执行shell是bash,而在绝大多数的linux中bash的路径是 /bin/bash. 所以这些脚本的第一行写的bash的路径就是 /bin/bash. 而Freebsd的bash安装的缺省路径是 /usr/local/bin/bash, 所以因为脚本找不到shell程序解释脚本,就无法运行了,你修改一下脚本的第一行的bash的路径就可以了。

在linux下基本没有用 csh解释的脚本。而且脚本的运行和你当前运行的shell无关,只与其第一行定义的脚本shell有关。
 楼主| 发表于 2003-8-15 22:02:39 | 显示全部楼层
不是shell的问题,这个我已经特别注意了,但还是不行,你看这个,我在MDK下可以通过,但是在freebsd下怎么也不能通过
#!/bin/sh
#要求用户必须输入四个数字
while true
do
echo -n "请输入四个数字:"
read num
len=${#num}
#变量len存放输入的长度
if [[ $num != [0-9][0-9][0-9][0-9] || ${#num} != 4 ]]
then
#进行检测,如果你输入有非数字字符,或者长度不等于四个,便提示错误信息
echo "错误! 重新输入"
else
echo "输入正确,退出!"
exit 0
fi
done
发表于 2003-8-15 22:58:55 | 显示全部楼层
上述脚本是在KSH下写的,你可以稍稍修改一下!
发表于 2003-8-15 23:04:46 | 显示全部楼层
怎么改?
发表于 2003-8-15 23:34:01 | 显示全部楼层
问题应该是出在bsd的test也就是“[”上, 当 [ expression 的时候, 后面出现的[ ]不把它当正则 表达式看。

也就是说如果你输入 [0-9][0-9][0-9][0-9] 并且取消长度的判断时,反而会显示输入正确
发表于 2003-8-15 23:50:03 | 显示全部楼层
最初由 DimAngel 发表
问题应该是出在bsd的test也就是“[”上, 当 [ expression 的时候, 后面出现的[ ]不把它当正则 表达式看。

也就是说如果你输入 [0-9][0-9][0-9][0-9] 并且取消长度的判断时,反而会显示输入正确


不同的shell都有自己的一套"理论",不能照搬的说;)
 楼主| 发表于 2003-8-16 20:23:52 | 显示全部楼层
晕~~~~~
今天ports安装了一下ksh93竟然可以运行了,搞不懂是怎么回事,各种shell怎么不能兼容,唉
发表于 2003-8-16 20:51:48 | 显示全部楼层
呵呵,是比较奇怪,没怎么接触过ksh,看来shell脚本直接的兼容性,呵呵,不好说。

觉得系统管理员还是选择perl 或python 作为脚本语言比较好。
发表于 2003-8-16 20:56:38 | 显示全部楼层
python比shell难吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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