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

관련 정보