我正在尝试编写一个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.
答案 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
,并且与读取输出文件名相同