2017-01-03 70 views
0

我已經得到了我應通過一定的價值非交互如何以非交互方式將值傳遞給PS3提示?

交互式腳本打印使用「的選擇列表」交互式腳本「PS3」變量

PS3='Select the platform to use:' 

前輸出如下所示

echo 'Linux Build System initializing' 

1) Linux PC based 
2) ABC 1 
3) XYZ 4 

Select the platform to use: <waits for user input> 

我想將值傳遞給PS3提示符。任何幫助或建議?

回答

1

可以使用select內置實現這一目標,

PS3='Select the platform to use: ' 
select choice in $(seq 3) 
do 
    [[ $choice -eq 1 ]] && echo "Linux PC based" 
    [[ $choice -eq 2 ]] && echo "ABC 1" 
    [[ $choice -eq 3 ]] && echo "XYZ 4" 
    break 
done 

確保export~/.bashrcPS3價值,使其永久化。另外值得加點,select不是POSIX兼容選項,可能無法跨平臺移植。

您可以在單一腳本中調用此方法並在另一個腳本中調用的方式是將上述代碼包裝在函數中,並將其嵌入到另一個文件中。在原始腳本上,例如說script1.sh,在調用腳本函數包裝爲

#!/bin/bash 

function optselect() { 
    arg1=$1 
    select arg1 in $(seq 3) 
    do 
     [[ $arg1 -eq 1 ]] && echo "Linux PC based" 
     [[ $arg1 -eq 2 ]] && echo "ABC 1" 
     [[ $arg1 -eq 3 ]] && echo "XYZ 4"  
     break 
    done 
} 

然後例如說script2.sh

#!/bin/bash 

source ./script1.sh 
optselect 1   # Calling the script with argument '1' 
+0

感謝您的幫助。但是,我需要從另一個腳本調用此腳本。我需要從調用腳本 –

+0

@SathishKumar將值傳遞給'SELECT':將其作爲參數傳遞給其他腳本,並使用'$(seq 3)'中的$ select $ 1,希望你能做到這一點 – Inian

+0

謝謝。讓我試試 –

0

使用case語句select語句中。 case語句將使用continue返回select語句的頂部,如果進行了無效選擇。否則,使用breakcase語句退出select循環。

PS3='Select the platform to use: ' 
select choice in "Linux PC based" "ABC 1" "XYZ 4" 
do 
    case $choice in 
     1) echo "You chose Linux" ;; 
     2) echo "You chose ABC" ;; 
     3) echo "You chose XYZ" ;; 
     *) continue 
    esac 
    break 
done 
相關問題