标记“;”附近的语法错误(家庭作业)

标记“;”附近的语法错误(家庭作业)

我正在编写一个别名,该别名接受文件名的输入,然后在确保该文件是常规且可读的之后,将该文件复制cp -i到备份文件夹$HOME/Backup

我对 UNIX 非常陌生,因此在完成此任务时遇到一些困难。这是我的代码:

alias getname='read filename'

alias vfile='getname; if [ ! -f $filename ]; then echo "Irregular file"; (exit 1); elif [ ! -r $file ]; then echo "Not readable"; (exit 2); fi;'


alias backup='vfile; if [ vfile ]; then cp -i $filename $home/Backup; fi;'

我已经测试了vfile别名并且它有效,我收到的错误是:

-bash: syntax error near unexpected token ';'

当我将其vfile作为第一个操作时,我就开始收到此错误;如果我不在vfileif 语句之前运行,它将使用上次运行时的文件名。我必须确保vfile在复制之前没有产生错误。

在我添加vfile为第一个命令之前,我收到此错误:

cp: cannot create regular file '/Backup/*': No such file or directory

但我的主文件夹中确实有一个名为 Backup 的目录,所以我也不知道是什么原因造成的。

答案1

您的别名vfile以 结尾;,然后别名backup以 开头vfile;。因此,两个;连续的 s 之间没有语句,这是不允许的:

$ echo ; ;
bash: syntax error near unexpected token `;'

去掉;末尾的vfile.

答案2

使用上一个问题中我的别名,而不是使用两个别名。

由于您的 vfile 别名如果错误会抛出错误代码,您可以这样做:

alias filebackup='vfile && cp -i "$filename" "$HOME/Backup/"'

会告诉它仅在退出时&&执行命令cpvfile0

编辑 抱歉我累了

$home不是有效的环境变量,因此除非您在某个地方手动设置它,以解释为什么您收到“没有这样的文件或目录”错误,因为它扩展为''.也总是引用你的变量。

相关内容