作者 主題: Shell script 自動插入資料的一些問題  (閱讀 3494 次)

0 會員 與 1 訪客 正在閱讀本文。

nashsai

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
各位前輩大家好,小弟有些問題想請教各位,希望各位能幫助小弟解惑。

小弟有個文件 /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..


打的有點亂,不知道各位前輩看得懂嗎..
感謝各位收看

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
Re: Shell script 自動插入資料的一些問題
« 回覆 #1 於: 2012-08-23 10:33 »
1) menu 選單寫在另一個檔, 內容如下:
exit
aaa
bbb
ccc

2) 安插就插在最後面

3)
i=0
cat menu |while read a; do
echo $i) $a
i=i+1   # <-- 請更正語法
done

hongbin

  • 憂鬱的高中生
  • ***
  • 文章數: 101
    • 檢視個人資料
Re: Shell script 自動插入資料的一些問題
« 回覆 #2 於: 2012-08-23 13:28 »
一個簡單的寫法供您參考
test1 的內容如下:

declare -i i
read -p "please inter script: " script
a=$(grep -B1 'read -p' test.sh|sed '1q'|awk '{print $2}'|sed 's/[".]//g')
i=$((++a))
b="echo \""$i." $script\""
c="$i) /usr/local/sbin/$script;;"
sed -i"" -e "/read -p/i$b" -e "/\*)/i$c" test.sh

以上內容並不包括依些檢查輸入的機制,例如輸入的script 檔名是否已經存在,
可能就需您再補充了....
« 上次編輯: 2012-08-23 16:32 由 hongbin »

dark

  • 俺是博士!
  • *****
  • 文章數: 1553
    • 檢視個人資料
Re: Shell script 自動插入資料的一些問題
« 回覆 #3 於: 2012-08-23 15:29 »
建 10 個 sh_0~9.sh
tt=/usr/local/sbin/testall
mkdir -p $tt
for((i=0;i<10;i++));do echo -e '#!'"/bin/bash\necho this is sh_"$i > $tt"/sh_"$i ;done

menu 列表執行 testall.sh
----------------------------------
dd=/usr/local/sbin/testall
i=1
ls -1t $dd | tac | while read x;do echo '[ '$i' ] ' $x ; ((i++)) ; done
echo '[ 0 ] quit'

read -p "input : " x
echo $dd'/'$(ls -1t $dd | tac | head -$x | tail -1) ' ... doing'
eval $dd'/'$(ls -1t $dd | tac | head -$x | tail -1)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17387
    • 檢視個人資料
    • http://www.study-area.org
Re: Shell script 自動插入資料的一些問題
« 回覆 #4 於: 2012-08-23 23:14 »
我的想法:

1,在最後一個 echo 後面用 #----insert 1 ----# 做一個 MARK1
      在最後一個 *) case 前面用 #----insert 2 ----# 做一個 MARK2
2,用 last_number=$(grep -B1 '^#----insert 1 ----#$' test.sh | awk '/echo/{print $2}' | sed 's/[^0-9]//g' ) 抓出最後一個號碼,再 ((last_number++)) 遞增
3,用 read 讀入 sciprt_name (建議用無窮迴圈讀到有內容的輸入,也就是直接 enter 的給他 loop,最好再加些錯誤檢測),最後加回絕對路徑 script_name=/usr/local/sbin/$script_name
4,然後用 sed -ie '/^#----insert 1 ----#$/i'"   echo $last_number $script_name"  test.sh 往上插入
     用 sed -ie '/^#----insert 2 ----#$/i'"    $last_number) $script_name ;;" test.sh 往上插入


+++++++++++++
p.s.
哈,上次有來聽課的,順便可以練習一下!
« 上次編輯: 2012-08-23 23:17 由 netman »

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: Shell script 自動插入資料的一些問題
« 回覆 #5 於: 2012-08-24 12:13 »
1) menu 選單寫在另一個檔, 內容如下:
exit
aaa
bbb
ccc

2) 安插就插在最後面

3)
i=0
cat menu |while read a; do
echo $i) $a
i=i+1   # <-- 請更正語法
done

我比較喜歡這種寫法,選單資料獨立,容易加入或刪除選單項目
建立選單時也只要將資料檔載入依序輸出即可,script 處理上會簡單許多  :D