shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)
shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)
问题背景:
- if [ $flag == '1' ]; then
- mode='--dev'
- else
- mode='--test'
- fi
如上代码, 执行shell报错:line 1: [: ==: unary operator expected【翻译过来就是:-bash: [: ==: 期待一元表达式】
解决方案:
- if [ "$flag" == '1' ]; then
- mode='--dev'
- else
- mode='--test'
- 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)的更多相关文章
- vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
- AFNetwork2.0在报错1016,3840的解决方法及一些感悟
最近在学习AFNetwork,非常好的网络框架,能节省很多时间.不过请求网络数据时报错1016,3840. 这两个错误网上解决方法很多,http://blog.csdn.net/huifeidexin ...
- 阿里云安装kubernetes-UI报错endpoints \"kubernetes-dashboard\" not found解决方法
问题:阿里云ECS安装kube-ui v5后,访问 http://master_ip:8080/ui/跳转到http://master_ip:8080/api/v1/proxy/namespaces/ ...
- 转)VCSA 6.5重启无法访问,报错“503 Service Unavailable”的解决方法
1. 问题 重启vcenter,登陆vsphere client,提示 “503 Service Unavailable (Failed to connect to endpoint: [N7Vmac ...
- ExtJs6编译之后上线报错无法查看到的解决方法
最近Extjs编译后部署遇到了一个错误c is not a constructor,报错位置在app.js里,这根本没法找 解决方法:用命令sencha app build testing 编译之后, ...
- Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法
这个问题困扰了我一个星期,原因是使用geomagicbuffer时候,有的线可正常使用,有的就直接报错,一直没有解决,后来发现是api自己的bug导致的 干脆直接读代码,在geometryEngine ...
- 网页视频不能自动播放?HTML5 video报错Uncaught (in promise) DOMException解决方法
话说发哥四年前写了一个网页,如上图效果,实际网址http://pano.z01.com ,话说做好时是正常的,突然某一天,客户说你这个网站动画不见了,这是什么原因? 结果检查脚本一切正常. 其实也不是 ...
- Github上LeakCanary编译报错CreateProcess error=2的解决方法
现象说明: 从github上拉下LeakCanary编译时报错 CreateProcess error=2, ϵͳÕҲ»µ½ָ¶ 原因分析: 该现象是由于Windows中Gradle调用命令未加cmd ...
- Eclipse导入web项目报错找不到HttpServletRequest解决方法
解决方法 右击项目-> Properties -> Java Build Path -> Add Library -> Server Runtime -> next -& ...
随机推荐
- HTML+CSS实现导航栏二级下拉菜单完整代码
工具是vs code 代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- GO开发:链表
链表 type Student struct { Name string Next* Student } 每个节点包含下一个节点的地址,这样把所有的节点串起来了,通常把链表中的第一个节点叫做链表头 p ...
- 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_2 请求参数绑定实体类型
参数封装到javaBean对象中 创建新的包domain.在下面新建Account 实现序列化 的接口,定义几个属性 生成get和set.还有toString的方法 表单 重新发布tomcat jav ...
- python3.5 append使用
1.从元组中添加 friends=[] tup1=("Jon",35) friends.append(tup1[0]) print(friends[0]) ssh://root@1 ...
- golang init方法和main方法初始化顺序
init()和main()方法是golang默认的两个方法,不需要我们调用,程序执行会自动寻找项目中的这俩方法.现在我们就讲一种通用的情况:main 包下 导入了 init2 包而在init2 包下又 ...
- Office_Word使用技巧大全(超全)
目录 不收藏不行的 word 使用技巧大全 三招去掉页眉那条横线 批量转换全角字符为半角字符 快速打开最后编辑的文档 格式刷的使用 删除网上 下载 资料的换行符(象这种 "↓" ) ...
- HDU 1263 水果 (STL map)
水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submissi ...
- [转帖]虚拟内存探究 -- 第二篇:Python 字节
虚拟内存探究 -- 第二篇:Python 字节 http://blog.coderhuo.tech/2017/10/15/Virtual_Memory_python_bytes/ 是真看不懂哦 ...
- Java实现龟兔赛跑
闲极无聊,加上翻手机看到龟兔赛跑的词语,想到了可以通过java起两个线程来实现龟兔赛跑的实现. 代码实现其实很简单: 首先是乌龟类: 然后是兔子类: 最后是赛跑类: 接下里让我们看一下输出结果吧: 乌 ...
- 洛谷 P1273 有线电视网 题解
题面 按照常见树形背包定义状态:设dp[u][j]表示在以u为根的子树中,选择j个客户所能获得的最大收益. 状态转移:dp[u][j]=max(dp[u][j-k],dp[v][k]-w(u,v)); ...