web-dev-qa-db-ja.com

if、Elif、elseがBashの問題を宣言

次のifステートメントの問題がElifthenに関してどうなっているのか理解できないようです。 printfはまだ開発中であることを覚えておいてください。私はステートメントの中でまだそれをテストすることができなかったので、おそらくもっと間違っています。

私が得ているエラーは次のとおりです。

./timezone_string.sh: line 14: syntax error near unexpected token `then'
./timezone_string.sh: line 14: `then'

そしてその声明はそのようなものです。

if [ "$seconds" -eq 0 ];then
   $timezone_string="Z"
Elif[ "$seconds" -gt 0 ]
then
   $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
else
   echo "Unknown parameter"
fi
270
StuStirling

Elif[の間にスペースがありません。

Elif[ "$seconds" -gt 0 ]

あるべき

Elif [ "$seconds" -gt 0 ]

この質問から多くの意見が得られていることがわかりますが、従うべき構文は次のとおりです。

if [ conditions ]
# ^ ^          ^

大括弧の周りに/ - スペースが必要であることを意味します 。さもなければ、それは働かないでしょう。これは[そのものaコマンドだからです。

359
fedorqui

スクリプトにはいくつかの構文上の問題があります。これが修正版です。

#!/bin/bash

if [ "$seconds" -eq 0 ]; then
   timezone_string="Z"
Elif [ "$seconds" -gt 0 ]; then
   timezone_string=$(printf "%02d:%02d" $((seconds/3600)) $(((seconds / 60) % 60)))
else
   echo "Unknown parameter"
fi
222
anubhava

[はコマンドです。前のステートメントから空白で区切る必要があります。

Elif [
20
choroba

Bashでのコンディショニングの基本を見てみることをお勧めします。

記号 "[" はコマンドであり、その前には空白が必要です。 Elifの後に空白を入れないと、システムは Elif [ を特定のコマンドとして解釈しますが、これは現時点では絶対に望まないことです。

使用法:

Elif(A COMPULSORY WHITESPACE WITHOUT PARENTHESIS)[(A WHITE SPACE WITHOUT PARENTHESIS)conditions(A WHITESPACE WITHOUT PARENTHESIS)]

つまり、コードセグメントを次のように編集します。

Elif [ "$seconds" -gt 0 ]

コンパイルエラーがなくても問題ありません。最終的なコードセグメントは次のようになります。

#!/bin/sh    
if [ "$seconds" -eq 0 ];then
       $timezone_string="Z"
    Elif [ "$seconds" -gt 0 ]
    then
       $timezone_string=`printf "%02d:%02d" $seconds/3600 ($seconds/60)%60`
    else
       echo "Unknown parameter"
    fi
2
Mr. Weirdo