ここから本文です
Windowsにも Linux にも対応 10兆円規模に対応

書庫全体表示

シェルスクリプトでwhileループを使っていて、はまってしまったことがあります。
はまったといっても、喜んでする意味ではなく、困ったという意味です。
下のスクリプトは、エラーが出ます。
acelistというファイルに連番がついていてそれを循環させて並べ替える処理です。
whileループの中で使っている iとlineという変数が、ループを出ると使えなくなるんです。
原因は、whileループにパイプでファイル名を流し込んでいるところにあります。
そうすると、whileループが別のルーチンを作ってしまって上記の現象が出ます。

#############################################################
#acelistの並べ替え
#############################################################
((i=0))
ls -1 | grep acelist | while read line
do
if [ $i -eq 0 ]
then
cp $line wlist
wline=$line
else
cp $line $wline
wline=$line
fi
((++i))
done 
cp wlist $wline
rm temp
rm wlist
echo $i"件のacelistの並べ替えが終わりました"

そこで下記のように、流し込むためのtempファイルを作って、お尻(done)から突っ込んでいます。
なんかとても下品な表現ですが、これなら上手く行きます。勉強になりました。

#!/bin/bash
#############################################################
#acelistの並べ替え
#############################################################
((i=0))
ls -1 | grep acelist > temp
while read line
do
if [ $i -eq 0 ]
then
cp $line wlist
wline=$line
else
cp $line $wline
wline=$line
fi
((++i))
done < temp
cp wlist $wline
rm temp
rm wlist
echo $i"件のacelistの並べ替えが終わりました"

顔アイコン

顔アイコン・表示画像の選択

絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
  • 名前
  • パスワード
  • ブログ

本文はここまでですこのページの先頭へ
みんなの更新記事