다음을 수행하는 스크립트가 있는 경우
[alice]$ math
Enter a number: 5
Number squared: 25
Number divided: 1
Number to power of 3: 125
수학 스크립트의 출력을 테이블로 구성하지만 여러 인수를 사용하고 "제수"를 표시하지 않는 다른 스크립트를 작성하고 싶습니다. 예를 들어
[alice]$ newprogram 5 10
*
*Number squared power of 3
5 25 125
10 100 1000
또한 수학 스크립트는 /home/alice
새 프로그램이 위치할 에 있습니다 /home/user
. 이 문제를 어떻게 처리해야 합니까?
답변1
날 봐답변기존 스크립트에 매개변수를 전달하는 방법에 대한 자세한 내용은 이전 질문을 참조하세요. 이 출력을 구문 분석하는 것은 이전 출력보다 더 어려울 것입니다.
새 버전을 스크립팅하는 것이 훨씬 간단합니다. 이와 같이 넌센스를 구문 분석하는 것은 주요 PITA입니다.
다음은 관련 없는 출력(예: 헤더)을 인쇄하는 원래 오류를 반복하지 않고 이를 수행하는 버전입니다.
#! /bin/bash
for i in "$@" ; do
printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i))
done
-v
다음은 (verbose) 옵션을 사용하는 경우 선택적으로 제목을 인쇄하는 버전입니다.
#! /bin/bash
verbose=0
while getopts "v" opt ; do
case "$opt" in
v) verbose=1 ;;
esac
done
shift "$((OPTIND-1))"
[ "$verbose" = "1" ] && printf "%s\t%s\t%s\n" 'Number' 'Squared' 'Power of 3'
for i in "$@" ; do
printf "%i\t%i\t%i\n" $i $(($i * $i)) $(($i * $i *$i))
done
답변2
질문에서 "방법"이라는 단어를 사용하고 있는데, 이는 주어진 대답이 "거친" 또는 다소 "일반적인" 것임을 의미하므로 이 문제를 해결하는 데 사용할 수 있는 다음 단계를 설명합니다.
- 쓰다예상되는- 스크립트다투다로 전송됩니다
/home/alice/math
. /home/user/newprogram
주어진 BASH 스크립트의 인수를 사용하여 루프에서 Expect 스크립트를 호출하는 BASH 스크립트(예: ) 작성명령 대체출력을 캡처합니다.grep
필요한 데이터를 추출하고 변수에 저장하는 등 즐겨 사용하는 텍스트 처리 도구를 사용합니다 (이를 위해서는 캡처된 출력을 로 파이프해야 하며grep
, 다시 명령 대체를 사용하여 명령으로 전달된 데이터를 캡처grep
하고 저장 위치에 저장해야 합니다). 변하기 쉬운).- 이 단계 이전 단계에서 구문 분석한 변수를 테이블로 출력합니다.
이 단계에서는 pair 가 있다고 가정합니다 /home/alice/math
. 물론 그렇지 않은 경우 다음과 같이 할 수 있습니다.
/home/alice/math
chmod
권한이나 소유자 만 사용 하거나 변경하세요chown
.- 두 사용자가 모두 액세스할 수 있도록 충분한 권한이 있는 공개 그룹에
alice
을 배치합니다 .user
/home/alice/math