for f in $*
do
mv common.txt corporate.txt
done
这样对吗??
答案1
如果您仅重命名单个文件,则无需循环所有位置参数,但是如果您确实循环所有位置参数,则应使用:
for f in "$@"; do
$@
双引号允许您拥有包含空格的参数,而不会受到分词的影响,并且由于多种原因通常更健壮。
在您的脚本上,mv common.txt corporate.txt
将根据参数重命名文件(假设该common.txt
文件与脚本存在于同一目录中),但您不执行任何检查以确保它已重命名。就我个人而言,我会指出文件的完整路径,也许可以使用这是一些稍微不必要的添加的学习经验:
以及一些必要的补充:
使用所有这些,您可以创建一个如下脚本:
#!/bin/sh
file=/path/to/common.txt
path=$(dirname "$file")
if mv "$file" "${path}/corporate.txt"; then
printf '%s\n' "${file}: renamed successfully" >&2
else
printf '%s\n' "Failed to move: $file" >&2
fi
答案2
if mv common.txt corporate.txt; then echo "Success"