シェルスクリプト(bash)でforやwhileを使っての繰り返し処理を、ワンライナーで書く方法です。(自分用備忘録)
forによる繰り返し
基本はこんな感じです。
for i in リスト; do コマンド; done
リスト部分にはブレーズ展開({}で括る)や算術式、コマンドの実行結果やなども使用することができます。
for i in 数字1 数字2 数字3; do コマンド; done for i in {スタート..エンド}; do コマンド; done for (( i=スタート; i<エンド; i++ )); do コマンド; done array=(リスト); for i in ${array[@]}; do echo $i;done for i in `コマンド`; do コマンド; done for i in $(コマンド); do コマンド; done
実行例
どれも1から3までを表示させるワンライナーです。
for i in 1 2 3; do echo $i; done for i in {1..3}; do echo $i; done for (( i=1; i<4; i++ )); do echo $i ; done array=(1 2 3); for i in ${array[@]}; do echo $i;done
どちらもtest.txtのファイルをcatで開いてその内容を表示させるワンライナーです
for i in `cat test.txt`; do echo $i; done for i in $(cat test.txt); do echo $i; done
テストファイルの作成
こんな感じに/dev/zeroや/dev/randomを使って、簡単にテスト用ファイルを作成させることもできます。
コマンド部分は$()や``で括ります。
for i in {1..5}; do $(dd if=/dev/zero of=file_$i bs=1000 count=5000); done for i in {1..5}; do `dd if=/dev/random of=file_$i bs=1000 count=5000`; done
ddでテストファイルを作成する方法はこちらのページで解説しています。
https://www.server-memo.net/tips/test-data.html
whileによる繰り返し
whileを使って繰り返しを処理を実行するワンライナーの書き方です。
while 条件; do 処理; done
回数指定
変数iを先に指定して、指定した数まで処理を実行させます。
下記は1から3までを表示させるワンライナーです。
i=1; while [ $i -le 3 ]; do echo $i; i=`expr $i + 1`; done i=1; while ((i < 4)); do echo $i; i=$(( i + 1 )); done
無限ループ
whileで「true」や「:」を指定することで、無限ループさせることができます。
ループを終了させるにはCtrl + c で終了させることができます。
注意点としては、sleepを入れないとものすごい勢いで処理が実行され続けてしまいます。
while true; do コマンド;sleep 時間; done while :; do コマンド;sleep 時間; done
下記はどちらも時刻を表示させるdateコマンドを、5秒ごとに表示させています。
$ while true; do date;sleep 5; done 2022年 12月 3日 土曜日 10:29:37 JST 2022年 12月 3日 土曜日 10:29:42 JST 2022年 12月 3日 土曜日 10:29:47 JST ^C ### Ctrl + cで終了 $ while :; do date;sleep 5; done 2022年 12月 3日 土曜日 10:29:58 JST 2022年 12月 3日 土曜日 10:30:03 JST 2022年 12月 3日 土曜日 10:30:08 JST ^C ### Ctrl + cで終了
ファイルから読み込み
while readでファイルを読み込みechoで内容を表示させます。
while read line; do echo "$line"; done < ファイル
test.txtのファイルを読み込み、内容を表示させています。
$ while read line; do echo "$line"; done < ./test.txt test_1 test_2 test_3
コメント