使用 Linux shell 脚本中的选项替换文件名

使用 Linux shell 脚本中的选项替换文件名

我使用以下命令替换/opt/jboss/QueueStandalone/cron文件夹中所有.sh文件的文件名:

find /opt/jboss/QueueStandalone/cron -name '*.sh' -exec sed -i -e 's/Old-name/New-name/g' {} \;

我的问题是我很乐意构建一个 shell 脚本,就像它需要备份所有文件一样,.sh然后使用以下选项

Old-name=
New-name=

如果我使用脚本输入这两个值,则需要在所有.sh文件中进行更改。

答案1

Shell 变量名称不得包含破折号。

old_name="foo"
new_name="bar"
sed -i -e "s/${old_name}/${new_name}/g"

但请确保旧名称和新名称不包含任何可以解释的内容sed(例如点...)。或者你必须转义这些字符:

old_name="foo\.sh"
new_name="bar.sh"

但整个方法对我来说似乎很奇怪。通常您会将参数传递给脚本并像这样调用它

/path/to/script "$old_name" "$new_name"

或者

OLD_NAME=foo NEW_NAME=bar /path/to/script

相关内容