0

これらの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
4

2 に答える 2

3

変数を引用します。

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

しかし、次のようにする方がよいでしょう:

if [ -z "$DEVICE_ID" ];

2 番目のエラーは、逆引用符を使用する必要があることです。

if [ $(ls -l Mytest*.log | wc -l) -eq 1 ]; then
于 2012-11-23T19:55:45.917 に答える
1

bash を使用している場合は、条件式に二重括弧を使用します。引用符で囲まれていない変数については、よりスマートです。

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

動作します (注:パターン マッチングの代わりにプレーンな文字列の等価性=を求める代わりに)==

ファイルの存在については、配列を使用します

shopt -s nullglob
files=( *.log )
if (( ${#files[@]} > 0 )); the. Echo "there are log files"; fi
于 2012-11-23T22:27:12.493 に答える