Unix全般 -> シェル -> Bash
for 構文例
基本的な使い方
--- Shell 構文 ---
#!/bin/sh
for i in `cat /etc/group`
do
echo $line
done
/etc/group ファイルの内容を1行づつ出力する
--- 標準出力内容 ---
root::0:
other::1:root
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
行に空白が含まれる場合
--- Shell 構文 ---
#!/bin/sh
for i in `cat /etc/passwd`
do
echo $line
done
/etc/passwd ファイルの内容を1行づつ出力したいが
行の途中に空白が含まれる場合途中で改行されて表示されてしまう。
--- 標準出力内容 ---
root:x:0:0:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line
Printer
Admin:/usr/spool/lp:
行に空白が含まれる場合の対策
--- Shell 構文 ---
#!/bin/sh
IFS="
"
for i in `cat /etc/passwd`
do
echo $line
done
区切り文字変数 IFS に改行をセットする。
"" の終了はカラムの先頭に記述しなければならない。
--- 標準出力内容 ---
root:x:0:0:Super-User:/:/sbin/sh
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
IFSは環境変数である為、初期値"空白"以外を設定する場合は、
他に影響がある可能性があるので元の値に戻しておいたほうがよい。
IFS_BK=$IFS
IFS="
"
処理
IFS=$IFS_BK