Bash
在 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
接受參數化的目的地嗎?我究竟做錯了什麼?
如果要接受參數
:
,則d
在您的while getopts
行中缺少必填項。-d
因此,您copy_dest
是空的,因此cp
抱怨“缺少操作數”。如果您添加“調試”行,例如echo "Source parameter: $copy_source" echo "Destination parameter: $copy_dest"
在你的循環之後,你會看到問題。要解決,只需添加
:
:while getopts s:d: flag do ... done
另外,請注意,特別是在處理文件名時,您應該始終引用 shell 變數,如
cp "$copy_source" "$copy_dest"
此外,請注意將腳本作為
sh test_cp.sh
將覆蓋 shebang-line
#!/bin/bash
並且您無法確定它是否在bash
! 如果您想確保使用正確的外殼,您可以明確聲明bash test_cp.sh*參數*
或使腳本文件可執行並將其執行為
./test_cp.sh*參數*