学习shell script中的[]判断式使用疑问 (已解决)

sh/bash/dash/ksh/zsh等Shell脚本
回复
zhai.j
帖子: 55
注册时间: 2009-10-30 19:16

学习shell script中的[]判断式使用疑问 (已解决)

#1

帖子 zhai.j » 2011-11-07 23:07

在学习shell script

以下是代码直接从鸟哥网站里复制过来的
原网址 http://vbird.dic.ksu.edu.tw/linux_basic ... php#script

代码: 全选

#!/bin/bash
# Program:
# 	This program shows the user's choice
# History:
# 2005/08/25	VBird	First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

read -p "Please input (Y/N): " yn
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0
[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0
echo "I don't know what your choice is" && exit 0

sh sh07.sh
Please input (Y/N): d
[: 10: d: unexpected operator
[: 11: d: unexpected operator
I don't know what your choice is

以上是我运行的結果,好吧。第10行和11行有问题,但具体是什么问题啊?
:em20
上次由 zhai.j 在 2011-11-15 9:26,总共编辑 1 次。
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 学习shell script中的[]判断式使用疑问

#2

帖子 naturalaw » 2011-11-07 23:36

我测试过你的d.没有问题.我是这样执行的.

代码: 全选

chmod +x f.sh
./f.sh
自己调试一下啊
set -x
....
set +x
  • The eternal law
rodent
帖子: 4
注册时间: 2011-11-07 10:55

Re: 学习shell script中的[]判断式使用疑问

#3

帖子 rodent » 2011-11-08 13:50

判断字符相等使用=吧,不是==
zhai.j
帖子: 55
注册时间: 2009-10-30 19:16

Re: 学习shell script中的[]判断式使用疑问

#4

帖子 zhai.j » 2011-11-08 15:14

naturalaw 写了:我测试过你的d.没有问题.我是这样执行的.

代码: 全选

chmod +x f.sh
./f.sh
自己调试一下啊
set -x
....
set +x
更改了权限./xxx.sh运行 就可以。

zhai@zhai-desktop:~/scripts$ chmod +x sh07.sh ; ./sh07.sh
+ chmod +x sh07.sh
+ ./sh07.sh
Please input (Y/N): d
I don't know what your choice is


但用sh xxx.sh运行就出问题
用bash xxx.sh运行没有问题

-rw-r--r-- 1 zhai zhai 407 2011-11-07 22:59 sh07.sh
zhai@zhai-desktop:~/scripts$ sh sh07.sh
+ sh sh07.sh
Please input (Y/N): d
[: 10: d: unexpected operator
[: 11: d: unexpected operator
I don't know what your choice is
zhai@zhai-desktop:~/scripts$ bash sh07.sh
+ bash sh07.sh
Please input (Y/N): d
I don't know what your choice is
zhai@zhai-desktop:~/scripts$ bash sh07.sh
+ bash sh07.sh
Please input (Y/N): y
OK, continue
zhai.j
帖子: 55
注册时间: 2009-10-30 19:16

Re: 学习shell script中的[]判断式使用疑问

#5

帖子 zhai.j » 2011-11-08 15:15

rodent 写了:判断字符相等使用=吧,不是==

以下是鸟哥的话。。

其实在 bash 当中使用一个等号与两个等号的结果是一样的! 不过在一般惯用程序的写法中,一个等号代表『变量的配置』,两个等号则是代表『逻辑判断 (是否之意)』。 由於我们在中括号内重点在於『判断』而非『配置变量』,因此鸟哥建议您还是使用两个等号较佳!
rodent
帖子: 4
注册时间: 2011-11-07 10:55

Re: 学习shell script中的[]判断式使用疑问

#6

帖子 rodent » 2011-11-08 17:51

zhai.j 写了:
rodent 写了:判断字符相等使用=吧,不是==

以下是鸟哥的话。。

其实在 bash 当中使用一个等号与两个等号的结果是一样的! 不过在一般惯用程序的写法中,一个等号代表『变量的配置』,两个等号则是代表『逻辑判断 (是否之意)』。 由於我们在中括号内重点在於『判断』而非『配置变量』,因此鸟哥建议您还是使用两个等号较佳!
......你用的又不是bash,这不明知故问的么?
看看你系统的sh连接到哪个shell
头像
fanhe
帖子: 2357
注册时间: 2007-03-24 23:45

Re: 学习shell script中的[]判断式使用疑问

#7

帖子 fanhe » 2011-11-09 0:29

理论上, 脚本前面的是 #!/bin/bash 就没问题的
检查下装 bash 了没
头像
naturalaw
帖子: 1360
注册时间: 2011-09-06 22:04

Re: 学习shell script中的[]判断式使用疑问

#8

帖子 naturalaw » 2011-11-09 13:17

ubuntu sh默認指向的似乎是dash
  • The eternal law
zhai.j
帖子: 55
注册时间: 2009-10-30 19:16

Re: 学习shell script中的[]判断式使用疑问

#9

帖子 zhai.j » 2011-11-13 20:54

rodent 写了:
zhai.j 写了:
rodent 写了:判断字符相等使用=吧,不是==

以下是鸟哥的话。。

其实在 bash 当中使用一个等号与两个等号的结果是一样的! 不过在一般惯用程序的写法中,一个等号代表『变量的配置』,两个等号则是代表『逻辑判断 (是否之意)』。 由於我们在中括号内重点在於『判断』而非『配置变量』,因此鸟哥建议您还是使用两个等号较佳!
......你用的又不是bash,这不明知故问的么?
看看你系统的sh连接到哪个shell

当然是bash啊。而且ubuntu默认也是 bash的。。
清墨_J
帖子: 1
注册时间: 2011-08-08 14:34

Re: 学习shell script中的[]判断式使用疑问

#10

帖子 清墨_J » 2011-11-13 22:06

为了加快启动,Ubuntu使用的ash,所以在shell中直接用 sh *.sh 有时候会出现语法错误。因为ash只是bash的一个简化版

用chmod u+x sh07.sh
或者 chmod 755 sh07.sh
增加sh脚本的执行权限。
然后./sh07.sh来执行该脚本
zhai.j
帖子: 55
注册时间: 2009-10-30 19:16

Re: 学习shell script中的[]判断式使用疑问

#11

帖子 zhai.j » 2011-11-15 9:22

type sh
sh 已经被散列 (/bin/sh)
zhai@zhai-desktop:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2011-06-15 08:13 /bin/sh -> dash


一直没详细看dash与bash。
:em06


网上搜索到的。

由于shell的更换,致使很多脚本出错,毕竟现在的很多脚本不是100%POSIX兼容。

在wiki里面也说到,如何将默认的shell改回bash,方法就是

在终端执行 sudo dpkg-reconfigure dash

然后选择 no。
回复