タグ

shとprogrammingに関するAmaiSaetaのブックマーク (12)

  • シェルスクリプトのテストを書こう! - Mobile Factory Tech Blog

    駅メモチームでエンジニアをしている id:Eadaeda です。シバンは #!/usr/bin/envを使う派です。 皆さんはシェルスクリプト書いてますか? 環境構築、開発、テスト、ビルド、デプロイなどなど、一連の作業を自動化するための手段として時々出番があるんじゃないでしょうか。 ところでそのシェルスクリプト、テスト書いてますか? シェルスクリプトのテスト 「シェルスクリプトのテスト〜?」って感じですよね。殆どの場合、一度書いてしまえばあんまり壊れることはないし別に…って感じですよね。わかります。実際開発環境のためにdocker compose upするだけのスクリプトなら雑でもいいですよね。 でも、重要な役割をもつスクリプトならどうでしょう。例えばアプリケーションのエントリーポイントや、リリースビルド・デプロイのためのスクリプトなどが思いつきます。 こういうのはテストである程度保証され

    シェルスクリプトのテストを書こう! - Mobile Factory Tech Blog
  • シェルスクリプト(sh/bash/zsh)で変数から変数へ代入する方法について - Qiita

    以下 sh/bash/zsh について同様ですが、例では bash とします。 変数から変数への代入 シェルスクリプトで変数から変数へ代入する場合、ダブルコーテーション(")で括る必要はありません。

    シェルスクリプト(sh/bash/zsh)で変数から変数へ代入する方法について - Qiita
    AmaiSaeta
    AmaiSaeta 2021/10/07
    `$(~~)` の内容を `echo` したら改行が無くなる(空白になる)ので、 `$(~~~)` は改行を空白にするのかと思ってた……
  • getoptions を使って面倒なシェルスクリプトのオプション解析コードを自動生成しよう! - Qiita

    はじめに getoptions はシェルスクリプト用のオプションパーサーです。getopts や getopt の代わりに使うことができ、getoptions をインストールするだけで簡単にシェルスクリプトのオプション解析を実装することができます。しかし、不特定の人に配布するシェルスクリプトの場合は getoptions をインストールしてもらうというのは選択肢にならないかもしれません。 でも大丈夫! getoptions はオプションパーサーのジェネレータとして使うこともできます。ジェネレータとして使うと自分でオプションパーサーのコードを書く必要はありません。 オプションパーサーとしての使い方はこちら 「シェルスクリプト(bash等)の引数解析が究極的に簡単になりました」 使い方 オプションパーサーとして使う場合は getoptions コマンドをインストールするだけで使えますが、ジェネ

    getoptions を使って面倒なシェルスクリプトのオプション解析コードを自動生成しよう! - Qiita
  • シェルスクリプト用のPOSIX準拠で高速な前ゼロ削除とtrim関数の実装 〜それ本当に外部コマンド(sed,awk,tr)が必要ですか?〜 - Qiita

    シェルスクリプト用のPOSIX準拠で高速な前ゼロ削除とtrim関数の実装 〜それ当に外部コマンド(sed,awk,tr)が必要ですか?〜ShellScriptBashshellPOSIX はじめに この記事は「シェルスクリプトは ((i=i+1)) ではなく i=$((i+1)) で計算しなければいけない!という話」を書いた時に、そう言えば算術式($((...)))では頭に 0 がついた時に 8 進数とみなされるというささいな問題がありましたねーということで、その解決方法と一般化すればこれは前から書こうと思っていた外部コマンドを使わない trim 関数の実装の話なので、ついでにそれらを紹介する記事です。 このような処理をする場合に外部コマンドを使って実装する人が多いですが、実はシェルのパラメータ展開を利用すればシェルの機能だけで実装することができます。そしてデータが十分小さい場合にはその

    シェルスクリプト用のPOSIX準拠で高速な前ゼロ削除とtrim関数の実装 〜それ本当に外部コマンド(sed,awk,tr)が必要ですか?〜 - Qiita
  • ShellCheck – shell script analysis tool

    GPLv3: free as in freedom documented on the ShellCheck Wiki available on GitHub (as is this website) already packaged for your distro or package manager supported as an integrated linter in major editors available in CodeClimate, Codacy and CodeFactor to auto-check your GitHub repo written in Haskell, if you're into that sort of thing.

    AmaiSaeta
    AmaiSaeta 2019/07/24
    bash/shのlinterみたいな物かね。
  • プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話 - Qiita

    プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話ShellScriptBash 普通のプログラミング言語での開発に慣れた人ほどシェルスクリプト、特にBashで戸惑う部分の一つに、i = 0のように空白を開ければエラーになるし、かといってif[$i!=0]のように詰めてもやっぱりエラーになる、という点が挙げられます。書きたい物を思うように書けなくて「なんだよこのクソ言語は!!!」とブチギレる人は少なくないのではないでしょうか。この記事では、そのイライラを解消するポイントをお伝えしようと思います。 以下、特に断り無く「シェルスクリプト」と書いている場合はすべて「Bashのスクリプト」という意味になります。zsh等他のシェルではまた事情が異なりますので、ご注意ください。 (※以前プログラマーの君! 騙されるな! シェルスクリプトはそう書いち

    プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話 - Qiita
    AmaiSaeta
    AmaiSaeta 2018/07/25
    「想定外の使い方しといて文句言うな」という話ではある。 | 注釈3はちょっと前に悟った。
  • シェルスクリプトを何万倍も遅くしないためには —— ループせずフィルタしよう - Qiita

    🐚 🐚 🐚 🐚 シェルスクリプトは遅すぎて使えない 普通の「速い言語」より何百、いや、何千倍も遅い 他のプログラミング言語を経験してからシェルスクリプトに入門し、このような感想を持つ方も多いのではないでしょうか。 実際、こういったことは往々にして起こり得ますので、「速い言語」を使うべきか否か見極めることは大事だと思います。 しかし、当にシェルスクリプトというのは、そこまで遅いのでしょうか? データ量が多い場合は常に最初から「速い言語」で書いた方がよいのでしょうか? 実は、そうとも限りません。 シェルスクリプトにはシェルスクリプトなりの「速い書き方」があります。 この「速い書き方」で処理できる問題に関しては、シェルスクリプトは「速い言語」なのです。 では、「速い書き方」とは何かというと、端的には「たくさん繰り返されるループはシェルスクリプトで記述しない」ことです。 以下でこれを説明

    シェルスクリプトを何万倍も遅くしないためには —— ループせずフィルタしよう - Qiita
    AmaiSaeta
    AmaiSaeta 2017/12/02
    文法……というか思想レベルで違う物で同じやり方を通そうとすれば、そりゃ無理が出てくるよなぁ。
  • 標準出力を変数に代入する方法あれこれ - 出力を入力へ

    シェルスクリプトにおいて標準出力(標準エラー出力)される文字列を変数に代入して取り扱う方法について。 対象とする関数として以下のものを利用。 sayHello(){ sleep 10 echo "hello stdout" echo "hello stderr" >&2 } 直接変数に代入する 変数messageに出力を代入したければ以下のようにすればよい message=`sayHello` echo ${message} この結果は以下の通り hello stderr hello stdout つまり、関数"sayHello"実行時にエラー出力が表示され、 標準出力は変数messageへの代入を経由して出力される。 これではエラー出力結果を別の変数に代入することはできない。 また、関数"sayHello"をバックグラウンドで実行したい時には 標準出力を変数に代入することができない。 フ

    標準出力を変数に代入する方法あれこれ - 出力を入力へ
    AmaiSaeta
    AmaiSaeta 2014/04/14
    VAR = `SOMECOMMAND`
  • シェルスクリプトの[[と[の違い

    Yoshiaki Kawazu🐸ずん @kawaz シェルスクリプトのテストコマンド [ と [[ の違い。 [[はbashの組み込みコマンドで、[は単にtestという外部コマンドの別名。なので必然[[の方が速い。 [[では比較演算子の<と>がエスケープなしで使える。[では¥<や¥>とする必要がある。 (続く… 2013-02-12 14:05:41 Yoshiaki Kawazu🐸ずん @kawaz (続き) [[では比較演算子の<と>がロケールに応じた辞書順比較になる。[ではASCII辞書順。 [[では=~で正規表現マッチングが使える。bashバージョン3以降の機能。 [[では演算子を"-f"のようにクオートするとエラーになる。]では問題ない。 こんなところかな。 2013-02-12 14:07:56

    シェルスクリプトの[[と[の違い
  • Mahdi Yusuf

    Fear Not of Man

    Mahdi Yusuf
    AmaiSaeta
    AmaiSaeta 2012/08/07
    Lispワロタ | 全体的に"E""R""T""A""S"辺りが多いのかな。
  • "set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - 元RX-7乗りの適当な日々

    「シェルスクリプトの実行過程でエラーが発生した場合に処理を止めたい」・・・それをすごくシンプル(簡単)に実現したい場合に使えます。 例えば、以下のようなシェルスクリプトを書いた場合、、、 #!/bin/sh mkdir /tmp/hoge/fuga touch /tmp/hoge/fuga/test.txt 実行結果は以下のようになります。 $ ./test.sh mkdir: ディレクトリ `/tmp/hoge/fuga' を作成できません: そのようなファイルやディレクトリはありません touch: `/tmp/hoge/fuga/test.txt'にtouchできませんでした: そのようなファイルやディレクトリはありません/tmp/hogeディレクトリが存在しないので、/tmp/hoge/fugaのmkdirでこけます。まぁ普通ですよね。。。 が、何も考えずに書くと、↑のように、その

    "set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - 元RX-7乗りの適当な日々
  • シェルスクリプトの基本テクニックを盗め!:CodeZine

    1. はじめに 稿では、実際に活用されているシェルスクリプトを取り上げ、シェルスクリプトを作成する際のいくつかのテクニックを紹介します。どれも基的で応用範囲の広いテクニックなので、多くの読者に参考にしていただければと思います。2. シェルスクリプト サーバ運用にしろ業務システム運用にしろ、LinuxやFreeBSDといったUNIX系OSを活用する場合、ツールとしてのシェルスクリプトは欠かせない存在です。いかにして建設的に手を抜きつつ、処理を自動化して効率化を達成できるかどうかは、シェルスクリプトの活用いかんにかかっていると言ってもいいでしょう。 もちろんそれはシェルスクリプトに限らず、ほかのプログラミング言語でも問題ありません。シェルスクリプトと他のプログラミング言語を比べた場合、シェルで使っているコマンドをそのまま使えることが、シェルスクリプトの最大の特徴であり利点です。 他人が作成

  • 1