mv:在shell脚本中使用mv而不在终端中使用mv时缺少文件操作数

时间:2019-07-11 23:12:44

标签: linux bash ubuntu scripting

我正在尝试编写一个shell脚本,用户输入他们要重命名的文件作为第一个变量,然后输入他们希望新名称作为第二个变量的文件。程序将给出的唯一输出是mv缺少文件操作数。我碰到了墙,现在没有办法尝试了。我尝试使用文件的绝对路径,但没有帮助。 Google对我没有任何帮助。

mv在命令行中按预期工作,但是一旦引入变量,程序就会进行kaput处理。我尝试了各种可能的格式化输入的方式。

#!/bin/bash
echo -n "Original filename: "
read $input_filename
echo ""
echo -n "New filename: "
read $output_filename
echo ""
mv -v $input_filename  $output_filename
if [ $? == 0 ]
then
echo "Task completed successfully"
else
    echo "ERROR: File failed to be renamed. Exiting."
fi

输出和相关文件的内容。

davevm@davevm-VirtualBox:~/lab10$ ls
helloworld  lab10.sh
davevm@davevm-VirtualBox:~/lab10$ ./lab10.sh 
Original filename: helloworld

New filename: copy1

mv: missing file operand
Try 'mv --help' for more information.
ERROR: File failed to be renamed. Exiting.

2 个答案:

答案 0 :(得分:1)

read内置命令将变量名作为其参数。

使用read filename,而不是read $filename

您还应该引用mv命令的参数:

mv -v "$input_filename" "$output_filename"

答案 1 :(得分:0)

调试外壳程序脚本时,通常在文件顶部添加git rm行,这将在执行命令时输出所有命令以准确显示正在发生的情况,这通常很有用。使用您的脚本,执行此操作将显示以下输出:

set -x

嗯,看来您的+ mv -v mv: missing file operand $input_filename变量没有设置。在$output_filename的文档中查找,错误变得很明显。设置变量名时,请勿在变量名前加上read,这样$会变成read $input_filename,并且与读取输出文件名相同