2010-05-30 77 views
3

我在写的Solaris 10 bash脚本下面的代码片段:如何在IF片段中设置默认值?

printf "port(389)=" 
read PORT 
    if [[ $PORT == "" ]]; then 
    PORT=389 
    fi 

我想获得的是,如果用户点击回车键时,该端口应设置为389 上面的代码片断似乎没有工作。

有什么建议吗?

+0

你能更具体的不是“不工作”? – 2010-05-30 01:50:49

+0

在这里可以正常工作。你做错了什么。 – 2010-05-30 01:54:21

回答

0

这并不完全符合您的要求,但Solaris有一组这样的工具。

PORT=`/usr/bin/ckint -d 389 -p 'port(389)=' -h 'Enter a port number'` 

看看其他的在/ usr/bin中/ CK *实用程序提示其他类型的数据,包括像文件或用户名的用户。

+0

这实际上是我想要的。非常感谢你。 – kuti 2010-06-03 17:23:00

1

这提示用户输入,如果输入是通过自身按下时,port值设置到“389”默认:

read -rp "port(389)=" port 
port="${port:-389}" 
+0

我无法粘贴这里的漏洞代码,因为它是处理为Directory Server创建证书的更大脚本的一部分。但是我使用Directory Server的“certutil”根据“组织”,“城市”,“国家”等问题接受用户输入。端口就是其中之一。 用于以下方式: $ DSBIN/certutil -d $ BASE_DIR /'主机名'/别名-P slapd- -x -S -n $ NAME -s cn = $ CN,cn = $ PORT,st = $ STATE ,C = $ COUNTRY,L =“$ CITY”-t CTu,u,u -v $ MONTH 与我的原始if语句,系统抛出一个“错误的数据库”错误,如果一个或多个条目无效 – kuti 2010-05-30 02:21:17

+0

因为某些原因,你的代码段没有任何问题。 – kuti 2010-05-30 02:22:13

+0

实际上,我的代码片段和你的片段功能本质上是完全一样的(一个例外是我的''阅读'的'-r'选项)。你可以尝试在你的代码段之后放置一个'set -x'和一个'set + x',这会导致问题。这将导致显示跟踪,其中显示可变扩展。它可能有助于追踪问题。 – 2010-05-30 03:18:47

0

如果传递-eread那么你可以使用-i来指定提示的初始值。

+0

'read'的'-i'选项在Bash 4中是新的。 – 2010-05-30 02:19:33

0

如果用户输入什么然后$PORT被替换为空 - 为使这项工作与原来的Bourne shell古老的约定是:

if [ "x$PORT" == "x" ]; then 

虽然更现代的炮弹(即实际的庆典,而不能承载Solaris 10/bin/sh的是 一个古老的Bourne shell)应该能够应付:

if [[ "$PORT" == "" ]]; then 

甚至

if [[ -z "$PORT" ]]; then 
0

只有外壳 另一种方式 - 尽量参数替换:

read port 
port=${port:-389}