You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
シェルスクリプトで set -e (errexit) しておくと、スクリプト中に実行したコマンドの終了ステータスが「非0」だった場合、つまりコマンドが失敗したときにそこでスクリプトを中断してくれるようになります。(終了ステータスとは「Exit code」「Return status」などと呼ばれるものです。) 都度エラー判定を書かなくてもよくなるので便利なオプションですが、個別にエラーハンドリングをしたくなった時にも意図せずスクリプトが中断されてしまい困ったことになります。 例えば、以下の例は false コマンドの実行で失敗扱いとなり、そこでスクリプトが中断されるため「finish」が出力されることはありません。 set -e # false コマンドは必ず終了ステータスに 1 (失敗) を返すコマンド # エラーが起きたとみなされスクリプトは中断される false # このコマンドは実
Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な
expect編以外に書くつもりは毛頭ありません。 manを見てもググってもどうにも手がつけられない程度に分かりづらかったので、備忘録としてまとめます。 expectって何? 対マシンに於いて発生する、マシンからの問いに対し、人間がキーを叩いて返答する、所謂対話を自動化するコマンド及びモジュールです。 今回はLinux上のexpectコマンドを取り上げますが、CでもC++でも同様の処理が実行可能なようです。 RubyやPerlでも書き換えられ、モジュールとして配布されているようです。 元はTclというプログラム言語ベースのコマンドです。 コマンドとは言いましたが、使い道はほぼスクリプトとなるかと思います。 というかコイツをワンライナーでどう使えばいいのかよくわかりません。 また、expectはコマンドというか言語であるようです。 expectはTclのスーパーセット(Tclを包括し、更にオプ
κeenです。雰囲気でシェルを使ってる人が多いとのことだったので少しばかり込み入った知識を。 あと一応POSIX準拠かどうかも気にしながらやっていきます。 基礎知識編 シェルの種類 まず、POSIXにシェルが定義されています。 これに最低限の機能で準拠しているものをPOSIXシェルと呼ぶことにします。いわゆる/bin/shです。具体的な実装はbsh、ash、dashあたりでしょうか。 最低限の機能以上に色々拡張されているシェルを拡張POSIXシェルと呼ぶことにします。具体的な実装はbash、zsh、kshなどでしょうか。 ここでは触れませんがPOSIX準拠でないシェルも存在してcshやtcshなどのシェルがあります。あと確か最近話題のfishも違ったような。 さて、1つ問題になるのは普段使いのコマンドラインはおおむね拡張POSIXシェルでしょうが、サーバで使うシェルやデプロイスクリプトで呼
$ mkdir /very/_very/Very-long/directory_name/20170915 なんて操作をしたあと、そのディレクトリにcdしたい場合ってまれによくありますよね。 どんなやり方があるか考えてみました。 1. コピペする そのまんまですが、これをやりたくなくてこの blog を書いてます。 2. TAB 補完で頑張る これも無いわけではないですが、間違えたりすることを考えると正直あんまりやりたくないです。 3. 上矢印キーで前コマンドを呼び出し、右矢印キーで先頭に戻ってmkdirをcdに書き直す よく見る方法ですが、もうすこし少ない手数でできないでしょうか。 4. 上矢印キーで前コマンドを呼び出し、Ctrl-Aで先頭に戻ってCtrl-Dx5 のあとにcd BASH のキーバインドはデフォルトだと emacs モードなので、このやり方が出来ます。 でもまだちょっと手
モチベーション デバッグしやすくしたい 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
Bash用テストフレームワークに、Batsやshunit2がありますが、イケてないなーと思ってたら、気づいたら自分で作ってました。 github.com テストの結果はモダンなテストフレームワークのように、カラフルに表示します。 またFAIL時は、FAILしたテストの結果を表示します。 自分の Arch Linux 上の Bash 4.3.42 および、Travis CI 上で動作することを確認しています。 インストール curl -o ~/bin/bashtub https://raw.githubusercontent.com/ueokande/bashtub/v0.1/bin/bashtub chmod +x ~/bin/bashtub です。ただし~/binはパスが通ってるとします。 これでターミナルから bashtub と打つことで実行できます。 bashtub テストを書く 各
できればシェルスクリプトなんて書きたくないんだけど,まだまだ書く機会は多い.シェル芸やワンライナーのような凝ったことではなく,他のひとが使いやすいシェルスクリプトを書くために自分が実践していることをまとめておく. ヘルプメッセージ 書いてるシェルスクリプトが使い捨てではなく何度も使うものである場合は,本体を書き始める前に,そのスクリプトの使い方を表示するusage関数を書いてしまう. これを書いておくと,後々チームへ共有がしやすくなる.とりあえずusage見てくださいと言える.また,あらかじめ書くことで,単なるシェルスクリプトであっても自分の中で動作を整理してから書き始めることができる.関数として書くのは,usageを表示してあげるとよい場面がいくつかあり,使い回すことができるため. 以下のように書く. function usage { cat <<EOF $(basename ${0})
こんにちは。 マネーフォワードでアグリゲーション開発を担当しています中川です。 今回のブログは、私が bash スクリプトを書く際に心がけている事のおさらいをします。 知ってて当たり前のことかも知れませんが、意外と理解されていないアレです。 では、私が bash スクリプトを書く際によく使う記述を一つずつ紹介します。 2種類の shebang シェルスクリプトの一行目に必ず記述する #! で始まる行を shebang と言います。 bash スクリプトの shebang は、bash を絶対パスで指定する方法と、env を使って指定する方法の二種類あります。 bash を絶対パスを指定する方法 #!/bin/bash env を使ってを指定する方法 #!/usr/bin/env bash 前者は /bin/bash が使われます。 (/bin/bash が存在しなければスクリプトの起動時に
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.
一部のサブシステムの構築で、プロビジョニングツールを捨ててみた。じゃあどうするのかというとシェルスクリプトでやる。今回はこのやりかたが一番楽できるような気がしたので試している。 具体的にはPackerからシェルスクリプトとServerspecを実行してAMIを煮込む。おいしくできあがったらそいつから構築。もしミドルウェアより下の層のコンフィグ類に変更があったらまた煮込む。構築する。新しい方に切り替える。つまり”捨てるインフラ”にする。 プラットフォームはAWS。 (追記)ちなみにchefなどのプロビジョニングツールがめんどくさいからシェルスクリプトにしたというよりは、捨てる前提のサーバだからシェルスクリプトでの構築も選択肢として出てきたということです。ただ自分個人の嗜好としてchefはもう飽きたというのも事実です。なお、オンプレだと同じサーバで継続してプロビジョニングすることになるのでch
[第136回関西Debian勉強会 + Linux Kernel 勉強会 LT大会](https://debianjp.connpass.com/event/90376/)での発表資料です。
直接実行した場合、別シェルが呼び出されますが、ドットコマンドでは実行したシェル(カレントシェル)から呼び出されます 例)test.sh hoge=123 echo $hoge直接実行 [user@system work]$ ./test.sh 123 [user@system work]$ echo $hoge →シェル変数の設定値は実行シェルには引き継がれない ドット「.」コマンドで実行 [user@system work]$ . ./test.sh 123 [user@system work]$ echo $hoge 123→値が設定されている ※ドットの場合は実行権限が無くても実行できます
→ 値のリストで変数を初期化する。 括弧内に値のリストを指定したものを変数に設定することで、その変数を配列として使用することができる。 ※ ksh の場合は set コマンドを使用して配列の設定を行う。括弧を使用した設定方法は使用できないこともあるので、ksh で配列を使用する場合は、set コマンドを使用する。 $ array=(111 "foo" 222 "bar" 333 "foobar") #↑配列に値を設定する。 $ echo $array 111 #↑インデックスを指定しない場合は、先頭の値のみが出力される。 $ echo ${array[@]} 111 foo 222 bar 333 foobar #↑全ての値を出力する場合は、インデックスに「@」を指定する。 ksh の場合は以下のように set コマンドを使用する。 $ set -A array 111 "foo" 222
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く