2010-05-30 67 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}