-1

我正在尝试编写一个 shell 脚本,用户输入他们想要重命名的文件作为第一个变量,然后输入他们希望新名称作为第二个变量的名称。程序将给出的唯一输出是 mv 缺少文件操作数。我已经碰壁了,现在没有东西可以尝试了。我尝试使用文件的绝对路径,但没有帮助。谷歌对我一无所获。

mv 在命令行中按预期工作,但一旦引入变量,程序就会运行。我已经尝试了所有可能的格式化输入的方法。

#!/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.
4

2 回答 2

1

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

使用read filename,不使用read $filename

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

mv -v "$input_filename" "$output_filename"
于 2019-07-11T23:19:17.810 回答
0

在调试 shell 脚本时,将这一行添加到文件顶部通常很有用set -x,这将在所有命令执行时输出所有命令以准确显示正在发生的事情。使用您的脚本,这样做会显示以下输出:

+ mv -v
mv: missing file operand

嗯,看起来你的$input_filename$output_filenamevars 没有被设置。查找文档read,错误变得明显。设置变量名时不应使用 a 前缀$,因此read $input_filename变为read input_filename,读取输出文件名时相同

于 2019-07-11T23:20:47.427 回答