
명령줄 인수를 전달하려는 텍스트 파일이 있습니다. 예를 들어:
./scriptname.sh abc.sh
scriptname.sh
abc.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