ソースとターゲットのファイル名を指定するには、フラグ/パラメータを含むスクリプトを実行してファイルをコピーするか、ファイル名を変更しようとします。
#!/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議論