修复shell脚本中的条件

时间:2012-11-23 19:55:06

标签: bash

我有这些if条件,但它有编译错误。我该如何解决?

if [ $DEVICE_ID == "" ]; then

我收到错误:

line 63: [: ==: unary operator expected


if [ 'ls -l Mytest*.log | wc -l' -eq 1 ]; then

我收到错误:

line 68: [: ls -l Kernel*.log | wc -l: integer expression expected

2 个答案:

答案 0 :(得分:3)

引用变量:

if [ "$DEVICE_ID" == "" ]; then

但最好这样做:

if [ -z "$DEVICE_ID" ];

第二个错误是您需要使用反引号:

if [ $(ls -l Mytest*.log | wc -l) -eq 1 ]; then

答案 1 :(得分:1)

如果您正在使用bash,请对条件表达式使用双括号:它们对未加引号的变量更为智能

if [[ $DEVICE_ID = "" ]]; then ...

可以工作(注意:=而不是==用于纯字符串相等而不是模式匹配)

对于文件的存在,使用数组

shopt -s nullglob
files=( *.log )
if (( ${#files[@]} > 0 )); the. Echo "there are log files"; fi