あなたが書いた:
if ["$var_check"=="c"];then
[
コマンドはコマンドです。その名前はスペースで囲む必要があります (簡単に言えば)。
if [ "$var_check" == "c" ]; then
最後の引数 の]
前にもスペースが必要です。内のオペランドもスペースで区切る必要があります。それらは別々の引数である必要があります。演算子のルールは[[ ... ]]
少し異なりますが、スペースを使用するとコードが読みやすくなります。あなたが書いたものは、期待に少し似ています:
ls"-l"/dev/tty
働く; それはしません。
test
または[
オペレーターがサポートしているかどうかを再確認する必要もあります==
。通常の形式は=
です。
この線:
var_check= echo $str |awk -F . '{if (NF>1) {print $NF}}'
これは、環境変数として設定されたecho
コマンドを実行しvar_check
ますが、これはあなたが望むものではありません。あなたはほぼ確実に次のように書くつもりでした:
var_check=$(echo $str |awk -F . '{if (NF>1) {print $NF}}')
これにより、 コマンドecho
とコマンドがawk
実行され、出力が に取り込まれvar_check
ます。$(...)
古いが使用するのがより複雑な表記法よりも、この表記法を優先して使用してください`...`
。単純なケースでは、それらは同じように見えます。それらをネストすると、$(...)
表記がはるかに理解しやすく、使いやすくなります。
また、より大きなスケールで見る (1 行ではなく 3 行):
echo "enter file name"
read num
var_check=$(echo $str |awk -F . '{if (NF>1) {print $NF}}')
ファイル名を variable に読み込みますnum
。$str
の代わりにエコーします$num
。$str
スクリプトのどこかで (表示されていないコードで)既に設定されている場合は、それで問題ない可能性があります。スタンドアロンのフラグメントと見なすと、正しくありません。
awk
少し単純化することもできます:
var_check=$(echo $str |awk -F . 'NF > 1 {print $NF}')
これはあなたが書いたものと同じように機能しますが、使用する括弧と中括弧が少なくなります。