シェルスクリプト while文(2)

while文の条件ですが、進捗をみるときに消去していない(=消去完了しているとき)は以下のように

Not In Progressと出るのでNotの有無で完了/未完了を判別したいと思います。これにはgrepを用いて

storcli /cX/eX/sX show erase | grep Not

とすればOK。while文では条件を満たしている間はdo...done間の処理が行われるのでNotが入っていない間は進捗を表示させるというようにします。条件の否定は ! をつければ良いので、

while ! storcli /cX/eX/sX show erase | grep Not;
     do
         storcli /cX/eX/sX show erase
     done

とすればよい。これを実行すると、ターミナルに矢継ぎ早に進捗が表示され、画面にあふれてしまいます。こちらの意図は進捗を表示させるだけでいいので、ターミナルの表示をクリアするコマンドであるclearを入れて書き直すと

while ! storcli /cX/eX/sX show erase | grep Not;
     do
         storcli /cX/eX/sX show erase
         clear
     done

これで実行すると、今度はクリアの処理が早すぎて表示が点滅したようになってしまいます。ということで、クリアの処理を一定時間待ってから実行するようにsleepコマンドをclearコマンドの前に入れて以下のように直します。

while ! storcli /cX/eX/sX show erase | grep Not;
     do
         storcli /cX/eX/sX show erase
         sleep 3
         clear
     done

sleepコマンドの後ろにある3は3秒待つという意味です。ここでは3秒待ってから画面をクリアするようにしています。これで意図する動きとなります。具体的にコントローラ0、エンクロージャ0、スロット1のHDDを消去して進捗を見るには以下のようにすればOKです。

storcli /c0/e0/s1 start erase

while ! storcli /c0/e0/s1 show erase | grep Not;
     do
         storcli /c0/e0/s1 show erase
         sleep 3
         clear
     done

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です