쉘 스크립트에서 CLI 명령 사용 [닫기]

쉘 스크립트에서 CLI 명령 사용 [닫기]

이 코드가 있고 일반 CLI에서 작동하지만 파일에 어떻게 적용합니까?

sort <filename> | uniq | cut -f 1 -d "," | uniq -c |sed -e "s/^[ \t]*//"

항상 명령을 찾을 수 없음과 같은 메시지가 표시됩니다.

편집: 내 명령은 CLI에서 작동하지만 이를 bash 스크립트에 적용하고 싶습니다. 이제 내 질문은 이 명령을 스크립트에 파일 이름이 $1로 적용한 다음 파일처럼 한 줄씩 읽을 수 있는 다른 변수에 출력을 저장하는 방법입니다.

그래서 이 bash 코드와 "./script.sh filename.txt"를 사용해 보았습니다.

#!/bin/bash

lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'

실행할 때 다음 오류가 표시됩니다.

./filename.txt: line 1: YKL112W,YKL112W: command not found

답변1

문제는 스크립트에 구문 오류가 있다는 것입니다. 선

lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'

방법:

  • sort변수에 문자열 할당lines
  • $1그런 다음 출력을 각각 uniq, cut및 로 파이프하면서 변수에 저장된 명령이 실행됩니다 .uniqsed

스크립트에 제공한 인수 에는 $1파일 이름이 포함되어 있으므로 쉘은 파일이 텍스트 파일임에도 불구하고 파일을 실행하려고 시도하므로(즉, 스크립트인 것처럼) 오류 메시지가 나타납니다.

명령의 결과를 변수에 할당하려면 line아래와 같이 "명령 대체"를 수행해야 합니다.

lines="$(sort "$1" | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//')"

나는 또한 사용하는 것이 좋습니다주택 검사셸 스크립트 관련 문제를 식별합니다.

관련 정보