十三、Shell之select語句
阿新 • • 發佈:2020-10-14
一、select介紹
select迴圈語句的主要作用可能就是建立選單,在執行帶select迴圈語句的指令碼時,輸出會按照數字順序的列表顯示一個選單項,並顯示提示符(預設是#?),同時等待使用者輸入數字進行選擇。
二、select語法格式
select 變數名 [in 選單取值列表] do 命令集 done 在這種select迴圈語句的語法中,在執行指令碼後,select關鍵字後面會有一個“變數名”,變數名依次獲取in關鍵字後面的變數取值列表內容(以空格分隔),每次僅取一個,然後進入迴圈(do和done之間),執行迴圈內的所有指令,當執行到done時結束返回,之後,“變數名”再繼續取變數列表裡的下一個變數值,繼續執行迴圈內的所有指令(do和done之間的指令),當執行到done時結束返回,以此類推,直到取完最後一個變數列表裡的值並進入迴圈執行到done結束為止。與for迴圈不同的是,select迴圈執行後會出現選單項等待使用者選擇(不會自動迴圈所有變數列表),而使用者輸入的只能是選單項前面的數字序號,每輸入一次對應的序號就會執行一次迴圈,直到變數後面對應列表取完為止。
方案1:直接使用列表字串
#! /bin/bash select name in ywx kaka king do echo $name done [root@node1 scripts]# sh select1.sh 1) ywx 2) kaka 3) king #? 1 ywx #? 2 kaka #? 3 king #?
方案2:採用陣列做變數列表
#! /bin/bash array=(ywx kaka king) select name in "${array[@]}" do echo$name done [root@node1 scripts]# sh select1.sh 1) ywx 2) kaka 3) king #? 1 ywx #? 2 kaka #? 3 king #?
方案3:把命令結果作為變數列表
[root@node1 scripts]# ls /tmp 501.html 502.html 503.html king1.bin king2.bin king3.bin king4.bin king5.bin king6.bin [root@node1 scripts]#cat /scripts/select1.sh #! /bin/bashselect filename in $(ls /tmp) do echo $filename done [root@node1 scripts]# sh select1.sh 1) 501.html 3) 503.html 5) king2.bin 7) king4.bin 9) king6.bin 2) 502.html 4) king1.bin 6) king3.bin 8) king5.bin #? 1 501.html #? 2 502.html #? 3 503.html #?
[root@node1 scripts]# cat select1.sh #! /bin/bash PS3="please select a num from menu:" #<== PS3就是控制select迴圈的提示符, select filename in $(ls /tmp) do echo -e "I guess you selected the menu is:\n $REPLY) $filename" #<==REPLY變數就是選單項對應的數字。 done [root@node1 scripts]# sh select1.sh 1) 501.html 3) 503.html 5) king2.bin 7) king4.bin 9) king6.bin 2) 502.html 4) king1.bin 6) king3.bin 8) king5.bin please select a num from menu:1 I guess you selected the menu is: 1) 501.html please select a num from menu:2 I guess you selected the menu is: 2) 502.html please select a num from menu: