Bash Shell 脚本问题

Bash Shell Script Issues

我是 UNIX 的新手,有一个家庭作业给我带来了麻烦。我要编写一个脚本,将指定的文件从当前目录备份到指定的目标目录。该脚本采用三个参数。

  1. sourcePath,这是要备份或复制的源 files/files 的路径。
  2. backupPath,即备份文件的目标目录路径。
  3. filePrefix,用于标识要备份哪些文件,特别是只复制名称以给定前缀开头的文件,而其他文件将被忽略。例如,如果用户输入字母“d”,则将复制所有以该字母开头的文件,而忽略任何其他文件。

我在 bash 中对 scripting/functions 了解不多,所以我尝试查找有用但还不够的教程。这个脚本是我只需输入命令就可以轻松完成的事情。例如,我会 cd 进入包含文件的目标目录,然后使用 cp 命令将以特定前缀开头的文件复制到目标目录,但是在制作脚本时我在死胡同。

我觉得我的代码似乎非常不正确,这是由于我缺乏经验,但网上没有任何帮助。到目前为止我的代码是

read sourcePath
read backupPath
read filePrefix

grep /export/home/public/"$sourcePath
mkdir -p $backupPath
cp /export/home/public/"$sourcePath"/$filePrefix /home/public/"$backupPath"

因此脚本的执行示例是

$ ./script.sh
(sourcePath)HW4testdir (backupPath)backup (filePrefix)d

输出:

backing up: def (example file starting with d)
backing up: dog (example file starting with d)

到目前为止,执行代码时,没有任何反应。同样,我敢肯定大部分甚至所有代码都是错误的并且完全偏离了基础,但我从未学习过脚本。如果我不必创建脚本,我可以轻松实现此预期结果。

我建议 bash:

read -r -p "sourcePath: " sourcePath
read -r -p "backupPath: " backupPath
read -r -p "filePrefix: " filePrefix

mkdir -p /home/public/"$backupPath"
cp /export/home/public/"$sourcePath/$filePrefix"* /home/public/"$backupPath"

确保使用的用户有权创建目录/home/public/"$backupPath"

参见:help read

首先:您的作业指出,您的脚本应该接受参数。

但是您的脚本不接受参数。它从标准输入读取参数。参数通过命令行传递给脚本,您的脚本将被称为

./script.sh HW4testdir backup d

因此您不能使用 read 来获取它们。第一个参数在名称 </code> 下可用,第二个参数是 <code> 等等。例如你可以写

sourcePath=${1?Parameter missing}

如果调用者忘记传递参数,它的副作用是中止脚本并显示错误消息。

另一点:您没有在任何地方说 bash 应该用于 运行 脚本。由于您希望脚本被调用

./script.sh ....

而不是

bash ./script.sh ....

您必须对信息进行编码,以便在您的脚本中使用 bash。假设您的 bash 位于 /usr/bin,您可以通过使脚本的第一行

#!/usr/bin/bash