我在寫的Solaris 10 bash腳本下面的代碼片段:如何在IF片段中設置默認值?
printf "port(389)="
read PORT
if [[ $PORT == "" ]]; then
PORT=389
fi
我想獲得的是,如果用戶點擊回車鍵時,該端口應設置爲389 上面的代碼片斷似乎沒有工作。
有什麼建議嗎?
我在寫的Solaris 10 bash腳本下面的代碼片段:如何在IF片段中設置默認值?
printf "port(389)="
read PORT
if [[ $PORT == "" ]]; then
PORT=389
fi
我想獲得的是,如果用戶點擊回車鍵時,該端口應設置爲389 上面的代碼片斷似乎沒有工作。
有什麼建議嗎?
這並不完全符合您的要求,但Solaris有一組這樣的工具。
PORT=`/usr/bin/ckint -d 389 -p 'port(389)=' -h 'Enter a port number'`
看看其他的在/ usr/bin中/ CK *實用程序提示其他類型的數據,包括像文件或用戶名的用戶。
這實際上是我想要的。非常感謝你。 – kuti 2010-06-03 17:23:00
這提示用戶輸入,如果輸入是通過自身按下時,port
值設置到「389」默認:
read -rp "port(389)=" port
port="${port:-389}"
我無法粘貼這裏的漏洞代碼,因爲它是處理爲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
因爲某些原因,你的代碼段沒有任何問題。 – kuti 2010-05-30 02:22:13
實際上,我的代碼片段和你的片段功能本質上是完全一樣的(一個例外是我的''閱讀'的'-r'選項)。你可以嘗試在你的代碼段之後放置一個'set -x'和一個'set + x',這會導致問題。這將導致顯示跟蹤,其中顯示可變擴展。它可能有助於追蹤問題。 – 2010-05-30 03:18:47
如果傳遞-e
到read
那麼你可以使用-i
來指定提示的初始值。
'read'的'-i'選項在Bash 4中是新的。 – 2010-05-30 02:19:33
如果用戶輸入什麼然後$PORT
被替換爲空 - 爲使這項工作與原來的Bourne shell古老的約定是:
if [ "x$PORT" == "x" ]; then
雖然更現代的炮彈(即實際的慶典,而不能承載Solaris 10/bin/sh的是 一個古老的Bourne shell)應該能夠應付:
if [[ "$PORT" == "" ]]; then
甚至
if [[ -z "$PORT" ]]; then
只有外殼 另一種方式 - 儘量參數替換:
read port
port=${port:-389}
你能更具體的不是「不工作」? – 2010-05-30 01:50:49
在這裏可以正常工作。你做錯了什麼。 – 2010-05-30 01:54:21