shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

blogdaren 2015-02-26  抢沙发 14916人次

问题背景:

  1. if [ $flag == '1' ]; then
  2. mode='--dev'
  3. else
  4. mode='--test'
  5. fi

如上代码, 执行shell报错:line 1: [: ==: unary operator expected【翻译过来就是:-bash: [: ==: 期待一元表达式】

解决方案:

  1. if [ "$flag" == '1' ]; then
  2. mode='--dev'
  3. else
  4. mode='--test'
  5. fi

问题说明:

1. 当 if 语句中使用 [ ] 条件修饰符时, $flag 变量必须加上引号。

2. 当 if 语句中使用 [[]] 条件修饰符时,$flag 变量的引号可有可无。

我通过第二种方法解决:

debugprint()
{
if [[ $debugswitch -eq 1 ]]; then
echo "$1"
else
echo "debug off" > /dev/null
fi
}
########################sleep_when_quarter################################
sleep_when_quarter()
{
local currentminute
local timeseconds=10
local curtime

if [[ $sleepswitch -eq 1 ]]; then

......

#!/bin/bash
#
#Name:del_mr_temp_file
#Date:2018-09-11
#Author:Created by shiminhua
#Company:Datang Mobile Co., Ltd
#Discription:This script delete old mr temp files.
########################################################################## ###########################################################################
if [ -f ~/.bash_profile ];then
. ~/.bash_profile
fi
##########################################################################
MRDIR="/export/home/omcrftp/" MRFILE1="${MRDIR}mrfile"
MRFILE2="${MRDIR}mrfile/success"
########################debugprint################################
debugswitch=0
sleepswitch=0
debugprint()
{
if [ $debugswitch -eq 1 ]; then #这里应改为[[]]
echo "$1"
else
echo "debug off" > /dev/null
fi
}
########################sleep_when_quarter################################
sleep_when_quarter()
{
local currentminute
local timeseconds=10
local curtime if [ $sleepswitch -eq 1 ]; then #这里应改为[[]] return 0
fi curtime=`date +%Y-%m-%d\ %H:%M:%S`
debugprint "Enter func:sleep_when_quarter, time is: $curtime" while [ 1 -eq 1 ]
do
currentminute=`date +%M` if [ $currentminute -gt 22 ] && [ $currentminute -lt 27 ]; then
break # break表示跳出死循环,执行后面的代码,否则一直在死循环中
fi if [ $currentminute -gt 37 ] && [ $currentminute -lt 42 ]; then
break
fi if [ $currentminute -gt 52 ] && [ $currentminute -lt 57 ]; then
break
fi debugprint "sleep...."
sleep $timeseconds done debugprint "Leave func:sleep_when_quarter."
}
########################del_old_files################################ del_old_files()
{
debugprint "dir = $1" for file_a in ${1}/*; do sleep_when_quarter temp_file1=`basename $file_a` if [ -f $file_a ]; then reserver=`date +%Y%m%d%H` debugprint "filename is [$temp_file1]" if [[ $temp_file1 != *${reserver}* ]]; then
debugprint "delete filename is [$temp_file1]"
rm -f $file_a >/dev/null 2>&1 #丢弃 标准、错误输出 真正起作用的删除命令
fi
fi
done
} ########################main################################
WDNAME=del_mr_temp_file.sh
####################declare var end####################################### if [ "x$1" = "x" ];then
debugswitch=0
else
debugswitch=$1 fi if [ "x$2" = "x" ];then
sleepswitch=0
else
sleepswitch=$2
fi PID=$$
WD1=`ps -ef|grep "$WDNAME"|grep -v grep|wc -l`    #grep -v grep 就是查找不含有 grep 字段的行
WD2=`ps -ef|grep "$WDNAME"|grep -v grep|grep $PID|wc -l`
echo "WD1=$WD1"
echo "WD2=$WD2"
echo "PID=$PID" # 这个判断的意义是,如果脚本已经运行,则不再运行第二次。避免脚本运行多次,产生多个死循环,影响系统速度
if [ ! "$WD1" -eq "$WD2" ]; then
echo "The script is live. please type Enter to exit!"
echo "`ps -ef|grep "$WDNAME"|grep -v grep`"
exit 0
fi while [ 1 -eq 1 ]
do
del_old_files $MRFILE1 del_old_files $MRFILE2 sleep 300 done

  

参考:

shell中>/dev/null 2>&1

https://www.cnblogs.com/520playboy/p/6275022.html

linux应用之test命令详细解析

https://www.cnblogs.com/tankblog/p/6160808.html

shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

http://www.blogdaren.com/post-2189.html

Bash脚本的空格和“期待一元表达式”错误

https://blog.csdn.net/qinxiandiqi/article/details/41626215

grep -v grep反向查找(查找不含有 grep 字段的行)

https://blog.csdn.net/weixin_36667844/article/details/78999489

shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)的更多相关文章

  1. vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)

    vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)

  2. AFNetwork2.0在报错1016,3840的解决方法及一些感悟

    最近在学习AFNetwork,非常好的网络框架,能节省很多时间.不过请求网络数据时报错1016,3840. 这两个错误网上解决方法很多,http://blog.csdn.net/huifeidexin ...

  3. 阿里云安装kubernetes-UI报错endpoints \"kubernetes-dashboard\" not found解决方法

    问题:阿里云ECS安装kube-ui v5后,访问 http://master_ip:8080/ui/跳转到http://master_ip:8080/api/v1/proxy/namespaces/ ...

  4. 转)VCSA 6.5重启无法访问,报错“503 Service Unavailable”的解决方法

    1. 问题 重启vcenter,登陆vsphere client,提示 “503 Service Unavailable (Failed to connect to endpoint: [N7Vmac ...

  5. ExtJs6编译之后上线报错无法查看到的解决方法

    最近Extjs编译后部署遇到了一个错误c is not a constructor,报错位置在app.js里,这根本没法找 解决方法:用命令sencha app build testing 编译之后, ...

  6. Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法

    这个问题困扰了我一个星期,原因是使用geomagicbuffer时候,有的线可正常使用,有的就直接报错,一直没有解决,后来发现是api自己的bug导致的 干脆直接读代码,在geometryEngine ...

  7. 网页视频不能自动播放?HTML5 video报错Uncaught (in promise) DOMException解决方法

    话说发哥四年前写了一个网页,如上图效果,实际网址http://pano.z01.com ,话说做好时是正常的,突然某一天,客户说你这个网站动画不见了,这是什么原因? 结果检查脚本一切正常. 其实也不是 ...

  8. Github上LeakCanary编译报错CreateProcess error=2的解决方法

    现象说明: 从github上拉下LeakCanary编译时报错 CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ 原因分析: 该现象是由于Windows中Gradle调用命令未加cmd ...

  9. Eclipse导入web项目报错找不到HttpServletRequest解决方法

    解决方法 右击项目-> Properties -> Java Build Path -> Add Library -> Server Runtime -> next -& ...

随机推荐

  1. nodejs之路由

    声明:在写nodejs代码的时候,很多模块可以封装保存起来,以后的项目都会用到. 1.路由模块 var url=require('url'); //封装方法改变res 绑定res.send() fun ...

  2. Nova 启动虚拟机流程解析

    目录 文章目录 目录 前言 从请求说起 nova-api service 阶段 前言 Nova 启动虚拟机的东西太多,持续更新- 从请求说起 无论是通过 Dashboard 还是 CLI 启动一个虚拟 ...

  3. Python基本语法_运算符详解

    目录 目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的博文介绍了Python的数据结构之 ...

  4. TestNG学习笔记 一

    一. 介绍 TestNG是一个设计用来简化广泛的测试需求的测试框架,从单元测试(隔离测试一个类)到集成测试(测试由有多个类多个包甚至多个外部框架组成的整个系统,例如运用服务器). 编写一个测试的过程有 ...

  5. 【HANA系列】SAP HANA使用XS和HTTP创建proxy

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA使用XS和HTT ...

  6. LeetCode.1021-删除最外面的括号(Remove Outermost Parentheses)

    这是小川的第380次更新,第408篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第242题(顺位题号是1021).有效的括号字符串为空(""),&qu ...

  7. ubuntu18.04安装Vulhub

    环境 虚拟机vmware ubuntu18.04 已安装docker 1.安装docker-compose 前提:Docker-compose基于Python开发,需要pip Docker-compo ...

  8. [ASP.NET] 数据绑定以及Container.DataItem的具体分析 [转]

    灵活的运用数据绑定操作        绑定到简单属性:<%#UserName%>        绑定到集合:<asp:ListBox id="ListBox1" ...

  9. 性能库 Oracle数据库 连接不上问题的解决

    今天性能库的centos 上面的oracle18c 数据库连接不上了 这里进行了一次简单处理 针对不同问题进行说明: 1. 实例时 blocked 的状态 问题现象: LSNRCTL> stat ...

  10. Fescar使用(资料)

    fescar源码走读1:业务调用方 https://zhuanlan.zhihu.com/p/54659540   fescar源码走读2:fescar服务端 https://zhuanlan.zhi ...