Linux Shell脚本报错‘file1:binary operator required’求助
问题分析与解决
你的脚本错误出在if [ cp file1 /tmp ];这一行——[ ]是test命令的简写,它的作用是判断条件表达式(比如文件是否存在、字符串是否相等),而不是直接执行命令。你把cp命令放进[ ]里,test会把cp当作一个操作数,file1当作需要的二元运算符,这就触发了“binary operator required”的语法错误。
正确写法
直接在if后面跟要执行的命令即可,if会自动判断命令的退出状态码:退出码为0(命令执行成功)时,进入then分支;非0则跳过。修正后的脚本:
#!/bin/bash if cp file1 /tmp; then rm file1 fi
为什么用[[ ]]或()也不行?
[[ ]]和[ ]类似,都是用于条件表达式判断的语法,同样不能直接在里面放执行命令;()会创建子shell执行命令,但if (cp ...)这种写法虽然语法上没问题,但完全没必要——直接写命令本身更简洁高效,和if cp ...效果一致。
内容的提问来源于stack exchange,提问作者Shravani
相关产品推荐
相关产品推荐

