私のスクリプト 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
$