制御文
if
, case
, for
, while
は
リダイレクトと組み合わせるられるんだ!
えっ?
そうなの?!
今回は制御文とリダイレクトを
組み合わせるとどうなるかを
見ていこう!
最初は「入力リダイレクト だよ
以下の例を見てみよう
<
」while read LINE
do
...
done < ファイル
1行ずつ読む内容を
ファイル
から読み込むんだね!そのとおり!制御文末尾の記述へ入力リダイレクトしてあげればいいんだ
for
文の場合はdone
に対して入力リダイレクトを書けばいいんだね!入力は「ヒアドキュメント や 「ヒアストリング でも 可能だよ
<<
」<<<
」今度は「出力リダイレクト だよ
>
」while read LINE
do
...
done > ファイル
通常
if
文やcase
文は入力リダイレクトを必要としないけど出力リダイレクトを使うことがあるよ!以下は「標準出力」を 「標準エラー」へ書き出してくれるんだ
if
文の処理のif コマンド
then
...
fi >&2
追記
>>
でも同じように使えるよ!リダイレクトが使えるということはもしかしてパイプも使えたりする?
うん、使えるよ! パイプの前でも後ろでも両方の書き方ができるんだ
以下は
while
文で全てのユーザ名を処理するよawk -F: '{ print $1 }' /etc/passwd |
while read USERNAME
do
...
done
あれ?1行目の最後、パイプの後に 「バックスラッシュ( は いらないのかな?
\
)」この場合は不要なんだパイプのように「次の記述があるはず」 とわかる記述では続く記述がなければ次の行に続いていると自動的に判断されるよ
他にもAND 演算子
&&
やOR 演算子 ||
でも同じような動きになるよへぇ…こういう場合は「バックスラッシュ( を省略できるんだね
\
)」発展的な話をしよう!なんと制御文どうしをパイプで繋げられるんだ!
if ...
then
...
else
...
fi |
while read LINE
do
...
done
while
文で1行ずつ読む内容をif
文の条件で変えているんだねすごい柔軟にできそうだけど色々な要素がからんで難しいよ…
あくまで発展的な使い方だからね使うのは実力が付いてからでも十分だよ!
今回は「制御文」と「リダイレクト」を 組み合わせられることを学んだよ!グルーピング
{ ... }
に近いイメージで使えるんだね!これまで学んだ制御文をさらに色々なことに使える記述だよ難しいので急いで覚える必要はないけど知っておくと記述の幅が広がるよ!