シェルスクリプトメモ(bash)

■無限ループ

while true
do
  date
  sleep 10
done

1行で書いてみる。どこに ; を入れるべきかを未だ体得していない。

while true ; do date ; sleep 10 ; done

定期的(1分おき)にdfを実行してディスクの使用量を見守ることにする。

while true ; do date ; df ;sleep 60 ; done


■100まで数える

cnt=0
while [ $cnt -lt 100 ]
do
  let cnt=cnt+1
  echo $cnt
done
cnt=1
while [ $cnt -le 100 ]
do
  echo $cnt
  let cnt=cnt+1
done


■パスワードを50個生成する

cnt=0
while [ $cnt -lt 50 ]
  do
    let cnt=cnt+1
    mkpasswd
done

上記を1行で書く

cnt=0; while [ $cnt -lt 50 ];  do let cnt=cnt+1; mkpasswd;  done


■192.168.0のIPアドレスのリストを作成する

hostaddress=1
while [ $hostaddress -le 254  ]
do
  echo 192.168.0.$hostaddress
  let hostaddress=hostaddress+1
done


■192.168.0のIPアドレスpingを打ち応答があったものだけ表示する

hostaddress=1
while [ $hostaddress -le 254  ]
do
  ipaddress=192.168.0.$hostaddress
  ping -q -c 3 $ipaddress > /dev/null
  if [ $? -eq 0 ] ; then
    echo 192.168.0.$hostaddress OK
  fi
  let hostaddress=hostaddress+1
done


■指定日から1日ずつ増やしながら日付のリストを作る

20160401から30日分作る

day=0
while [ $day -lt 30 ]
do
  date "+%Y%m%d" -d "20160401 +${day}day"
  let day=day+1
done

何かのコマンドの引数に与えるなら

day=0
while [ $day -lt 30 ]
do
  ymd=`date "+%Y%m%d" -d "20160401 +${day}day"`
  command $ymd
  let day=day+1
done

■OSの32ビットとか64ビットとか

platform=`uname -i`
if [ $platform == "x86_64" ]; then
  echo "64bit"
elif [ $platform == "i386" ]; then
  echo "32bit"
else
  echo "unknown platform ($platform)"
  exit 1
fi