2014-02-25 39 views
4

尋找一種方法來設置一個變量,在bash一行程序設置的變量,這是一個腳本,如:在一個班輪bash腳本

export class={read -p "What Is Your Profession?" a; case $a in "Theif") echo "Stealth" ; in "Cleric") echo "Heals?" ; "Monk") echo "Focus?" ; *) echo "invalid choice" a; esac} 

雖然我有問題運行這個命令而不把它設置爲一行,我已經嘗試了很多方法,並且我沒有得到任何結果。以上只是我眼中最清晰的佈局。我也試着VAR= ,

案件本身給了我一個

-jailshell: syntax error near unexpected token `(' 

,每當我有一個以上的情況下運行它。我知道這可能都混亂了。

+0

這裏有幾個問題。首先,你需要一個'='後面的單個字符串,大括號不是字符串分隔符。嘗試單引號,如'var ='long complex command''。接下來,你永遠不需要爲一個變量分配一個命令。你爲什麼做這個? –

回答

2

這裏是一個班輪你可以使用:

export class=`{ read -p "What Is Your Profession? " a; case $a in "Theif") echo "Stealth";; "Cleric") echo "Heals?";; "Monk") echo "Focus?";; *) echo "invalid choice" a;; esac; }` 

或更好的,你可以只是把這個函數內部:

function readclass() { read -p "What Is Your Profession? " a; case $a in "Theif") echo "Stealth";; "Cleric") echo "Heals?";; "Monk") echo "Focus?";; *) echo "invalid choice" a;; esac; } 

然後使用它:

export class=$(readclass) 
5

你需要用雙分號;;來區分case語句的子句,無論是一行還是一行紐約州。您還必須小心{ … },因爲它用於I/O重定向。此外,在命令開始時{}必須是令牌;在}之前{和分號(或與號或換行符)之後必須有一個空格(或換行符)。即使改變了,賦值也不會執行大括號之間的代碼。爲此,您可以使用命令替換:

export class=$(read -p "What Is Your Profession?" a; case $a in "Theif") echo "Stealth" ;; "Cleric") echo "Heals?" ;; "Monk") echo "Focus?" ;; *) echo "invalid choice $a";; esac) 

最後,您還沒有對「Thief」執行拼寫檢查。

+1

啊! 「Theif」+1! ')' –