トップページunix
1001コメント312KB

シェルスクリプト総合 その6

■ このスレッドは過去ログ倉庫に格納されています
0001うはwwwww2006/03/26(日) 00:56:22
シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。
まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。


□お約束
・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。
 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。
 Linuxユーザは/bin/shの正体がbashなので特に注意。
・csh/tcshのシェルスクリプトは推奨されません。
(理由は「csh-whynot」でググれ)
・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。
 manや参考リンクを見ましょう。
 aproposないしはman -kでそれらしい単語による簡単な検索もできます。
・シェルスクリプトのことをシェルってゆーな
・シェルで使えるワイルドカード等は正規表現ではありません。
正規表現の話題はスレ違い(正規表現スレへ)

□初心者へのアドバイス:
・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも
 RubyやPerlの方が適した仕事には素直にそちらを使いましょう。
・知らないコマンドが出てきたらmanを引きましょう。
・思い通りに動かないときは、まずは sh -x でトレースしましょう。
0178名無しさん@お腹いっぱい。2006/04/02(日) 15:29:03
>>177
コマンドの終了状態は $? という変数で見る

grep -q hoge file 2> /dev/null
if [ $? -eq 0 ]; then
......
else
......
fi

が素直じゃない。
0179名無しさん@お腹いっぱい。2006/04/02(日) 15:29:52
>>177
そういうときって・・・

grep hoge file > /dev/null 2>&1
if (($?==0)) ; then
  moge
fi
みたいに書かない?
俺だけ?
0180名無しさん@お腹いっぱい。2006/04/02(日) 15:36:14
それなんてbash?
0181名無しさん@お腹いっぱい。2006/04/02(日) 15:37:41
>>177
どうしても [ -z ] 方式でやりたいなら、
[ -z `grep $id $listfile` ] じゃなくて、
[ -z "`grep $id $listfile`" ] みたいに、
ダフルクォートを付けろ。
こうすれば、grepの結果がなくても "" の空文字列が残るので、
testがエラーにならない。

それより、testを使わずに、
if ! grep $id $listfile; then
で行けるよ。(!を使うのはksh依存だけど)

Bourne Shなら
if grep $id $listfile; then :; else

とやるのが普通。
0182名無しさん@お腹いっぱい。2006/04/02(日) 15:42:44
>>178-179
この場合はわざわざ $? を呼び出す必要が無いな。

if grep ...
then
...
else
...
fi

else がいらないならこれでも可。

grep ... || {
...
}
■ このスレッドは過去ログ倉庫に格納されています