我的脚本 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转换它
  • echo 此处以确保在每个结果后添加换行符

带文件:

$ 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
$

相关内容