LinuxSir.cn,穿越时空的Linuxsir!

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

无法看懂shell内容

[复制链接]
发表于 2010-6-2 12:18:13 | 显示全部楼层 |阅读模式
我有一个shell 作用是初始化密码的,但无法理解,请高人赐教。

#!/bin/sh
if [ x$1 = x ]; then
        exit
fi

expect -c"
spawn smbldap-passwd $1
expect {
\"New password:\" {
send \"pscsh123456\n\"
expect \"Retype new password:\"
send \"pscsh123456\n\"
}
}
interact
"
发表于 2010-6-2 15:54:01 | 显示全部楼层
#!/bin/sh                                               # 这是一个shell脚本,这个解释有点多余???

if [ x$1 = x ]; then                                 # 没有参数的话就退出执行
exit
fi

expect -c"                                             # expect是一个用来实现自动化的程序,用来和程序通信
spawn smbldap-passwd $1                 # 一个新的会话
expect {
\"New password:\" {                           # 会话输出New password:的时候
send \"pscsh123456\n\"                      # 发送pscsh123456和一个回车给会话
expect \"Retype new password:\"       # 同上
send \"pscsh123456\n\"
}
}
interact
"
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-3 16:56:55 | 显示全部楼层
谢谢你的回答。
你能在详细说一下 x$1 = x 的意思吗?
我网上和书上都没查到。谢谢了
回复 支持 反对

使用道具 举报

发表于 2010-6-3 23:28:26 | 显示全部楼层
Post by 81358458;2094236
谢谢你的回答。
你能在详细说一下 x$1 = x 的意思吗?
我网上和书上都没查到。谢谢了

检验 $1 是否空
似乎应该写成 [ $1 = "" ], 不过如果$1是空的话,就变成了 [ = "" ],shell会报错。写成 [ x$1 = x ] 就没问题了。
另外还可以写成 [ "$1" = "" ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-6-8 12:56:11 | 显示全部楼层
那$1这个变量的值是怎么获得的呢?
回复 支持 反对

使用道具 举报

发表于 2010-6-8 13:24:22 | 显示全部楼层
$1 is similar to argv[1] if you know C
回复 支持 反对

使用道具 举报

发表于 2010-6-8 14:07:06 | 显示全部楼层
Post by biinn;2094333
检验 $1 是否空
似乎应该写成 [ $1 = "" ], 不过如果$1是空的话,就变成了 [ = "" ],shell会报错。写成 [ x$1 = x ] 就没问题了。
另外还可以写成 [ "$1" = "" ]


同样的疑问,那个 x 是什么意思?
回复 支持 反对

使用道具 举报

发表于 2010-6-8 15:22:31 | 显示全部楼层
x就是字母x。
假如$1等于23,x$1 就是 x23。如果$1是空的,那x$1 就是 x。
其实最好还是给$1加上引号,要不如果$1等于ab cd,那x$1 就是 xab cd两串字符了,可能会报错。
回复 支持 反对

使用道具 举报

凿冰洞钓鱼的人 该用户已被删除
发表于 2010-6-14 10:08:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2010-6-27 18:24:43 | 显示全部楼层
shell脚本写完是要作为一个shell命令来执行的,而命令常常会带有各种不同的参数。
$1是命令后面带的第一个参数,$2是命令后面带的第二个参数,其他以此类推。$表示引用命令行参数,后面的数字表示参数的顺序,从1开始计数
if [ x$1 = x ]意思就是说“如果 ‘字母x 加上 命令行第一个参数 还是 字母x’”,这实际上就是判断命令执行的时候是否带有命令行参数,x只是随便选的一个字母,你用abcdXYZ哪个都行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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