我的脚本 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
$