とりあえずまとめ SSHログイン先では実行スクリプトと停止スクリプトを対にしておくこと trapによる処理を書くこと watch_dogのスクリプトを用意してタイムアウトさせること [基本] シェルスクリプトからSSHでコマンド実行 まずは基本として,SSHでコマンドを送り込むためのメモ.ちなみに環境はUbuntuでやってます. CentOSの場合はパーミッションで蹴られることが多いので注意してください. SSH設定 パスフレーズ無しの鍵を作ってリモートへログインできるようにする.まずはログイン元の端末で下記のコマンドを実行して秘密鍵・公開鍵のペアを作成. $ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (...): [ファイル名を指定する] En
シェルスクリプトやCUIでLinuxを操作していると、バイトで記述された容量を人が読みやすい状態に加工したい時がある。 それを簡単に行えるのが、Coreutils 8.22から追加された『numfmt』コマンドだ。 少なくとも、CentOS 7やUbuntu 14.04 LTSでは標準で利用することが出来る。 このコマンドの使い方については、もう見てもらった方が早いだろう。 以下のようにechoで「4096000(4MB相当)」を出力し、それをnumfmtに渡す。すると… echo 4096000 | numfmt --to=iec [root@test-apache ~]# echo 4096000 4096000 [root@test-apache ~]# echo 4096000 | numfmt --to=iec 4.0M このように、人が見てわかりやすい容量に加工してくれるのだ。
プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話ShellScriptBash 普通のプログラミング言語での開発に慣れた人ほどシェルスクリプト、特にBashで戸惑う部分の一つに、i = 0のように空白を開ければエラーになるし、かといってif[$i!=0]のように詰めてもやっぱりエラーになる、という点が挙げられます。書きたい物を思うように書けなくて「なんだよこのクソ言語は!!!」とブチギレる人は少なくないのではないでしょうか。この記事では、そのイライラを解消するポイントをお伝えしようと思います。 以下、特に断り無く「シェルスクリプト」と書いている場合はすべて「Bashのスクリプト」という意味になります。zsh等他のシェルではまた事情が異なりますので、ご注意ください。 (※以前プログラマーの君! 騙されるな! シェルスクリプトはそう書いち
私はシェルスクリプトの大ファンで、他人のスクリプトから面白い方法を学ぶのが大好きだ。最近、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
「複数のリモートホストで同じコマンドを一斉実行したい」と思うことはよくありますが、これらのツールを使うことで実現出来ます。 Cluster SSH ClusterIt DSH - dancer's shell / distributed shell GXP Grid & Cluster Shell Parallel ssh Parallel Distributed Shell PyDSH ssssh Svengali この中でも Parallel Distributed Shell(以下、pdsh)は学習コストが低く、簡単に使い始めることが出来ます。今回はこの pdsh を使ってみます。前提条件として、ssh で公開鍵認証方式を利用するにはなどを参考に、操作元となるホストから操作対象となる複数のリモートホストへ ssh の公開鍵認証方式でログイン出来るよう、予め設定しておきます。 インスト
Friday I/O 株式会社ワムウでは、毎週金曜日は 興味がある事柄に取り組み、その成果を何らかの形でアウトプットする日 としています。 はじめに Dockerを使用した開発では docke-run , docker-compose run のようなコマンドと引数の数が複雑になりがちです。 そのために皆さん都度ラッパースクリプトを記述し解決を図ることでしょう。 しかし時間が経った後に、そのスクリプトを走らせようとした時はしばしばラッパースクリプトのサブコマンドを忘れていたりするものです。 Usage を丁寧に記述することで、この問題は解決することにはなりますが Usageを都度メンテナンスする必要がある という別の問題が発生します。 これらの問題を解決するために シェルスクリプトを自己文章化する という解決策を提示します。 実現方法 下記のように Usage をファイルの先頭にまとめて記
ドットインストールのシェルスクリプト入門 #04 特殊変数を使ってみよう(新しいタブで開く)を見ていると、特殊変数(以下、特殊パラメータとします)として5つのパラメータが紹介されています。 $1, $2 ... 引数。引数の順番 $0 スクリプトの名前 $# 引数の数 $@ すべての引数の表示 $* $@と同じ 一方、新しいシェルプログラミングの教科書(新しいタブで開く)のP.42を読んでいると4つの特殊パラーメータが表現されています。 $# (ドットインストールと同じ) $? 直前に実行したコマンドのステータス値 $$ 現在のプロセスのプロセスID $! 最後に実行したバックグラウンドコマンドのプロセスID 今回の記事では、ドットインストールの記事では紹介されていない、”$?“の重要性について考えてみたいと思います。なお今回の記事を書くにあたって、下記の3つのページを参考にしています。
@hirose31 さんが「シェルスクリプトでハマった件→【募】ステキな回避方法」でお題を出されていて、それに回答してみました。 その内容はリンク先を見てもらうとして、回答の中で使ったbashのプロセス置換について書かれた記事をあまり見ないので、回答で使ったプロセス置換のことをエントリにしてみたいと思います。 最初に注意点ですが、プロセス置換の機能は、bashやzsh*1の機能でPOSIX互換の機能ではありません。そのため、使用時には、対応していないシェルでは使えませんし、bashで使う場合も /bin/sh ではなく /bin/bash を明示的に指定する必要があります。たとえば、プロセス置換を使ったスクリプト「script.sh」に対して"$ bash script.sh" というコマンドは成功しますが、"$ sh script.sh" というコマンドは失敗します。この辺りの違いは「/
こんにちは、初心者向け基本コマンドを紹介しているシェルスクリプト入門です。 最後で、ファイル名を一発で変える簡単なシェルスクリプトを書いてみましょう。 環境:Mac OSX El Capitan Terminal; bash / sh shell environment; シェルスクリプトとは シェルスクリプトとは、簡単に言うとUnixコマンドなどを並んで実行するだけです。 いつ何の条件で何の命令を実行するとか、ファイルコンテンツを読み込むとか、ログファイルを書き出すとかをする役割です。 基本設定 test.shファイルを作成します。 シェルスクリプトファイルは基本的に.shの拡張子で作成します。 実際のコードを書く前に最初の一行目は #!/bin/shを書き、システムにこれからシェルスクリプトを書きますようと知らせるものです。(#はhash、!はbangですから、#!をshebangと言
拡張 POSIX シェルスクリプト Advent Calendar 2013、6日目の記事です。 本日のお題は「一時ファイルの作成と削除」ですが、 よくあるシェルスクリプトのダメ出しネタになってしまいました。 安全な一時ファイルの作成方法 たとえば、こんな感じのありがち(?)なスクリプトがあったとします。 意味のない処理内容ですが、雰囲気だけ察してください。 #!/bin/bash tmpfile=/tmp/words.tmp rm -f $tmpfile echo 'しにたい' >>$tmpfile echo 'とりあえずねよう' >>$tmpfile sleep 3 echo -n '今どんな気持ち? ' read feeling echo $feeling >>$tmpfile cat $tmpfile rm $tmpfile 全然駄目ですね。 もし「何にも問題ないじゃないか!」とい
この記事はShell Script Advent Calendar 2017の記事です。 個人でAWSのようなクラウドサービス使ってると、クラウド破産しないかドキドキしませんか? 僕は怖いのでコンソールで確認をしてましたが、めんどくさくなってきたので端末にログインしたときに料金を表示させようと思いました。 前提 対象クラウド AWS OS Ubuntu16.04 手順 まず以下のようなシェルを作ります。 #!/bin/bash # 超えたくない「月の料金(ドル)」を指定 threshold=1 billing_file_path=/tmp/now_billing now_date=$(date +%Y%m%d) test -e ${billing_file_path} || mkdir -p ${billing_file_path} if [ ! -e "${billing_file_pa
はじめに GoogleさんがShellスタイルガイドを共有していたので、いくつか気になった点をピックアップしました。 自分のShellスタイルはかなり我流なので、自省の意味も込めてコメントも併記します。 Googleスタイルガイドの元ネタ (Python/C++/Java/Rとかだけでなくdocumentガイドなど色々あります) https://github.com/google/styleguide Shellスタイルガイド (今回はこちら) http://google.github.io/styleguide/shell.xml 本当は人間がチェックするのではなくcpplintのためXML定義なのかもですが、気にしない気にしない。 (見たところcpplintはc++だけだと思ってます) commitフックでshell系のlint走らせろっていうのが今風なのかもしれませんが、キニシナイキ
シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く