シェルスクリプトは長くなると処理の境界が不鮮明になりがち。 コメントで処理の境界を表現する工夫はよく見かけるが、もっと良い方法はないか考えてみた。 :コマンド、&&演算子、複合コマンド()や{}を組み合わせて書くと、処理の境界線がはっきりする。
モチベーション デバッグしやすくしたい 1. Bashオプション(bash -uvx) 動作確認用スクリプト #!/bin/bash : [DEBUG] set param readonly SCORE_ARRAY=(100 90 80 70) readonly COUNTS=${#SCORE_ARRAY[@]} function cal_score_ave() { local _score_sum=i : [DEBUG] cal for _score in ${SCORE_ARRAY[@]} do _score_sum=$((_score_sum + _score)) done score_ave=$((_score_sum / COUNTS)) return 0 } : [DEBUG] main cal_score_ave echo $score_ave echo $param ech
シェルスクリプトの中で、スペース区切りもしくはタブ区切りのレコードを扱うことがよくあると思います。 たとえば、前回のエントリ「AWS CLIとjqを使って、AWSのELBボリュームがアタッチされているEC2インスタンス名を出力するワンライナーを書いた - 双六工場日誌」のスクリプトの出力は以下のようになります。 i-ec56a9f5 vol-07d00601 servername i-ec56a9f5 vol-8f550991 servername このようなレコードの特定の列を取り出して、処理する際にどうするのが効率的か、というのがこのエントリのお題です。 非常に古い話題なので、昔からシェルスクリプトを書いている人には自明な話ではありますが、最近、シェルの標準機能の話を聞く機会がなく、失われつつある技術になってきている気がしているので、改めて確認ということで。 例として挙げたレコードから
シェルプログラミングにおいて、ループカウンタなどをインクリメントするとき、どのようにしますか? いきなりですがサンプルから。 #!/bin/bash COUNT=0 while [ $COUNT -lt 1000 ]; do # 何かの処理 COUNT=`expr $COUNT + 1` # COUNT をインクリメント done expr コマンドを使う? シェルプログラミングの入門記事などを見ると、変数のインクリメントに上記のような COUNT=`expr $COUNT + 1` を用いているものが多くあります。 しかし、この書き方は とても遅い です。空のループを1000回繰り返すだけでも手元の mac (Core i7) で約2秒もかかってしまいました。
[第136回関西Debian勉強会 + Linux Kernel 勉強会 LT大会](https://debianjp.connpass.com/event/90376/)での発表資料です。
B! 119 0 0 0 前から気になってた ShellCheck を使ってシェルスクリプトや.bashrc等直してみました。 ShellCheck コマンドライン版 日本語を含んだファイル Vimでは ShellCheck ShellCheck はシェルスクリプトの文法をチェックしてくれるオンラインサービスです。 ShellCheckのページに行って 試したいスクリプトを書き込むと文法をチェックして エラーや注意を表示してくれます。 指摘してくれるものとしては、明らかな文法違反な物は勿論、 実際にスクリプトを回して毎回エラーになるものでなくても、 変数が空の場合に""で囲ってないとエラーになる場合なども チェックしてくれるので思わぬ事故も防いでくれます。 コマンドライン版 ShellCheckのソースコードはGitHubで公開されていて、 さらにコマンドライン版のshellcheckを使
開発作業では、ターミナルでシェルってよく使っていますよねー♪ 僕は zsh を使っています!! シェルは色々カスタマイズしているんですが、通常シェルの設定をした後はファイルを読み込み直したりします。 やり方としては大体以下の感じだと思います。 sourceコマンドで .zshrc などを読み込む シェルを再ログイン(再起動)して読み込む 今回は 2. シェルの再ログイン について書いてみます。 シェルの再起動方法 一旦 exit してターミナルを立ち上げなおす ということをしていましたが、なんかだるいなーということで調べてみるとありました!! 以下のコマンドを実行することで、ログインシェルから起動したようにシェルを再起動できます!! relogin というコマンドで実行できます。 以上!ということで終わりでもいいですが、exec $SHELL -l の意味がよくわからない。。。 シェルの情
最新の類似投稿としてシェルスクリプトのコーディングルール2014も併せてどうぞ。 2014/10/09追記 ぼくがシェルスクリプトを書くときに気にしていること、過去の失敗で書き留めたことを忘れないために。 1. グローバル変数は大文字 PATH や HOME など、環境変数が大文字なので、エクスポートする変数を大文字で書くという習慣は一般的であるような気がしますが、エクスポートする変数を抱えるシェルスクリプトを作成する機会が稀なので。 グローバル変数は大文字 ローカル変数は小文字 エクスポートする変数も大文字 関数内からグローバル変数にアクセスする場合がありますが、やはり区別していると、可読性が増すような気がするのでお勧めです。 2. awk を知る Unix 上にて文書処理をするときに、数多くのフィルタコマンド(grep、cut、tr、head、sort、uniq、sed、awk、wc、
Index データ集計コマンド 爆速で検索したいぜ! lookを使う LC_ALL=Cを設定する データのランダムサンプリングがしたいぜ! sedを使う awkを使う sortの--random-sortを使う Script言語を使う shufを使う ランダムサンプリング速度比較 合計と平均値を集計したいぜ! 列データ取得 重複行のカウント 合計値出力 平均値出力 複数ファイルのデータ結合がしたいぜ! 共通項目での結合 同じ行数での結合 まとめ データ集計コマンド joinコマンドが便利過ぎて生きるのが辛い - Yuta.Kikuchiの日記 lookコマンドによる二分探索が速すぎて見えない - Yuta.Kikuchiの日記 今日はデータ集計を行う上で絶対に覚えておいた方が良いコマンドと知識を紹介したいと思います。これを身につければシステム処理と業務効率化に大きく繋がると思います。この記
Home»CakePHP»BakerがCakePHPのために.bashrcに設定すべき5行 (CakePHP Advent Calendar 2010 17日目) こんにちは、nojimageです。aerithさんからバトンを受けての CakePHP Advent Calendar 2010 17日目です。今日もユルユルな感じでいきましょう。はい。 今日のtipsは、Linux/Macを開発環境で使っている方向けのシェル環境設定のお話です。 (Windowsの人はゴメンナサイ。 CAKE_CONSOLE=/path_to_cakephp_root/cake/console PATH=$CAKE_CONSOLE:$PATH alias cake='cake/console/cake' alias bake='cake bake' alias cake-cc="find ./app/tmp/c
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く