制御文
if, case,
for, while は
リダイレクトと
組み合わせるられるんだ!
えっ?
そうなの?!
今回は制御文と
リダイレクトを
組み合わせると
どうなるかを
見ていこう!
最初は
「入力リダイレクト だよ
以下の例を見てみよう
<」while read LINE
do
...
done < ファイル
1行ずつ読む内容を
ファイル から読み込むんだね!そのとおり!制御文末尾の記述へ入力リダイレクトしてあげればいいんだ
for文の場合はdone に対して入力リダイレクトを書けばいいんだね!入力は「ヒアドキュメント や 「ヒアストリング でも 可能だよ
<<」<<<」今度は「出力リダイレクト だよ
>」while read LINE
do
...
done > ファイル
以下は「標準出力」を 「標準エラー」へ 書き出してくれるんだ
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 文の条件で変えているんだねすごい柔軟にできそうだけど色々な要素がからんで難しいよ…
発展的な使い方だからね使うのは実力が付いてからでも十分だよ!
今回は「制御文」と 「リダイレクト」を 組み合わせられることを学んだよ!
グルーピング
{ ... } に近いイメージで使えるんだね!これまで学んだ制御文をさらに色々なことに使える記述だよ難しいので急いで覚える必要はないけど知っておくと記述の幅が広がるよ!