タグ

shellscriptに関するlearnのブックマーク (12)

  • シェルスクリプトの罠を避ける三つの tips

    シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も

    シェルスクリプトの罠を避ける三つの tips
  • bash 2重起動を慎重に抑止する。 - Qiita

    参考情報:シェルスクリプトでの排他処理 概要 2重起動をbashで抑止しようとした場合、lockファイルを作成するだけだと、 不慮のプロセス停止になった場合、lockファイルが削除されずに、 手でlockファイルを削除しないと永遠に起動出来ないことになってしまう。 それではちょっと不便なので、なんとか当に2重起動しようとしているかどうか、 pid(Process ID)も組み合わせて、判断するようにしてみた。 以下の条件を完全に満たす場合、2重起動とする。 自ファイル名.pidファイル が存在している →lockファイル方式 ファイルの1行目に書かれているプロセスが存在した場合 (/proc/ ディレクトリにpidのディレクトリが存在する) →不慮の事故(kill -9)等によりlockファイルが残っていた場合の自動リカバリ処理 自分と同じプロセス名を検索結果のpid一覧と.pidファイ

    bash 2重起動を慎重に抑止する。 - Qiita
  • HOME | deactivate-domain

    You recently received an email asking you to confirm your contact details. Because you didn’t confirm within 15 days, your domain was deactivated. ​ Final reminder: we’re holding onto your domain for an additional 7 days. After that, you won’t be able to reactivate it. To keep this domain, reactivate it as soon as possible.

  • AWSで構築した環境にありがちなシェルスクリプトたち まとめ | DevelopersIO

    AWSでサーバを運用する際にはEC2からAWS CLIを使って他のAWSのサービスと連携したりすることがあると思いますが、AWS環境ならではのシェルスクリプトを集めてみました。AWS CLIのバージョンは1.7.13、Pythonのバージョンは2.6.9を使っています。私はAmazon Linuxで動作を確認しています。 目次 準備する AWS CLIのインストール AWS CLIのアップデート aws configureでセットアップする IAM roles for EC2 instancesに関して 監視系 CloudWatchでカスタムメトリクスを設定する ZabbixからCloudWatchの値を取得する プロセス監視する バックアップ系 AMIとEBSのバックアップを作成する RDSのスナップショットを作成する S3のフォルダを削除する 便利スクリプト系 Route53の自動登録

    AWSで構築した環境にありがちなシェルスクリプトたち まとめ | DevelopersIO
  • 使いやすいシェルスクリプトを書く

    できればシェルスクリプトなんて書きたくないんだけど,まだまだ書く機会は多い.シェル芸やワンライナーのような凝ったことではなく,他のひとが使いやすいシェルスクリプトを書くために自分が実践していることをまとめておく. ヘルプメッセージ 書いてるシェルスクリプトが使い捨てではなく何度も使うものである場合は,体を書き始める前に,そのスクリプトの使い方を表示するusage関数を書いてしまう. これを書いておくと,後々チームへ共有がしやすくなる.とりあえずusage見てくださいと言える.また,あらかじめ書くことで,単なるシェルスクリプトであっても自分の中で動作を整理してから書き始めることができる.関数として書くのは,usageを表示してあげるとよい場面がいくつかあり,使い回すことができるため. 以下のように書く. function usage { cat <<EOF $(basename ${0})

  • 私が他人のシェルスクリプトから学んだこと | Yakst

    私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、SSHサーバの2要素認証を簡単にするためのauthy-sshスクリプトに出会った。このスクリプト群を見まわしていて、みんなと共有したいたくさんのクールなことを見つけた。 出力に色付けする 出力文字列を、成功した時は緑に、失敗した時は赤に、警告は黄色に色づけしたいと思うことはたくさんあるだろう。 NORMAL=$(tput sgr0) GREEN=$(tput setaf 2; tput bold) YELLOW=$(tput setaf 3) RED=$(tput setaf 1) function red() { echo -e "$RED$*$NORMAL" } function green() { echo -e "$GREEN$*$NORMAL" } function yellow() { e

    私が他人のシェルスクリプトから学んだこと | Yakst
  • bashの正規表現マッチングの使い方 - adsaria mood

    あるフリーウェアのインストール用bashプログラムを見ていたら次の様なものがあった。(以下の例は簡略化してある。) STRING="abc" if [[ "$STRING" =~ "^ab[cd]$" ]]; then echo "matched" else echo "unmatched" fi if文の条件表現の中に“=~”というオペレータがある。manを見ると =~ オペレータは文字列を正規表現と比較するとある。知らなかった。bashの文字列比較で正規表現が使えるとは。私は正規表現比較が必要な時はgrepに喰わせて判断していたのだが、これを使えば簡単にできる。 ところが、だ。上のプログラムが期待通りに動かない。上の例では =~ の左辺と右辺の正規表現はマッチするはずだが、結果は“unmatched”。色々と正規表現を変えてみたが、どれとしてマッチングしない。しかし、if文を次のように

    bashの正規表現マッチングの使い方 - adsaria mood
  • bashの配列変数に関するTips - y-kawazの日記

    序文(飛ばしてよし) まず話は僕が書いてたスクリプトで、引数から"最後の"値だけを分離したものを使いたかったってのが始まりです。 最初の引数の分離なら shift でいけるんだが、最後をいきなり分離するのが直接は出来ないっぽいので、格闘の結果以下のように解決しました。 #!/bin/sh ARGS=("$@") echo "最後以外: ${ARGS[@]:0:((${#ARGS[@]}-1))}" echo "最後のみ: ${ARGS[((${#ARGS[@]}-1))]}" echo "最後のみ: ${ARGS[-1]}" # bash-4.2 以降なら負のインデックスが使える! 以下が上記スクリプトの実行結果です。 $ ./test.sh a b c d 最後以外: a b c 最後のみ: d やっていることは、まず引数をARGVという配列変数に詰めなおして、その後配列変数に対するスラ

    bashの配列変数に関するTips - y-kawazの日記
  • 遅延環境変数(バッチスクリプト)

    バッチスクリプトでハマッたのでメモ。 if文、for文の中で変数を変更しても、変数の値が反映されない。 これは、if文、for文処理が「終わった後」に変数の値が反映される仕様だから。 問題事象と解決策は以下のとおり。 【問題事象】 @echo off setlocal set TEST="aaaa" if %TEST% == "aaaa" ( set TEST="bbbb" echo %TEST% ) endlocal ↓出力 aaaa 【解決策】 enabledelayedexpansion で「遅延環境変数」を有効にすると、変数名を”!”(感嘆符)で囲うことですぐに反映させることができる。 @echo off setlocal enabledelayedexpansion set TEST="aaaa" if %TEST% == "aaaa" ( set TEST="bbbb"

  • ERRORLEVELについてのメモ (2) - とあるソフトウェア開発者のブログ

    前回の続きです。(前回: id:simply-k:20100812:1281653517) ERRORLEVELが設定されない場合 説明 コマンドやバッチスクリプトを実行しても、ERRORLEVELが設定されない場合がある。 ERRORLEVELを設定しないコマンドが存在する。(echo、pause、remなど) *1 callしたバッチスクリプトが、ERRORLEVELを変更するような処理をせず、さらに終了コードを指定せずに終了した場合 callしたバッチスクリプトが、callされた段階でのERRORLEVELを終了コードとして指定する場合 動作確認 テスト用のバッチファイル @echo off rem テスト1 (echo) call :set_errorlevel 10 echo [test-1-1] %ERRORLEVEL% echo [test-1-2] %ERRORLEVEL%

    ERRORLEVELについてのメモ (2) - とあるソフトウェア開発者のブログ
  • shunit2 - Google Code

    Code Archive Skip to content Google About Google Privacy Terms

  • UNIX FAQ LIST #3.8

    Subject: Why doesn't redirecting a loop work as intended? (Bourne shell) Date: Thu Mar 18 17:16:55 EST 1993 3.8) なぜループの出力をリダイレクトしても思いどうり動かないのか (B-shell)。 次のような例で考えてみます。 foo=bar while read line do # do something with $line foo=bletch done < /etc/passwd echo "foo is now: $foo" 多くの Bourne シェルの実装では、``foo=bletch'' としたのに ``foo is now: bar'' と出力されてしまいます。なぜでしょう。これは以下の ような、あまり文書化されていませんが、歴代のBourneシェルの仕様のせい

  • 1