私のスクリプト hex.sh

私のスクリプト hex.sh

私のスクリプト hex.sh

#!/bin/sh
if [ -f $file_name ]
then do 
 cat[$file_name] | xxd -r -p
 else 
echo "$file_name not exists"
fi

標準入力から読み取るには、ファイルが既存のファイルまたは「-」である必要があります。


結果は次のとおりです。

./hex.sh test_number
017 AAA

test_number には以下を含めることができます。

30  31  37  20  41  41  41  20  0A

ベストアンサー1

そのために、私は次のことを思い出しました。

#!/bin/sh

if [ "$1" = '-' ]; then
    file='/dev/stdin'
else
    if [ ! -f "$1" ]; then
        printf 'ERROR! Cannot find file\n' >&2
        exit 1
    else
        file=$1
    fi
fi

while read -r num; do
    printf '%s\n' "$num" | xxd -r -p
    echo
done < "$file"
  • 最初の位置引数がある場合は、-stdinから読み込みます。
  • それ以外の場合は、最初の引数が有効なファイルであることを確認してください。もしそうなら、私たちはそれを読み、そうでなければエラーが発生して終了します。
  • 標準入力またはファイルから各行を読み取り、その行をnum変数に設定します。
  • num変数を渡してxxd変換します。
  • 各結果の後に改行が追加されていることを確認するには、ここにエコーしてください。

ファイルの場合:

$ cat test_number
30  31  37  20  41  41  41  20  0A
30  31  37  20  41  41  41
30 31 37 20 42 42 42
30 31 37 20 43 43 43
42 45 45 46
$ ./hex.sh test_number
017 AAA

017 AAA
017 BBB
017 CCC
BEEF

標準入力から:

$ ./hex.sh -
30  31  37  20  41  41  41  20  0A
017 AAA

42 45 45 46
BEEF
^C
$

おすすめ記事