명령줄 인수를 파일에 전달하는 방법

명령줄 인수를 파일에 전달하는 방법

명령줄 인수를 전달하려는 텍스트 파일이 있습니다. 예를 들어:

./scriptname.sh abc.sh 

scriptname.shabc.sh텍스트 파일에 복사하려면 안에 어떤 명령을 쓸 수 있나요 new.txt?

답변1

본 같은 껍질

Bourne과 같은 셸에서( .sh확장 프로그램에 따라 스크립트에서 사용하도록 제안됨):

#! /bin/sh -
if [ "$#" -gt 0 ]; then # if I was given at least 1 argument
  cp -- "$1" new.txt # where $1 is the first argument... $9 the 9th
                     # and ${10} the 10th (not $10 which is ${1}0)
else
  echo >&2 Not given enough arguments
  exit 1
fi

( --옵션의 끝 부분을 표시하여 로 시작하는 옵션으로 처리되지 않도록 해야 합니다 $1.)cp-

하나 이상의 인수가 제공되었는지 확인하는 더 짧은 방법은 다음과 같습니다.

#! /bin/sh -
cp -- "${1?Not given enough arguments}" new.txt

${parameter?message}다음을 포함하는 오류와 함께 쉘이 종료되는 원인은 무엇 입니까?정보이 매개변수가 설정되지 않은 경우.

아니면 정말 게으른 경우:

#! /bin/sh -u
cp -- "$1" new.txt

-u쉘이 종료되는 원인어느매개변수가 설정되지 않은 매개변수 확장입니다.

복사모두논쟁:

#! /bin/sh -
if [ "$#" -gt 0 ]; then # if I was given at least 1 argument
  cp -- "$@" /some/dir/ # where "$@" expands to all the script's
                        # arguments as separate arguments to cp
else
  echo >&2 Not given enough arguments
  exit 1
fi

${@?...}(이식 가능하므로 인수 없이 스크립트 에 의존하거나 종료할 수 없습니다 .)-u

매개변수를 반복하기 위해 for기본 루프를 구성하는 방법은 다음과 같습니다.

#! /bin/sh -
for file do
  cp -- "$file" "$file.new"
done

물론 다음과 같이 할 수도 있습니다.

#! /bin/sh -
for file in "$@" do
  cp -- "$file" "$file.new"
done

명시적으로 작성하십시오(그러나 일부 쉘에서는 효율성이 떨어집니다).

다른 껍질

(인수 개수 확인은 따로 남겨두세요)

  • csh/tcsh

    cp -- $1:q new.txt # one argument, properly quoted
    cp -- $argv:q /some/dir # all arguments
    
  • rc/ es:

    cp -- $1 new.txt
    cp -- $* /some/dir
    
  • fish

    cp -- $argv[1] new.txt
    cp -- $argv /some/dir
    

관련 정보