かべぎわブログ

ブログです

シェルスクリプト

jsonの配列をシェルスクリプトとjqでループさせて取得する

概要 AWSCLIで取得した結果が配列というかJSONというかなんというかみたいな形式で非常にシェルスクリプト上でさわりにくいのでjqコマンドををつかって取得してみます。 前提 たとえばAWSCLIを実行してこんなかんじでインスタンスIDとインスタンスタイプを取…

awkのフィールド指定のところを変数で指定する

概要 awk '{print $1}'とかやる$1の部分を変数で指定したい。 やりかた awk -vのあとに変数=値で指定してあげる。 $ echo "AAA BBB CCC" | awk -v "wawawa=3" '{print $wawawa}' CCC シェルスクリプト内で宣言した変数を入れることも可能。 #!/bin/bash henn…

シェルスクリプトで複数インスタンスに一気にタグをつける

概要 シェルスクリプトとAWSCLIを利用して複数のインスタンスに一気にタグを付けてみたいと思います。 スクリプト こんなかんじでやってます。 肝心のAWSCLI実行部がJSONのなかに変数をしこむために地獄の様相を呈していますけれど仕方がなかった。 実行して…

mktempをつかってシェルスクリプトでユニークなtempファイルをつくる

概要 シェルスクリプトでtempファイルを作成するときに以下のようにすることが多いかと思います。 echo 'wawawa' > ./hoge.txt ただこれだとカレントディレクトリにすでにhoge.txtが存在した場合に上書きしてしまって、人の大事なtempファイルを消してしまっ…

シェルスクリプトでFizzBuzzをつくる

概要 なんだかんだで一度もやったことがなかったのでシェルスクリプトでFizz Buzzをつくってみました。 スクリプト おわりに ワイン飲みながら所要時間6分くらい なかなかなのでは? [改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでで…

$RANDOMの精度があまりよくないという話をきいたのでしらべてみる

概要 $RANDOMは乱数としてはそんなに精度が高くないみたいなはなしを聞いたような聞かなかったようなきがしたので雑に調べてみる。 調べ方 echo ${RANDOM}を無限ループでぶん回す 1億行くらいになったら止める ばらつきを集計する 1. echo ${RANDOM}を無限ル…

シェルスクリプト上で乱数を扱う方法まとめ3選

概要 シェルスクリプトを書いていて、乱数が使いたいなーと思ったときにつかえるコマンドをご紹介します。 ${RANDOM}をつかう bashのシェル変数である${RANDOM}を利用します。 この変数は参照されるたびに0~32767の値を返します。 手っ取り早いですが、あま…

readコマンドで対話的なシェルスクリプトをつくる

概要 readという標準入力を1行読み込むことのできるコマンドを利用して対話的なシェルスクリプトを作ってみようと思います。 スクリプト スクリプトはこんなかんじ ちょっとした説明 readコマンドを利用して標準出力を読み込んで変数に格納しています。 それ…

cd - で一つ前にいたディレクトリに戻る

概要 cd -コマンドを利用することで一つ前に自分が居たディレクトリに戻ることができます。 コマンド例 $ pwd /Users/kabegiwa/Downloads $ cd $ pwd /Users/kabegiwa $ cd - /Users/kabegiwa/Downloads おわりに これでまちがってcd実行してホームディレク…

pipをプロキシ環境で利用する

概要 pipコマンドをプロキシ環境で利用する方法についてご紹介します。 コマンド例 こんなかんじでオプションをつけてあげることでプロキシをとおした環境でもpipを利用することができます。 pip install awscli --proxy http://example.proxy:8080 [試して…

Ansibleのec2.pyの結果のJSONをホストグループ形式のファイルにしてみる

AnsibleでAWSのイントラを管理するときに利用するec2.pyの結果で応答されるJSONを人間に優しいホストグループ形式に変換してみたいと思います。 スクリプトはこんなかんじ スクリプト自体はこんなかんじです。 シェルスクリプトでsedで変換かけているだけで…

commコマンドで2つのテキストファイルの比較結果を出力する

あんまり知られてないような気がするけれど結構便利なcommコマンドについてまとめてみます。 commコマンドとは? commコマンドとは、2つのソートされたテキストファイルを比較できるコマンドです。 ファイルを比較して、片方のファイルにしか存在しない行や、…

Amazon Linux2 に自作サービスを追加する

今回はAmazonLinux2のSystemdに自作サービスを追加してみようと思います。 手順 サービスとして追加するスクリプトの準備 ユニットファイルを作成する 各項目のちょっとした解説 サービスとして認識されたかどうか確認する サービスを有効化(enable)する サ…

AWSCLIですべてのLambdaについているタグの一覧を表示するシェルスクリプト

概要 AWSCLIでLambdaのすべての関数についているタグの一覧を取得するシェルスクリプトを作成してみました。 aws lambda list-tagsはARNを指定することでその関数にアタッチされているタグを表示することができます。 ARN指定ですのですべての関数を見に行く…

Pythonのコマンドライン引数 雑チートシート(シェルスクリプトでできたことをやりたい)

シェルスクリプトの${なにがし}をPythonだとどうやって書くのかをまとめました。 (Linux上のシェルスクリプトを適宜Pythonにしたい) 雑チートシート Python ShellScript 説明 sys.argv[0] ${0} 自身のファイル名 sys.argv[1] ${1} 1番目の引数 len(sys.argv)…

diffで差分がないところだけ出力する

今回はdiffで差分がないところだけ出力してみます。 前提 比較するファイルは以下のようなものを用意しています。 $ cat foo.txt AAAAA BBBBB CCCCC $ cat bar.txt CCCCC DDDDD EEEEE 実行コマンド 以下のコマンドでdiffで差分のない部分だけを出力すること…

IPアドレスを2進数に分解するシェルスクリプト

IPアドレスとサブネットマスクでどこまでがネットワークアドレスなのかがわからなくなることが多かったので作りました。 ちょっとしたひまつぶしに作成したのでエラー処理等まじめにやっていないです。 実行例 こんなかんじで引数にIPアドレスをCIDR表記でわ…

シェルスクリプトがリモートで呼び出されたかどうかを判定する

シェルスクリプト内でリモートで呼び出されたか否かを判定してみたいと思います。 具体的にはremsh script.shと./script.shそれぞれで実行したときに違う結果を返すようなスクリプトをつくります。 コード ShellScript 結果 ・ローカルで実行 # ./remote_scr…

シェルスクリプトのデバッグ時に使えるbashのオプション5選

シェルスクリプトをデバッグしていてよく使うオプションを5つ紹介します! /bin/bash -e ./script.sh シェルスクリプトの中でエラー(終了ステータスが0以外)が発生した場合、そこでスクリプトを終了します。 ただし、自分の意図と反して終了することもあるの…

【シェルスクリプト】自分自身のPATHを取得する方法【絶対パス/相対パス】

今回はシェルスクリプト内で自分自身のPATHを取得する方法を紹介します。 相対パスを取得する 以下のようなスクリプトを用意します。 #!/bin/bash dirname ${0} たとえば/home/user/kabegiwa配下にsoutai_path.shとして上のスクリプトを用意した場合、実行結…

sshコマンドでシェル変数を扱うときはエスケープすること【シェルスクリプト】

シェルスクリプトを書いていてひさしぶりにハマってしまったのでメモ。 つまったこと sshコマンドをつかってリモート先のシェル変数を実行したい。 たとえばホスト名が「LOCALSVR」というサーバから「REMOTESVR」というサーバへsshで以下のようなコマンドを…

シェルスクリプトのcase文でYESorNOの大文字小文字を区別しない方法

シェルスクリプトでwhile read -pとcaseで対話式のスクリプトを作っているときにちょっとはまったので備忘録的に残しておく。 やりたいこと スクリプトで以下のように聞かれたときにyでもYESでもYesでもいいよって判定させたい。 ほんとうにいいですか? [y/n…