平日と週末を印刷するシェルスクリプトの作成

平日と週末を印刷するシェルスクリプトの作成

forループとifを使って簡単なプログラムを作成する方法。

私のコード:

for i in mon tue wed thurs fri sat 
do
   echo weekday: $i
   if [ $i == thurs ]   
   then
      echo weekend: $i+1
   fi
done

そして出力:

weekday: mon
weekday: tue
weekday: wed
weekday: thurs
weekend: thurs+1
weekday: fri
weekday: sat

しかし、私は次のような出力が欲しいです。

weekday: mon
weekday: tue
weekday: wed
weekday: thurs
weekend: fri
weekend: sat

どのような構文を見逃しましたか?

ベストアンサー1

与えられたコード:

for i in mon tue wed thurs fri sat 
do
 echo weekday: $i
  if [ $i == thurs ]    
    then
    echo weekend: $i+1
  fi
done
  • echo weekday: $i繰り返しごとに呼び出されます。
  • ループが繰り返されるたびに、変数forに要素が生成されます。予想される配列インデックスではありません。ii

予想される出力を取得するさまざまな方法:

1) 文字列比較の実行

for i in mon tue wed thurs fri sat 
do
    if [ $i == fri ] || [ $i == sat ]
    then
        echo weekend: $i
    else
        echo weekday: $i
    fi
done

2)文字列を使用してプレフィックスを保存し、条件に応じて変更します。

s='weekday'
for i in mon tue wed thurs fri sat 
do
    echo "$s: $i"
    if [ $i == thurs ]
    then
        s='weekend'
    fi
done

3) 配列の使用

days=(mon tue wed thurs fri sat)

for ((i=0; i<${#days[@]}; i++))
do
    if (( i < 4 ))
    then
        echo "weekday: ${days[$i]}"
    else
        echo "weekend: ${days[$i]}"
    fi
done

おすすめ記事