bash 스크립트에서 cp 및 mv의 대상으로 명령줄 인수 사용

bash 스크립트에서 cp 및 mv의 대상으로 명령줄 인수 사용

소스 및 대상 파일 이름을 지정하기 위해 플래그/매개변수가 포함된 스크립트를 실행하여 파일을 복사하거나 파일 이름을 바꾸려고 합니다.

#!/bin/bash/

while getopts s:d flag
do
        case "${flag}" in
                s) copy_source=${OPTARG};;
                d) copy_dest=${OPTARG};;
        esac
done

echo "Copy a file input with argument to another file input with argument"
cp $copy_source $copy_dest

출력은 오류입니다.

sh test_cp.sh -s  file1.txt -d file2.txt
Copy a file input with argument to another file input with argument
cp: missing destination file operand after ‘file1.txt’
Try 'cp --help' for more information.

cp(및 mv)는 매개변수화된 대상을 허용하지 않습니까? 내가 뭘 잘못했나요?

답변1

매개변수를 허용하려는 경우 나중에 해당 라인에 :필요한 항목이 누락되었습니다 . 따라서 귀하의 항목은 비어 있으므로 "피연산자 누락"이라는 불만이 표시됩니다. 다음과 같은 "디버그" 줄을 추가하면dwhile getopts-dcopy_destcp

echo "Source parameter: $copy_source"
echo "Destination parameter: $copy_dest"

루프 후에 문제가 표시됩니다. 이 문제를 해결하려면 다음을 추가하세요 :.

while getopts s:d: flag
do
   ...
done

반품, 특히 파일 이름을 다룰 때 다음과 같은 쉘 변수를 항상 인용해야 한다는 점에 유의하십시오.

cp "$copy_source" "$copy_dest"

또한, 스크립트를 실행하는 데 유의하세요.

sh test_cp.sh

shebang-line을 무시합니다 #!/bin/bash그리고 당신은 그것이 실행되고 있는지 확신할 수 없습니다 bash! 올바른 쉘을 사용하고 있는지 확인하려면 명시적으로 다음을 지정할 수 있습니다.

배쉬 test_cp.sh논쟁

또는 스크립트 파일을 실행 가능하게 만들고 실행하십시오.

./test_cp.sh논쟁

관련 정보