高手看过来

sh/bash/dash/ksh/zsh等Shell脚本
yjgyjg1997
帖子: 10
注册时间: 2006-10-25 20:42

高手看过来

#1

帖子 yjgyjg1997 » 2006-11-22 15:47

#!/bin/bash
if [ $1="yes" ] ; then
clear
echo $1
echo "Telephone Directory"
echo " "
echo "1.Find Listing:"
echo "2.Add Listing"
echo "3.Modify Listing"
echo "4.Print Listing"
echo "Q.quit"
echo " "
read selection
case $selection in
"1")
findlisting
;;
"2")
addlisting
;;
"3")
modifylisting
;;
"4")
printlisting
;;
"Q")
exit 0
esac
else
echo "wrong choice"
fi
****************************************************
为什么,第二行参数判断不起作用?
不管有没有参数,shell都能运行?
aBiNg
帖子: 1331
注册时间: 2006-07-09 12:22
来自: 南京

#2

帖子 aBiNg » 2006-11-22 19:33

if [ $1 = "yes" ] ; then
空格:包括"[ ]"前后以及"="前后。。。
上次由 aBiNg 在 2006-11-23 9:44,总共编辑 1 次。
yjgyjg1997
帖子: 10
注册时间: 2006-10-25 20:42

#3

帖子 yjgyjg1997 » 2006-11-22 21:44

二楼的大虾:你好。
我确定[]前后都有空格,只是在帖子上看起来不太明显。
xdsnet
帖子: 80
注册时间: 2006-02-28 15:44

#4

帖子 xdsnet » 2006-11-23 16:54

我觉得是楼主的程序逻辑有问题。
iamdxlwh
帖子: 26
注册时间: 2006-02-07 15:05

#5

帖子 iamdxlwh » 2007-05-06 22:52

我试了一下,=前后要加空格,可以运行。无参数刚出错。
激水之疾,至于漂石者,势也;鸷鸟之疾,至于毁折者,节也。故善战者,其势险,其节短。
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

#6

帖子 5451vs5451 » 2007-05-06 23:29

if [ $1="yes" ]; then 等价于 if [ "$1=yes" ]; then
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

#7

帖子 stlxv » 2007-05-07 13:41

:shock:
PHP是最好的语言!不服来战!
wkt
帖子: 849
注册时间: 2006-09-07 22:51
联系:

#8

帖子 wkt » 2007-05-08 16:02

if [ $1 == "yes" ] 建议这样写 if [ "x$1" == "xyes" ]
没有参数就不会报错了
检验是否有参数可以
if [ "x$1" == "x" ];then
echo "no arguements"
exit 1
else
echo "haha $@"
fi
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

#9

帖子 5451vs5451 » 2007-05-08 23:27

wkt 写了:if [ $1 == "yes" ] 建议这样写 if [ "x$1" == "xyes" ]
没有参数就不会报错了
检验是否有参数可以
if [ "x$1" == "x" ];then
echo "no arguements"
exit 1
else
echo "haha $@"
fi
看到过这种写法,但一直不明白为什么要加那个x。这样写也不会报错啊:

代码: 全选

if [ "$1" == "yes" ] 
wkt
帖子: 849
注册时间: 2006-09-07 22:51
联系:

#10

帖子 wkt » 2007-05-09 9:17

5451vs5451 写了:
wkt 写了:if [ $1 == "yes" ] 建议这样写 if [ "x$1" == "xyes" ]
没有参数就不会报错了
检验是否有参数可以
if [ "x$1" == "x" ];then
echo "no arguements"
exit 1
else
echo "haha $@"
fi
看到过这种写法,但一直不明白为什么要加那个x。这样写也不会报错啊:

代码: 全选

if [ "$1" == "yes" ] 
用bash 不会
但是sh会

代码: 全选

wkt@ubuntu:~
-0-$ cat /tmp/bash 
if [ "$1" == "yes" ];then 
echo "hhh"
fi
wkt@ubuntu:~
-0-$ sh /tmp/bash 
[: 3: ==: unexpected operator
wkt@ubuntu:~
-0-$ bash /tmp/bash 
wkt@ubuntu:~
-0-$ 
wkt
帖子: 849
注册时间: 2006-09-07 22:51
联系:

#11

帖子 wkt » 2007-05-09 9:17

5451vs5451 写了:
wkt 写了:if [ $1 == "yes" ] 建议这样写 if [ "x$1" == "xyes" ]
没有参数就不会报错了
检验是否有参数可以
if [ "x$1" == "x" ];then
echo "no arguements"
exit 1
else
echo "haha $@"
fi
看到过这种写法,但一直不明白为什么要加那个x。这样写也不会报错啊:

代码: 全选

if [ "$1" == "yes" ] 
用bash 不会
但是sh会

代码: 全选

wkt@ubuntu:~
-0-$ cat /tmp/bash 
if [ "$1" == "yes" ];then 
echo "hhh"
fi
wkt@ubuntu:~
-0-$ sh /tmp/bash 
[: 3: ==: unexpected operator
wkt@ubuntu:~
-0-$ bash /tmp/bash 
wkt@ubuntu:~
-0-$ 
wkt
帖子: 849
注册时间: 2006-09-07 22:51
联系:

#12

帖子 wkt » 2007-05-09 9:18

5451vs5451 写了:
wkt 写了:if [ $1 == "yes" ] 建议这样写 if [ "x$1" == "xyes" ]
没有参数就不会报错了
检验是否有参数可以
if [ "x$1" == "x" ];then
echo "no arguements"
exit 1
else
echo "haha $@"
fi
看到过这种写法,但一直不明白为什么要加那个x。这样写也不会报错啊:

代码: 全选

if [ "$1" == "yes" ] 
用bash 不会
但是sh会

代码: 全选

wkt@ubuntu:~
-0-$ cat /tmp/bash 
if [ "$1" == "yes" ];then 
echo "hhh"
fi
wkt@ubuntu:~
-0-$ sh /tmp/bash 
[: 3: ==: unexpected operator
wkt@ubuntu:~
-0-$ bash /tmp/bash 
wkt@ubuntu:~
-0-$ 
csbde
帖子: 27
注册时间: 2006-10-20 12:35

#13

帖子 csbde » 2007-05-10 23:44

$1后少了空格
Robinho
帖子: 22
注册时间: 2007-03-01 15:22
来自: 广州

#14

帖子 Robinho » 2007-05-12 9:00

也可以使用双圆括号结构
if (( $1 == "yes" ))
头像
5451vs5451
帖子: 345
注册时间: 2006-07-14 18:56
来自: Apple Valley, Planet Tux, Linux System

#15

帖子 5451vs5451 » 2007-05-12 19:12

Robinho 写了:也可以使用双圆括号结构
if (( $1 == "yes" ))
这么写是不对的,请看下面的例子:

代码: 全选

$  a=no; if (( a == "no" )); then echo yes; else echo no; fi
yes
$  a=no; if (( a == "yes" )); then echo yes; else echo no; fi
yes
$  a=no; if (( a == 0 )); then echo yes; else echo no; fi
yes
$  a=no; if (( a == 1 )); then echo yes; else echo no; fi
no
回复