シェルスクリプトメモ(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