![識別子を宣言する必要があります。 [閉じる]](https://linux33.com/image/54148/%E8%AD%98%E5%88%A5%E5%AD%90%E3%82%92%E5%AE%A3%E8%A8%80%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%20%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
私の作品:
filename='somefile_Connectivity_12345.CSV'
trimfilename= echo $filename| cut -d'_' -f 2
if '$trimfilename'='Connectivity'
then
echo "loop1"
elif '$trimfilename'='Red'
then
echo " loop2"
elif ' $trimfilename'='Blue'
then
echo "loop3'
end if;
「識別子を宣言する必要があります。elif部分がない場合は正しく機能します」というエラーが発生します。
答え1
この試み:
#!/bin/bash
filename='somefile_Connectivity_12345.CSV'
trimfilename=$(echo $filename| cut -d'_' -f 2)
if [ $trimfilename = "Connectivity" ]
then
echo "loop1"
elif [ $trimfilename = "Red" ]
then
echo " loop2"
elif [ $trimfilename = "Blue" ]
then
echo "loop3"
fi
答え2
デフォルトでは、次の場合は '$trimfilename' を 'Connectivity' に設定しようとします。
if '$trimfilename'='Connectivity'...
if
- 指揮位置にいるとき - はいいいえecho
とexit
同じ意味を持つコマンドです[
。これは予約語;
- と同じ方法でシェルのパーサによって処理され、<newline>
- 実際にも! dammit
同じ方法で処理されます。=
if
if
少なくとも 1 つのブロックで構成されるブロックの開始を示します。複合コマンド、1、または簡単なコマンド。おそらく私が説明できる最も有用な方法は次のとおりです。
#one compound command
{ simple command; simple command; simple command; }
if { : this compound command returns 0 ; }
then { : do this compound command ; }
else { : do this compound command ; }
fi
それぞれの間の中括弧予約語 if
、then
;else
そして暗黙的にif
ブロックにあり、不要です。しかし、これはすべてシェルのパーサーによって処理されます。
解析が発生します今後変数の拡張/割り当てを実行するとき:
if var=val
then :
else :
fi
...テスト中です。仕事~の足到着変わりやすい0(この場合は返される値)を返し、そこから続けます。しかし、...これを行うと...
if 'in\valid var name'=val
then :
else :
fi
...その後運が良ければエラーメッセージが表示され、elseブロックが完了します。ただし、ブロック全体の実行が突然停止する可能性が最も高いです。解析できません。。
前述のように、=
この割り当て演算子はシェルパーサーの関数なので、完了するには少なくとも2つの評価が必要です。
var=val; eval $var=val2
シェルは=
解析時に(拡張前)割り当て機能を記録し、拡張の割り当てを処理できません。まだこのようなことが起こっていないからです。
必要なのはテストコマンドの戻り値です。明らかに変数拡張を評価するコマンドです。これはtest
...
if test "$var" = "val"
then echo yay
else echo nay
fi
または...
if [ "$var" = "val" ]
then echo yay
else echo nay
fi
"quote"
test
コマンドは、あまりにも多くの場所であまりにも多くのパラメータしか処理できないため、これはテストされた拡張に重要です。後ろにシェルの解析とシェル拡張が間もなく提供されます。噴射。