sh

sortは引数でファイルパスを受け取れる

sh

タイトルですべてなのですが。この二つは同じ結果になります。 sort sample.txt cat sample.txt | sort 感覚的には↓と同じになってしまいそうなんですが。 [webmaster@localhost sh]$ echo sample.txt | sort sample.txt [webmaster@localhost sh]$ 引数で受…

パイプで受け取った入力をシェルコマンドとして実行

sh

詳解 シェルスクリプト作者: Arnold Robbins,Nelson H. F. Beebe,日向あおい出版社/メーカー: オライリージャパン発売日: 2006/01/16メディア: 大型本購入: 6人 クリック: 193回この商品を含むブログ (39件) を見るパラパラ読んでいたら結構知らないことがあ…

簡易ベンチマークスクリプト

Sh

全くたいしたものではありませんが、前にも似たようなのを書いて使ったのにロストして、また書いたのでウェブ上に晒しておきます。 #!/bin/sh # ex. benchmark.sh test1.sh test2.sh 1000 # ex. benchmark.sh test1.sh "" 1000 script_1=$1 script_2=$2 coun…

簡素なif文は一行で書く

Sh

自分用のツールなど規約のないものなら、処理文の短い分岐は一行で書いたりします。 #!/bin/sh target=./hoge.txt if [ -f ${target} ]; then rm -f ${target} ;fi 追記:(2/4)コメント欄でもっとcoolな書き方を教えていただきました。ありがとうございます…

文字列与えてループして、中でそれをeval

Sh

#!/bin/sh OLD_DIR=${HOME}/work/old NEW_DIR=${HOME}/work/new for TARGET in OLD NEW do eval echo \$${TARGET}_DIR done職場のシェルスクリプトのソースみて「なるほどなぁ」と思いました。 /home/user/work/old /home/user/work/new

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

シェルスクリプトでftp転送する処理のサンプル。メモ。 #!/bin/sh DATE=`date '+%Y%m%d'` tar cvfz ${DATE}.tar.gz ./hoge ftp -ivn 192.168.11.11 << __END__ user username password bin # バイナリ転送モード passive # パッシブモードoff cd /foo/var pu…

UNIXコマンドのバージョン情報をみる

http://www.atmarkit.co.jp/flinux/rensai/shell03/shellstio.html別件で調べ物をしていてぶつかった記事。echoだけちょっと特殊で、bashの内部コマンドのechoとフルパス指定して呼び出す外部コマンドとしての/bin/echoは別物なんですね。記事によると伝統的…

定期的にDBパッチするシェルスクリプト

Sh

以下は、10秒おきに10件のレコードを100回insertするサンプルで、試験用に作成したのを簡略化したものです。SQL文を作って実行してるだけなのでupdateにも応用できるだろうけど、あまり用途はなさそう。。 #!/bin/sh SQL_FILE="tmp.sql" ONE_TIME=10 SLEEP_T…

シェルスクリプトで自分自身の情報を得る

Sh

実行中のスクリプト内で自分自身のファイル名やスクリプトのパスを知りたいときがあります。 #!/bin/sh echo $0 echo `basename $0` echo `dirname $0`実行結果は以下の通りです。 [user@linux work]$ ~/work/test.sh /home/user/work/test.sh test.sh /home…

膨大なデータから1/n行抽出するとか

Sh

グラフ化とかするときに数十万単位のデータはそのままだと扱いづらいので、1/1000に抽出したりします。単に分母行毎に出力しているだけですが、地味によくやります。 #!/bin/ksh DENOM=1000 # 分母 TARGET_FILE=${1} OUTPUT_FILE=${TARGET_FILE}.per${DENOM}…

パイプでつないだwhile文内のexit 1

Sh

UNIXコマンドとwhile文をパイプでつなぐケースでエラー時にリターンコードを返して異常終了させようとするときの注意点です。 #!/bin/sh echo "debug:10" cat hoge.txt | while read LINE do echo "debug:20" exit 1 echo "debug:30" done echo "debug:40"期…

くりかえし実行をユーザに確認する

Sh

ユーザにコマンドライン入力させて次のアクションを決める、よくある感じのやつです。 #!/bin/sh SQL_FILE=select.sql echo "select status, count(*) from requests group by status;" >> ${SQL_FILE} while true do sqlplus usr/pwd@pvdb < ${SQL_FILE} # …

シェルスクリプトの配列全体を表すとき

Sh

for tmp in ${array[@]} do echo ${tmp} donefor tmp in ${array[*]} do echo ${tmp} done自分の中であいまいになっていたのですが、同値なのですね。

シェルスクリプトのfor 〜 in 文

sh

しばらく書いていないとよく間違えてしまうのがfor 〜 in 文の記法です。まず、正しい記述はこのようになります。 #!/bin/sh array=("hoge" "foo" "var") for tmp in @{array[*]} do echo ${tmp} done 実行結果 hoge foo var しかし、以下のような書き方をし…

シェルスクリプトでハッシュみたいなこと・・はできない

sh

追記=トラックバックをいただいていたので改めてエントリを見てみたら、何となくとても違和感があったので、検証してみたらやっぱりおかしい事を書いていました。ここで説明しているのはあくまで「evalでのシングルクォート展開」でしかなくて、全く「ハッ…

シェルスクリプトでsubstrみたいなこと

sh

シェルスクリプトを自発的に書くことはあまりありませんが、既存のシェルスクリプトをメンテする事はよくあります。普段あまり書かないだけに「あ・・あれシェルだとどうやるんだったっけ(また忘れた・・)」みたいなことになりがちです。そのうちのひとつ…