作者 主題: 請教shell script Hex轉Charater  (閱讀 17786 次)

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

terayon

  • 可愛的小學生
  • *
  • 文章數: 9
    • 檢視個人資料
請教shell script Hex轉Charater
« 於: 2006-04-03 15:02 »
61 61 6C 6E 2F 31 40 5B 31 30 2E 33 2E 33 2E 31 30 30 5D
轉成
a  a  l  n  / 1  @  [  1   0  .  3  .  3  .  1  0  0  ]
要用什麼指令程式轉

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
請教shell script Hex轉Charater
« 回覆 #1 於: 2006-04-03 15:18 »
for i in 61 61 6C 6E 2F 31 40 5B 31 30 2E 33 2E 33 2E 31 30 30 5D
do
    echo -e "\\x$i"
done | xargs

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #2 於: 2010-09-13 13:29 »
for i in 61 61 6C 6E 2F 31 40 5B 31 30 2E 33 2E 33 2E 31 30 30 5D
do
    echo -e "\\x$i"
done | xargs
對不起...我是菜鳥...我想問類似的問題...
我使用上例在我的 Embedded system 上執行...卻顯示: xargs: not found
請問 xargs 放在哪邊啊? /bin 及 /sbin 裡都找不到 (但在虛擬 CentOS 上可正常執行)... :-[
我的問題如下:
1)如果上例不使用 xargs 指令...如何達到相同結果?
2)我的字串如果是連續的...如: 4142434445 如何轉碼成: ABCDE ?
3)如何反轉回來?...如: ABCDE 轉回 4142434445 ?
以上問題不是沒做功課...而是網路上相關討論實在太少...煩請 netman 博士指點...感恩... :-*

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
回覆: 請教shell script Hex轉Charater
« 回覆 #3 於: 2010-09-13 14:48 »
1)
代碼: [選擇]
for i in 61 61 6C 6E 2F 31 40 5B 31 30 2E 33 2E do     echo -en "\\x$i"; done ; echo

2)
代碼: [選擇]
str="4142434445"
for ((i=0;i<=${#str}-2;i+=2)); do echo -en "\\x${str:$i:2}"; done; echo

3)
代碼: [選擇]
str="ABCD"
for ((i=0;i<=${#str}-1;i++)); do code=$(echo "${str:$i:1}"| od -x); echo -n "${code:10:2}"; done; echo
不過,需要裝 od 哦...
« 上次編輯: 2010-09-13 20:23 由 netman »

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #4 於: 2010-09-13 15:55 »
1)
代碼: [選擇]
for i in 61 61 6C 6E 2F 31 40 5B 31 30 2E 33 2E do     echo -en "\\x$i"; done ; echo

2)
代碼: [選擇]
str="4142434445"
for ((i=0;i<=${#str}-2;i+=2)); do echo -en "\\x${str:$i:2}"; done; echo

3)
str="ABCD"
for ((i=0;i<=${#str}-1;i++)); do code=$(echo "${str:$i:1} echo -n "${code:10:2}"; done; echo
不過,需要裝 od 哦...
非常感謝!!... :D
1) 2) 可正常執行...其結果也正確... :D
3) 似乎少了括號及引號? 顯示: Syntax error: Bad for loop variable

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #5 於: 2010-09-13 17:43 »
1)
代碼: [選擇]
for i in 61 61 6C 6E 2F 31 40 5B 31 30 2E 33 2E do     echo -en "\\x$i"; done ; echo

2)
代碼: [選擇]
str="4142434445"
for ((i=0;i<=${#str}-2;i+=2)); do echo -en "\\x${str:$i:2}"; done; echo

3)
str="ABCD"
for ((i=0;i<=${#str}-1;i++)); do code=$(echo "${str:$i:1} echo -n "${code:10:2}"; done; echo
不過,需要裝 od 哦...
奇怪了...程式移植到 Embedded system 上卻都不行了...顯示: Syntax error: Bad for loop variable
是否是因為大大所說沒裝 od 的關係?
(/bin 裡有 awk cut expr fgrep grep sed tail vi wc 但沒有 tr 跟 od  :'( )
若無法安裝 od 還有其他方法嗎?...感謝... :)
« 上次編輯: 2010-09-13 17:50 由 hsw00 »

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
回覆: 請教shell script Hex轉Charater
« 回覆 #6 於: 2010-09-13 18:23 »
自己 copy 一個 od 跟相關 libs 過去啊...

^_^

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #7 於: 2010-09-13 18:44 »
自己 copy 一個 od 跟相關 libs 過去啊...

^_^
我想辦法安裝 od 好了... :-\
可第三項語法有錯誤...
我嘗試修改好...但卻輸出為空...
大大再幫忙看一下好嗎... :)

gwstudy

  • 活潑的大學生
  • ***
  • 文章數: 205
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #8 於: 2010-09-13 18:58 »
netman 辛苦了 :)

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
回覆: 請教shell script Hex轉Charater
« 回覆 #9 於: 2010-09-13 20:23 »
sorry, 改好了...

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: 請教shell script Hex轉Charater
« 回覆 #10 於: 2010-09-14 09:19 »
你 embedded system 上的 shell 是 bash 嗎??
建議提供一下版本資訊,也比較好幫忙。

你的問題也許只要 cross-compile 或是在 build busybox 的時候把缺少的程式勾選起來再安裝即可。
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #11 於: 2010-09-14 10:16 »
sorry, 改好了...

全部在SentOS上驗證無誤...非常感謝!!... ;D
但移植到目標板上依然是: Syntax error: Bad for loop variable
這個問題...對菜鳥的我來說...是一個頭兩個大... :-[

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #12 於: 2010-09-14 10:20 »
你 embedded system 上的 shell 是 bash 嗎??
建議提供一下版本資訊,也比較好幫忙。

你的問題也許只要 cross-compile 或是在 build busybox 的時候把缺少的程式勾選起來再安裝即可。
版本: BusyBox v1.2.0 (2010.09.06-13:46+0000) Built-in shell (ash)
od 是可執行檔?...還是只是 BusyBox 的命令選項?...
這部份有得忙了...謝謝您... ;)

elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: 請教shell script Hex轉Charater
« 回覆 #13 於: 2010-09-14 16:32 »
就打 busybox od --help 試試看,就知道有沒有了

有的話,假設你的 busybox 放在 /bin
你就用 ln -s /bin/busybox /bin/od
這樣就會有 od 這指令了。
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #14 於: 2010-09-14 16:59 »
就打 busybox od --help 試試看,就知道有沒有了

有的話,假設你的 busybox 放在 /bin
你就用 ln -s /bin/busybox /bin/od
這樣就會有 od 這指令了。

多謝...已經重 Build 並加入 od, tr, printf, xargs... 等指令...
結果發現我的 Embedded system 根本不支援 echo ${ : : } 這樣的語法...
請問該當何解...謝謝!!

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #15 於: 2010-09-14 17:02 »
sorry, 改好了...

netman 大大網安...已經重 Build 並加入 od, tr, printf, xargs... 等指令...
結果發現我的 Embedded system 根本不支援 echo ${ : : } 這樣的語法...
請問該當何解...謝謝!!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
回覆: 請教shell script Hex轉Charater
« 回覆 #16 於: 2010-09-14 23:10 »
那你再把  /bin/echo 也 build 進去...
然後每次 echo 都用絕對路徑看看 ? 

^_^

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #17 於: 2010-09-15 13:23 »
那你再把  /bin/echo 也 build 進去...
然後每次 echo 都用絕對路徑看看 ? 

^_^
抱歉...還在解其他問題...所以回應慢了些... :P

試過...情況一樣...

我認為應該是語法的解析問題...
我在我的 Embedded System 上測試:

# str=5a
# echo -e \\x${str}
Z
# echo -e \\x${str:0:2}
-sh: Syntax error: Bad substitution
#

{ : : } 的取字元語法是不支援的... :-[

有其他替代的取字元語法嗎?... ???
謝謝!!

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
回覆: 請教shell script Hex轉Charater
« 回覆 #18 於: 2010-09-15 14:39 »
啊,抱歉,頭昏了...

那個跟 echo 沒關,害你浪費不少時間了...
那個是跟 shell 有關,如果你有 bash shell,就沒問題。
要不然,
用 cut 等命令來處理也行....
用 for 迴圈也 OK

不過,你先自己想想先... ^_^

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #19 於: 2010-09-15 15:27 »
啊,抱歉,頭昏了...

那個跟 echo 沒關,害你浪費不少時間了...
那個是跟 shell 有關,如果你有 bash shell,就沒問題。
要不然,
用 cut 等命令來處理也行....
用 for 迴圈也 OK

不過,你先自己想想先... ^_^

目前有關 shell 的設定如下:

#
# Shells
#
CONFIG_FEATURE_SH_IS_ASH=y
# CONFIG_FEATURE_SH_IS_HUSH is not set
# CONFIG_FEATURE_SH_IS_LASH is not set
# CONFIG_FEATURE_SH_IS_MSH is not set
# CONFIG_FEATURE_SH_IS_NONE is not set
CONFIG_ASH=y

#
# Ash Shell Options
#
CONFIG_ASH_JOB_CONTROL=y
# CONFIG_ASH_READ_NCHARS is not set
CONFIG_ASH_READ_TIMEOUT=y
CONFIG_ASH_ALIAS=y
CONFIG_ASH_MATH_SUPPORT=y
# CONFIG_ASH_MATH_SUPPORT_64 is not set
CONFIG_ASH_GETOPTS=y
CONFIG_ASH_BUILTIN_ECHO=y
CONFIG_ASH_BUILTIN_TEST=y
CONFIG_ASH_CMDCMD=y
# CONFIG_ASH_MAIL is not set
# CONFIG_ASH_OPTIMIZE_FOR_SIZE is not set
# CONFIG_ASH_RANDOM_SUPPORT is not set
# CONFIG_ASH_EXPAND_PRMT is not set
# CONFIG_HUSH is not set
# CONFIG_LASH is not set
# CONFIG_MSH is not set

#
# Bourne Shell Options
#
# CONFIG_FEATURE_SH_EXTRA_QUIET is not set
CONFIG_FEATURE_SH_STANDALONE_SHELL=y
CONFIG_FEATURE_COMMAND_EDITING=y
# CONFIG_FEATURE_COMMAND_EDITING_VI is not set
CONFIG_FEATURE_COMMAND_HISTORY=15
# CONFIG_FEATURE_COMMAND_SAVEHISTORY is not set
CONFIG_FEATURE_COMMAND_TAB_COMPLETION=y
# CONFIG_FEATURE_COMMAND_USERNAME_COMPLETION is not set
# CONFIG_FEATURE_SH_FANCY_PROMPT is not set

煩請建議哪些應該打開才能支援該語法?...謝謝!!... :)

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #20 於: 2010-09-15 18:57 »
啊,抱歉,頭昏了...

那個跟 echo 沒關,害你浪費不少時間了...
那個是跟 shell 有關,如果你有 bash shell,就沒問題。
要不然,
用 cut 等命令來處理也行....
用 for 迴圈也 OK

不過,你先自己想想先... ^_^

想破頭...想不出來... :'(
連 for 迴圈也不支援 ((  )) 語法!!

在 Embedded System 上

# for ((i=0;i<=10;i++)); do echo $i; done
-sh: Syntax error: Bad for loop variable
#

在 CentOS 上 :

[root@localhost ~]# for ((i=0;i<=10;i++)); do echo $i; done
0
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#


山窮水盡了...老大...救命啊~~~... :'( :'( :'(

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17464
    • 檢視個人資料
    • http://www.study-area.org
回覆: 請教shell script Hex轉Charater
« 回覆 #21 於: 2010-09-15 20:28 »
ash 的功能比較少,要換成 bash 才比較多東西可以玩哦...

下面是一個搭陪 expr 的例子:
代碼: [選擇]
str="ABCD"
 n=1
m=`expr length $str`
while [ $n -le $m ]; do echo $str | cut -c $n; n=`expr $n + 1`; done

dark

  • 俺是博士!
  • *****
  • 文章數: 1581
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #22 於: 2010-09-16 03:08 »
read 是 bash 內建的 , 其他 shell 不知有沒有?

試試 read -n2 word  能不能解決

echo 4142434445 | while read -n2 word ;do echo -en "\\x$word"; done


elleryq

  • 區域板主
  • 鑽研的研究生
  • *****
  • 文章數: 908
  • 性別: 男
    • 檢視個人資料
    • Thinking more...
回覆: 請教shell script Hex轉Charater
« 回覆 #23 於: 2010-09-16 09:44 »
我已經想直接用 C 來寫了說... :P

可以用 awk 嗎?
busybox 也有內建 mawk
寫起來應該比 ash 提供的東西要多...
Plan your work, then work your plan.
我的首頁:http://blog.elleryq.idv.tw
351899by http://counter.li.org

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #24 於: 2010-09-16 14:48 »
ash 的功能比較少,要換成 bash 才比較多東西可以玩哦...

下面是一個搭陪 expr 的例子:
代碼: [選擇]
str="ABCD"
 n=1
m=`expr length $str`
while [ $n -le $m ]; do echo $str | cut -c $n; n=`expr $n + 1`; done

大大果然那裏就是大...擠一擠總是會出來... ;D
迴圈修改如下:
while [ $n -le ${#str} ]; do echo -n $(echo $(echo $str | cut -c $n | od -x) | cut -c11-12); n=`expr $n + 1`; done
雖怪怪的...但可以用啦!
有感謝!!!... :-*

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #25 於: 2010-09-16 14:55 »
read 是 bash 內建的 , 其他 shell 不知有沒有?

試試 read -n2 word  能不能解決

echo 4142434445 | while read -n2 word ;do echo -en "\\x$word"; done


剛好跟 netman 大大湊一對... ;D
修改如下:
echo $str | while read -n2 word; do echo -en "\\x$word"
done | sed s/\\\\x// > outputfile
也是怪怪的...但也是可以用啦!
一樣有感謝!!! :-*

hsw00

  • 可愛的小學生
  • *
  • 文章數: 15
    • 檢視個人資料
回覆: 請教shell script Hex轉Charater
« 回覆 #26 於: 2010-09-16 14:58 »
我已經想直接用 C 來寫了說... :P

可以用 awk 嗎?
busybox 也有內建 mawk
寫起來應該比 ash 提供的東西要多...

嘿啊...能用 C 寫...
我還需搞到現在嗎?... :P 8) ;D