소스 및 대상 파일 이름을 지정하기 위해 플래그/매개변수가 포함된 스크립트를 실행하여 파일을 복사하거나 파일 이름을 바꾸려고 합니다.
#!/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
매개변수를 허용하려는 경우 나중에 해당 라인에 :
필요한 항목이 누락되었습니다 . 따라서 귀하의 항목은 비어 있으므로 "피연산자 누락"이라는 불만이 표시됩니다. 다음과 같은 "디버그" 줄을 추가하면d
while getopts
-d
copy_dest
cp
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논쟁