
主題: [問題]Shell script 自動插入資料的一些問題 [打印本頁]
發表人:
nashsai 時間: 2012-8-23 05:19 AM 主題: [問題]Shell script 自動插入資料的一些問題
各位前輩大家好,有些問題想請教各位
我有個文件 /usr/local/sbin/test 內容是一個選單,裡面很多選項 選項會去跑對應的
script
內容
#!/bin/sh
#
#
echo "MAIN MENU"
echo "0. exit"
echo "1. aaa"
echo "2. bbb"
echo "3. ccc"
read -p "please enter option" opt
case $opt in
0) exit ;;
1) /usr/local/sbin/aaa ;;
2) /usr/local/sbin/bbb ;;
3) /usr/local/sbin/ccc ;;
*) echo "$opt is a invalid option, please [enter] key continue"
/usr/local/sbin/test ;;
esac
然後需要使用另外的文件 對test插入一些內容 具體方法我目前還沒想到
比方說 test1 這個script,
read image // 請輸入一個script名稱 假設我輸入ddd
之後會在test這個文件 插入
echo "4. ddd"
4) /usr/local/sbin/ddd ;;
----------------------------------------------------------------------
目前卡在兩個地方
1.我不知道如何在特定的地方插入資料 如上面 我要怎麼判別 讓資料插入在我要的位置
例如 echo "4. ddd"就插在 echo "3. ccc"的下面...
4) /usr/local/sbin/ddd ;; 就插在 3) /usr/local/sbin/ccc ;; 的下面..
2.因為有可能會新增很多筆資料 要如何讓前面的數字有規律 假設現在有 0 1 2 3 這四
個選項 我現在新增的數字就是4,下次新增就是5..
打的有點亂,不知道各位前輩看得懂嗎..
感謝各位收看
發表人:
ericshliao 時間: 2012-8-23 06:58 AM
以我shell script粗淺的瞭解:
1.
你應該不是想以test1 去修改 test 的檔案內容,而只是想讓銀幕上test1輸出的選單能跟在test輸出的選單的下方。但我不是很確定你的目的。
2.
選單編號可以用一個變數來紀錄,每次加一,不必寫死在shell script裡。
發表人:
watchme 時間: 2012-8-23 10:22 AM
利用 include 檔案來配置輸入選項跟執行指令可能會是比較好的方案,甚至可以在執行期改變選項跟執行指令的內容。
你需要先學習的幾個關鍵
1. include 的用法
2. for aaa in aaas 的用法
3. $IFS 的用法
4. 最基本的 if []; then 還不會就得打屁股了
5. 用 while 迴圈把他包成無窮迴圈等到 exit 為止應該也是很基本的
我想會這些應該就夠寫出這個功能了,只是被 include 盡來的檔案還是要手動維護,雖然也能自動變更,但是那是另一個議題了,而且要先有規則才有可能。
中午抽空寫了一個,顧慮到執行指令有可能要有空白帶參數,所以用 read 逐行讀取以及 eval 執行來實做 ,參考看看:
檔案 mycmd (最後請務必留一行空行,這是 linux shell script 的其中一個罩門)
引用:
1:clear
2:/etc/init.d/squid start
3:/etc/init.d/squid stop
檔案 mytest.sh
引用:
EXITFLAG=0
CMDS=""
while [ "$EXITFLAG" == "0" ]
do
echo "Main Menu"
echo "0:Exit"
while read line
do
echo $line
IFS_SAVE="$IFS"
IFS=":"
set - $(echo "$line")
eval "CMD$1=\"$2\""
CMDS="$CMDS CMD$1"
IFS="$IFS_SAVE"
done < "mycmd"
read -p "please enter option:" opt
if [ "$opt" == "0" ]; then
echo "Bye Bye"
EXITFLAG=1
else
eval "CMD=\$CMD$opt"
if [ "" == "$CMD" ]; then
echo "$opt is a invalid option!"
echo ""
else
eval $CMD
fi
for CMD in CMDS
do
eval "CMD$opt=\"\""
done
CMDS=""
fi
done
[watchme 在 2012-8-23 01:40 PM 作了最後編輯]
發表人:
innova 時間: 2012-9-13 07:11 PM
你是想 自動生成 menu 還是怎樣?
#!/bin/sh
_FILE_=xxx
l=`wc -l < $_FILE_`
x=1
while [ "$x" -le "$l" ] ; do
read y
echo $x): $y
x=`expr $x + 1`
done < $_FILE_
發表人:
splin 時間: 2012-12-14 07:55 PM
如果有一堆檔案,想要自動生成的選項,可以使用
Select , do , done 的語法。
發表人:
innova 時間: 2012-12-19 03:25 PM
不太了解耶?
能簡單舉個例 說明 select的用法嗎??
thanks.
歡迎光臨 TWed2k (http://twed2k.org/) |
Powered by Discuz! 4.1.0 |