シェルスクリプト

シェルスクリプトでシグナルハンドラを書く

シェルスクリプトでシグナルをトラップするにはtrapを使います。 最初の引数が実行コマンドで、その後ろにトラップするシグナルを並べます。 #!/bin/sh trap 'echo exit...' EXIT trap 'echo trap INT or TERM' INT TERM echo start sleep 5 echo end 出力 s…

配置に依存しないスクリプト

スクリプトがごちゃごちゃしてきたので #!/bin/sh VAR=ABC echo $VAR $ ./try.sh ABC bin、etc、(log、tmp、...)とディレクトリを分けたら、 $ tree try/ try/ -- bin `-- try.sh `-- etc `-- try.env $ cat try/etc/try.env VAR=ABC binに移動しないとち…

echoの移植性のなさ(改行抑止)

Redhat系のLinux、Solarisをよく使います。 コマンドの違いはtarのzオプション、gzgrepとzgrep、findのコマゴマした仕様など、いろいろあるんですが意外なところではechoの改行抑止があります。 先日、Linuxで動いていた/bin/shスクリプトがSolarisではちゃ…

シェルスクリプトでsplit

シェルスクリプトで文字列分割と言えばやはりwhile read while read f1 f2 f3;do echo $f1 echo $f2 done < file.txt 標準入力やファイルから1行ずつ読み込んで、という最もありがちな処理にはこれが1番わかりやすいですね。IFSで区切り文字を変えたりもで…

シェルでサイコロをふる

シェルスクリプトで乱数を得るにはRANDOM変数を参照しましょう。 $ expr $RANDOM % 6 + 1 3 使用例として毎秒5種類のメッセージのどれかをシスログ出力するスクリプト。 while :;do logger -p local5.debug $( sed -n `expr $RANDOM % 5 + 1`p <

ftp転送をシェルスクリプトで

FTPの転送処理をシェルスクリプトで実行する例です。 まず理解すること ftpコマンドは標準入力からFTPの内部コマンドを受け取ることができます。たとえばこんなファイルを用意して、 open 192.168.1.10 user www PASSWORD cd /var/www/html ascii get index.…

bashの{}を使った引数展開

こういうの。 $ echo {aa,bb}.{1..3} aa.1 aa.2 aa.3 bb.1 bb.2 bb.3すごい便利なんだけど意外と知らない人多い。 シェルスクリプトで数値をカウントするのにこういう書き方もできますが、 $ for ((i=0;$i<10;i++));do echo $i;done 0 1 2 ...このくらいなら…