내 스크립트 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
$