2017-08-11 195 views
0

我正在寫一個小小的shell腳本,用於將ASCII字符轉換爲二進制,然後逐個從結果字節中獲取每一位。shell - 如何從一個字節中單獨獲取每一位?

這裏是我的代碼:

#!/bin/sh 
binary=00000000 
bit0=0 
bit1=0 
bit2=0 
bit3=0 
bit4=0 
bit5=0 
bit6=0 
bit7=0 

#main 
read -p "Please enter your text: " word 

for i in $(seq 1 ${#word}) 
do 

    binary=`echo ${word:i-1:1} | perl -lpe '$_=unpack"B*"'` 
    echo $binary 

    for n in $(seq 1 ${#binary}) 
    do 

    eval "bit$n=${binary:i-1:1}" 

    done 

    echo $bit0 
    echo $bit1 
    echo $bit2 
    echo $bit3 
    echo $bit4 
    echo $bit5 
    echo $bit6 
    echo $bit7 
done 
sleep 5 

對於什麼都在這裏原因,這一塊是不工作:

for n in $(seq 1 ${#binary}) 
do 

eval "bit$n=${binary:i-1:1}" 

done 

應該正確的數字從二進制變量分配每位#變量。 也可能你這段代碼向我解釋,我不完全理解它:

echo ${word:i-1:1} | perl -lpe '$_=unpack"B*"' 
+0

不知道你的意圖可以給什麼你告訴你」回覆 尋找。看看{typeset a =「10」;回聲「$ {a:1:1}」| perl -lpe'$ _ =解壓「B *」'; }結果。它是「00110000」,它是48的二進制表示,taht是字符串「01」的第二位置'0'的ASCII碼。 –

回答

0

沒關係,簡單的複製粘貼&失敗/錯誤:

EVAL「位$ N = $ {二進制: -1:1}」 EVAL 「位$ N = $ {二進制:ñ -1:1}」

相關問題