請教shell script寫法 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

(1) 2 »


請教shell script寫法
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 797
MP : 494 / 21595
EXP: 88
離線
各位前輩好:
我有一個小小的修改檔案的需求,卻不知該如何下手寫此程式,請各位前輩指點。

先說清楚我的需求,我有一個檔案,內容如下:
[outbound-route]
exten => s,1,Noop()
;設定動態功能鍵 Set(DYNAMIC_FEATURES=vicGroup)
exten => s,n,set(_MainRoomNum=${CALLERID(number)})
  same => n,Gosub(設定來電顯示,cell${RAND(4,9)},1)
  same => n,Dial(SIP/路由1/235${x},32,gCX)
  same => n,Dial(SIP/路由2/7852${x},32,gCX)
  same => n,Dial(SIP/路由3/9957${x},32,gCX)
  same => n,Dial(SIP/路由4/9967${x},32,gCX)
  same => n,Dial(SIP/路由5/9867${x},32,gCX)
  same => n,Return

我需要透過使用者按簡單的數字來改變路由順序,而不改動到其它的字。

比如說:當我按下3之後,內容會變成這樣,路由3跑到第1行去了。
[outbound-route]
exten => s,1,Noop()
;設定動態功能鍵 Set(DYNAMIC_FEATURES=vicGroup)
exten => s,n,set(_MainRoomNum=${CALLERID(number)})
  same => n,Gosub(設定來電顯示,cell${RAND(4,9)},1)
  same => n,Dial(SIP/路由3/9957${x},32,gCX)
  same => n,Dial(SIP/路由1/235${x},32,gCX)
  same => n,Dial(SIP/路由2/7852${x},32,gCX)
  same => n,Dial(SIP/路由4/9967${x},32,gCX)
  same => n,Dial(SIP/路由5/9867${x},32,gCX)
  same => n,Return


目前我想到的方法是把我要改的那幾行放入陣列之中,但是似乎也無法完成這個任務,底下是我目前完成的程式碼

#!/bin/bash
#定義變數
file1=./outbound.conf
echo "目前路由順序如下:"
grep Dial $file1 |nl -v0
IFS=$'\n'
#宣告陣列 ROUTE
declare -a ROUTE=(`grep Dial $file1`)

echo 輸入你要設定主要路由的號碼,
read -p "請輸入數字(1,2,3,4...):" keyin
echo 這是你所需擇的路由
echo "${ROUTE[$keyin]}"


我的困難卡在不會處理整行的字串讓它換位置,請高手指點一下方向,謝謝。

2013/10/8 18:54
應用擴展 工具箱
回覆: 請教shell script寫法
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 478
MP : 157 / 8068
EXP: 13
離線
夢見草 寫到:
各位前輩好:
我有一個小小的修改檔案的需求,卻不知該如何下手寫此程式,請各位前輩指點。

先說清楚我的需求,我有一個檔案,內容如下:
[outbound-route]
exten => s,1,Noop()
;設定動態功能鍵 Set(DYNAMIC_FEATURES=vicGroup)
exten => s,n,set(_MainRoomNum=${CALLERID(number)})
  same => n,Gosub(設定來電顯示,cell${RAND(4,9)},1)
  same => n,Dial(SIP/路由1/235${x},32,gCX)
  same => n,Dial(SIP/路由2/7852${x},32,gCX)
  same => n,Dial(SIP/路由3/9957${x},32,gCX)
  same => n,Dial(SIP/路由4/9967${x},32,gCX)
  same => n,Dial(SIP/路由5/9867${x},32,gCX)
  same => n,Return

我需要透過使用者按簡單的數字來改變路由順序,而不改動到其它的字。

比如說:當我按下3之後,內容會變成這樣,路由3跑到第1行去了。
[outbound-route]
exten => s,1,Noop()
;設定動態功能鍵 Set(DYNAMIC_FEATURES=vicGroup)
exten => s,n,set(_MainRoomNum=${CALLERID(number)})
  same => n,Gosub(設定來電顯示,cell${RAND(4,9)},1)
  same => n,Dial(SIP/路由3/9957${x},32,gCX)
  same => n,Dial(SIP/路由1/235${x},32,gCX)
  same => n,Dial(SIP/路由2/7852${x},32,gCX)
  same => n,Dial(SIP/路由4/9967${x},32,gCX)
  same => n,Dial(SIP/路由5/9867${x},32,gCX)
  same => n,Return


目前我想到的方法是把我要改的那幾行放入陣列之中,但是似乎也無法完成這個任務,底下是我目前完成的程式碼

#!/bin/bash
#定義變數
file1=./outbound.conf
echo "目前路由順序如下:"
grep Dial $file1 |nl -v0
IFS=$'\n'
#宣告陣列 ROUTE
declare -a ROUTE=(`grep Dial $file1`)

echo 輸入你要設定主要路由的號碼,
read -p "請輸入數字(1,2,3,4...):" keyin
echo 這是你所需擇的路由
echo "${ROUTE[$keyin]}"


我的困難卡在不會處理整行的字串讓它換位置,請高手指點一下方向,謝謝。


我好像有想法,大概之道要怎麼做XD。
但是有點複雜就是了。需要嗎XD

2013/10/8 19:07
應用擴展 工具箱
回覆: 請教shell script寫法
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 478
MP : 157 / 8068
EXP: 13
離線
http://www.mediafire.com/download/8ek0qj013wsa89f/change

自己寫的,沒有用甚麼特殊的技術,如果很爛請包容

2013/10/8 19:46
應用擴展 工具箱
回覆: 請教shell script寫法
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 797
MP : 494 / 21595
EXP: 88
離線
謝謝你提供的範例,我研究看看,再來回應。

2013/10/9 16:12
應用擴展 工具箱
回覆: 請教shell script寫法
會員二級
註冊日期:
2009/2/4 15:54
所屬群組:
已註冊使用者
等級: 5
HP : 0 / 124
MP : 17 / 3168
EXP: 97
離線
line=3
cat outbound.conf | sed -n "6!{p;d};:1;$(($line+5-1))!{N;b1};h;n;p;g;p"

-------------------------------------------------------------

應該就這樣吧,網路上找的,有錯請包含

2013/10/10 2:34
應用擴展 工具箱
回覆: 請教shell script寫法
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 478
MP : 157 / 8068
EXP: 13
離線
dreamltf 寫到:
line=3
cat outbound.conf | sed -n "6!{p;d};:1;$(($line+5-1))!{N;b1};h;n;p;g;p"

-------------------------------------------------------------

應該就這樣吧,網路上找的,有錯請包含


樓上那位的命令不能用XD
!這個後面要有空白。不然會出現no event

2013/10/10 9:27
應用擴展 工具箱
回覆: 請教shell script寫法
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 478
MP : 157 / 8068
EXP: 13
離線
http://www.mediafire.com/download/0c9rr7fjreck40c/change_new

新版本,由sed實現大部分的功能,我把他加上彈性選擇。

2013/10/10 11:33
應用擴展 工具箱
回覆: 請教shell script寫法
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 797
MP : 494 / 21595
EXP: 88
離線
哇, sed 那一行指令看起來好難,我去網路上查了一下資料
http://blog.163.com/onx0320@126/blog/static/164736436201211910326150
我好好研究之後,再參照幻影火寫的新版的程式修改一下符合我需求的部份,完成之後再來回應。

謝謝各位前輩的指點。

2013/10/10 23:08
應用擴展 工具箱
回覆: 請教shell script寫法
會員二級
註冊日期:
2009/2/4 15:54
所屬群組:
已註冊使用者
等級: 5
HP : 0 / 124
MP : 17 / 3168
EXP: 97
離線
幻影火 寫到:
樓上那位的命令不能用XD
!這個後面要有空白。不然會出現no event
XD

你老兄也真奇怪,"XD" 這是取笑的意思嗎,
不爽用你做啥抄了還用啥新版本,

至少我在lubuntu13.04 32bit上試過是正常的,
不知道你老兄在笑什麼。

2013/10/11 1:33
應用擴展 工具箱
回覆: 請教shell script寫法
管理員
註冊日期:
2012/1/14 18:41
所屬群組:
討論區管理群
等級: 20
HP : 0 / 478
MP : 157 / 8068
EXP: 13
離線
dreamltf 寫到:
幻影火 寫到:
樓上那位的命令不能用XD
!這個後面要有空白。不然會出現no event
XD

你老兄也真奇怪,"XD" 這是取笑的意思嗎,
不爽用你做啥抄了還用啥新版本,

至少我在lubuntu13.04 32bit上試過是正常的,
不知道你老兄在笑什麼。


一點意思都沒有,那個只是習慣性的動作輸入而已。

2013/10/11 8:07
應用擴展 工具箱

(1) 2 »

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.