タグ

bashに関するiwwのブックマーク (277)

  • シェルスクリプトでIPアドレスの計算 | Folioscope

    IPAM や DHCP サーバーを実装するとき、IP アドレスを機械的に生成するために、IP アドレスの計算をする事があります。 例えば IPAM がラックやデータセンターから機械的に IP アドレスを割り当てたり、DHCP サーバーが連番の IP アドレスを割り当てたりします。 この記事ではシェルスクリプトで IP アドレスを計算する方法を紹介します。 IP アドレスと数値の変換 IP アドレスを計算する上で欠かせない操作が、IP アドレスと数値の相互変換です。 IPv4 アドレスは長さ 4 のバイト列に過ぎませんが、通常は192.168.0.1 のように人間の扱いやすい文字列で表現します。 一方 IP アドレスを計算するには、IP アドレスをバイト列や 32 ビット数値などの、計算機で扱いやすい形に変換します。 IP アドレスを数値として扱えると、数値演算で IP アドレスを計算したり

  • bash の select は令和の時代も役に立つ, その一例 - ようへいの日々精進XP

    tl;dr man bash 例 若干の Kubernetes クラスタを選択したい Kubernetes Pod を選択したい 以上 tl;dr ホントにちょっとした運用ツールを bash で作っていて, 複数の選択肢をリストアップしてメニューとして選択出来るようにしたいなーと思っていたら, bash には select 文という超絶便利な構文が用意されていたので使ってみました. man bash https://linuxjm.osdn.jp/html/GNU_bash/man1/bash.1.html より引用させて頂きつつ, 重要だなと思ったところをかいつまんで. select name [ in word ] ; do list ; done in に続く単語のリストが展開され、要素のリストが生成されます。 展開された単語の集合が番号付きで標準エラー出力に出力されます。 「in

    bash の select は令和の時代も役に立つ, その一例 - ようへいの日々精進XP
  • Big Sky :: findとxargsは便利だけど意外と実行したい処理はsortした結果だったりする場合が多い

    私の場合、xargsの引数がオーバーする程のファイルを扱う時は、少し怖いので一度別のディレクトリに移動してから削除するなりをやってます。 また、数十個の場合ならばfindだけでやってしまいますね。その方が思考が止まらないし...。 ただ、findとxargsの組み合わせで結構多いのが さらにその中から間引きたい 実行は並び替えた結果で行いたい といった場合が少なからずあるのです。 例えばYYYYMMDD等といった日付形式のファイル名で散乱しているファイルを日付通りに処理したい。 と言った場合、やはりsortやgrepのお世話になるのが楽ですよね。 sortやgrepを使う場合、findで-print0した結果ではフィルタフィルタ実行する事が出来ません。 こんな場合には、findでは-print0せずに find . -name "*.txt" | grep '/[0-9]¥{8¥}¥.tx

    Big Sky :: findとxargsは便利だけど意外と実行したい処理はsortした結果だったりする場合が多い
    iww
    iww 2020/03/14
    sortしてからprint0
  • bashでパラメータ展開を用いて変数を利用する | 俺的備忘録 〜なんかいろいろ〜

    以下、それぞれについて実際の実行例を記載しておく。 ${#変数} : 変数の文字数を取得する [root@BS-PUB-CENT7-01 ~]# TEST1=1234567890 [root@BS-PUB-CENT7-01 ~]# TEST2=ABCDEFGABVDEFG [root@BS-PUB-CENT7-01 ~]# echo $TEST1 1234567890 [root@BS-PUB-CENT7-01 ~]# echo $TEST2 ABCDEFGABVDEFG [root@BS-PUB-CENT7-01 ~]# echo ${#TEST1} 10 [root@BS-PUB-CENT7-01 ~]# echo ${#TEST2} 14 ${変数:-文字列} : 変数がNULLの場合、指定した文字列を返す [root@BS-PUB-CENT7-01 ~]# echo $NULLTE

    iww
    iww 2020/03/13
  • シェルスクリプトで一行ずつ読込む while read line 4パターン - eTuts+ Server Tutorial

    Bash でコマンドの実行結果、またはファイルの中身を一行ずつ読み込むためには、read コマンドを使います。 具体的には、while ループを回しながら、read によって読み込まれたデータを、一行ずつ line という変数に格納する形になります。 コマンドの実行結果、またはファイルの中身が最終行まで完全に読み込まれた時点でループから抜けることになります。 というわけで、while read line セットで覚えると良くて、while read line をより効率的に使うために、Here Document (ヒアドキュメント) と一緒に使うことが多いです。 Unix 系、Linux 系、OSX、BSD 等、シェルが使える環境上でスクリプト書くときにパターン化していつでも参考にして状況に応じて使えるようにまとめてみました。

    シェルスクリプトで一行ずつ読込む while read line 4パターン - eTuts+ Server Tutorial
    iww
    iww 2020/03/13
    ヒアドキュメントで読む方法は知らなかった。 かっこいい
  • exec - シェルを実行したコマンドで置き換える

    execコマンドはbashの組み込みコマンドでシェルを実行するコマンドで置き換えるコマンドになります。例えば、シェルスクリプト等で、あるコマンドを実行する場合、プロセス上では、実行したいコマンドが終わるまでそのコマンドを実行するシェルスクリプトのプロセスが残ることになります。実行できるプロセス数には限界があり、execコマンドで実行すると無駄にプロセスが実行することを防げます。 また、execコマンドを引数にコマンドなしで利用するとシェルのリダイレクトの設定を変更することもできます。 プロセスを置き換える あるコマンドを実行させたいときに、シェルスクリプトを実行してコマンドを実行させる場合、プロセス上ではコマンドを実行させるために起動したシェルスクリプトのプロセスがそのコマンドが終了するまで残ります。例えば、sleepコマンドを起動させるシェルスクリプト実行させて、その後、すぐに実行を中断

    exec - シェルを実行したコマンドで置き換える
    iww
    iww 2019/11/15
  • Redmine - A painter and a black cat

    RedmineRedmineAlbum plugin開発RawHtml plugin開発追加導入したプラグインGoogle Analytics PlugIn BASH Syntax Highlighting(bashのシンタックスハイライトを追加)手順参考 PageMapの追加前提Setuppagemapのダウンロードと配置CSSの追加JavaScriptの追加 役に立ちそうなプラグインメモ Album plugin開発¶ Redmine Album pluginを参照 RawHtml plugin開発¶ Redmine RawHtml pluginを参照 追加導入したプラグイン¶ Google Analytics PlugIn¶ Google Analytics PlugIn http://www.redmine.org/plugins/google_analytics_plugin

    iww
    iww 2019/11/06
    redmineのコードハイライトにbashも追加するプラグイン
  • shell scriptでのgetoptsの使い方メモ - Qiita

    #!/bin/sh while getopts l:a: OPT do case $OPT in "l" ) echo "$OPTARG";; "a" ) echo "$OPTARG";; esac done getopts l:a: の部分がオプションの指定。 :(コロン)をつけることで、引数があることを明示。 引数があることを明示した場合、$OPTARGでその引数を取得することができる。 $ ./test.sh -l hoge -a fuga ↓ $ hoge $ fuga と出力される。 参考: http://tech.lampetty.net/tech/index.php/archives/373 Register as a new user and use Qiita more conveniently You get articles that match your needs

    shell scriptでのgetoptsの使い方メモ - Qiita
    iww
    iww 2019/10/23
  • bashのヒアドキュメントを活用する - Qiita

    ヒアドキュメントはシェルスクリプトの中にちょっとした別のスクリプトを埋め込むときに便利です。 数行のスクリプトのためにわざわざファイルを作る必要がなくなり、見通しがよくなります。 # ちょっとしたスクリプトを動かすのに便利 # 例) oracleDBのテーブル一覧を出力する sqlplus -S user/pass@sid << EOS set pagesize 0 set feedback off select table_name from tabs order by table_name; EOS 要点 ヒアドキュメントを理解するうえで重要なのは、ヒアドキュメントは標準入力として扱われる、ということです。 文字列リテラルでないことに注意してください。 これを把握していれば、最初の例でcatにヒアドキュメントを渡していた理由がわかるかと思います。 catはファイルを省略した場合に標準入

    bashのヒアドキュメントを活用する - Qiita
    iww
    iww 2019/10/23
  • $(cd $(dirname $0)/.. && pwd) と $(cd $(dirname $0) && pwd) の違い

    最初に質問に答えると次のようになります。 $(cd $(dirname $0) && pwd) ... 実行中のスクリプトがあるディレクトリの絶対パス (/ で始まるパス) 文字列 $(cd $(dirname $0)/.. && pwd) ... 実行中のスクリプトがあるディレクトリの親ディレクトリの絶対パス文字列 ここで使われているシェル変数やコマンド、構文の意味は次のとおりです。 $0 は実行中のスクリプトのパス (bash や sh に渡された引数そのもの) を表します。 dirname は引数で与えたパス文字列のディレクトリ部分を返すコマンドです。 pwd はカレントディレクトリを絶対パスで返すコマンドです。 $( ... ) はシェルで ... を実行した結果 (標準出力) の文字列に置き換えられます。 一般に $(cd DIR && pwd) は、ディレクトリ DIR (相対

    $(cd $(dirname $0)/.. && pwd) と $(cd $(dirname $0) && pwd) の違い
    iww
    iww 2019/09/24
    realpathがあるなら不要な技
  • bash の危険な算術式 - どさにっき

    ■ bash の危険な算術式 _ 使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。 _ 以下のシェルスクリプトには脆弱性がある。わかるだろうか。 #!/bin/bash # "品目,単価,個数" の形式の CSV を読んで、"品目,合計金額" の形式で出力する csv="foo.csv" while IFS=, read item price num; do echo "$item,$((price*num))" done < "$csv" これ、細工された CSV ファイルをわせることで、任意コードの実行ができてしまう。数ある脆弱性の中でもとくにヤバいやつだ。どこが穴なのかというと、タイトルにもあるとおり算術式なのだが、し

    iww
    iww 2019/09/02
    よくある話
  • findコマンドで無視リストを利用する - Qiita

    動機 findで.DS_Storeが引っかかるのウザすぎ!!! 無視リストをどっかから引っ張ってきたい ~/.gitignoreでよくね? 方法 下記記事がそのものズバリだった。 linux - Exclude list of files from find - Stack Overflow # .DS_Storeや*.swpが出力される $ find . -maxdepth 1 -mindepth 1 -type f ./.blanc.scpt.swp ./.DS_Store ./hoge.txt $ cat ~/.gitignore .gitignore .DS_Store *.swp *.bak .watsonrc # 展開後のコマンド: # find . -maxdepth 1 -mindepth 1 ! -name .gitignore ! -name .DS_Store ! -

    findコマンドで無視リストを利用する - Qiita
  • bash/zshでsourceされたスクリプト内で、ファイル自身の絶対パスをとるシンプルな記法 - Qiita

    追記: コメント欄にて、若干変なパスが含まれている場合の対処方法について、補足いただきました。 ご指摘ありがとございますm(_ _)m bash / zshなどでシェルスクリプトを書いていると、環境変数の設定を外部ファイルにまとめてsource して使う、というのはよくある。 そのような場合にsourceされたファイル内での絶対パスがイマイチうまく取れない、という問題に突き当たる事がある。 bashの話: うまくいかない方法と理由 通常、シェルスクリプト内で自分自身の絶対パスをとるときによくやるのが下記の手法だとおもう。 が、単体で呼び出した場合にはちゃんと動くのだが、bashからsourceで呼び出した場合にはうまく動かない。 なぜかというと、sourceされたファイルの実行が、呼び出し元のシェルプロセス内になるから。 bashでは$0は実行コンテキストに依らず、実行ファイル名が入ってい

    bash/zshでsourceされたスクリプト内で、ファイル自身の絶対パスをとるシンプルな記法 - Qiita
    iww
    iww 2019/07/11
    シンプル
  • 【redhat linux】bash 設定ファイル読み込み順番

    [FAQ CENTER トップ] [redhat linux 技術ドキュメント トップ] linuxにおける bash 設定ファイル読み込みの順番 Redhat EL 6.2の場合 環境:RHEL 6.2 (run level 3) # cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.2 (Santiago) # grep :initdefault: /etc/inittab id:3:initdefault: 以下に色々なログオンによる各bashファイルの読み込み順番についてまとめました。表内の数字は読み込まれる順番を表します。×は読み込まれない事を表します。~(チルダ)はユーザのホームディレクトリを表します。user01なら/home/user01です。

  • Bash: .bashrcと.bash_profileの違いを今度こそ理解する|TechRacho by BPS株式会社

    こんにちは、hachi8833です。社内Slackで見かけたmorimorihogeさんの以下の書き込みで目から鱗が落ちました。 ~/.bashrcで何かを出力してしまうと、rsyncなどのsshパイプで問題が生じることがあるそうです。 参考: 知らないとrsyncでもハマるシェル初期化 - Qiita これをきっかけに、できるかぎり一次情報を元になるべく一般的になるようにまとめてみました。 シェルスクリプト(.bashrcや.bash_profileなども含む)はあまりに自由に書けてしまい、LinuxディストリビューションやmacOSによって作法がまちまちだったりするので、外してはいけないポイントがどこかを知りたかったのでした。 対象はbashとsh(Bourne Shell)に限定します。また、デスクトップGUIの設定ファイルについては最小限にとどめます。 bashのmanページ 元記

    Bash: .bashrcと.bash_profileの違いを今度こそ理解する|TechRacho by BPS株式会社
    iww
    iww 2019/06/07
    自分用の設定とかツールをモリモリぶっこんだスクリプトを .bash_profile から呼び出すようにしてる。 最近は .profileがホームに無かったりするし、
  • Control-D でログアウトしたくない - Qiita

    bash 限定というわけでもないのですが。 OS X ではカーソル操作に Emacs 風のものが利用出来ますが、Terminal で delete 操作(C-d)をしていると、不意に exit が入力されてログアウトしてしまう事がよくあります。(私の場合、キーリピート速度を標準以上に高速にしているので尚更……) これを防止するには .bash_profile 等シェルの設定ファイルに IGNOREEOF を書いてあげると良いみたいです。

    Control-D でログアウトしたくない - Qiita
  • inotifywait を使って,ファイルが作成されたらアクションを起こすスクリプトを書く - akihiko’s tech note

    例えば,ディレクトリ /tmp/hoge に print.ps というファイルが作成されたら,それを自動的に印刷するようにしたい場合,ファイル作成イベントを監視する必要がある. inotifywait というコマンドを使えばそれが簡単にできるので,紹介する. 次のbashスクリプトは, /pstmp というディレクトリにファイルが作成されたら,そのファイルを別ユーザアカウントで kghostview で開く,というものだ*1. #!/bin/bash # required package: inotify-tools psout_dir=/pstmp m_account=aki-yam events=(-e CREATE -e MODIFY -e MOVED_TO) while inotifywait ${events[@]} $psout_dir; do psfile=$psout_di

    inotifywait を使って,ファイルが作成されたらアクションを起こすスクリプトを書く - akihiko’s tech note
  • 今年お世話になったCLIコマンド集 - mizchi's blog

    ヒストリ履歴からよく使ってるものをお焚き上げする。 注意点: npm 周り、グローバルコマンドは npm i -g で入れてて、ローカルで扱うものは yarn で使うという癖がある 追記: シェルじゃなくてCLIだろと言われるのが多かったので訂正した vscode $ code . -r 現在ディレクトリを VScode で開く。 -r が肝で、新しいウィンドウを生成せず、既存のウィンドウを開き直す。 yarn $ yarn install --prefer-offline yarn install 時にローカルキャッシュを優先する。テザリング環境下でリポジトリを作成するのに便利。 フリーランスになってから出先で作業することが多く、ギガ足りない問題が多々発生した。 git $ git clone <github-url> --depth 1 HEAD だけ clone する。テザリング環境

    今年お世話になったCLIコマンド集 - mizchi's blog
    iww
    iww 2018/12/21
    自分のhistoryを見たらトップ3は cd,ls,echo だった
  • シェルスクリプトでset -eしているときに処理を中断せずエラーを扱う方法

    シェルスクリプトで set -e (errexit) しておくと、スクリプト中に実行したコマンドの終了ステータスが「非0」だった場合、つまりコマンドが失敗したときにそこでスクリプトを中断してくれるようになります。(終了ステータスとは「Exit code」「Return status」などと呼ばれるものです。) 都度エラー判定を書かなくてもよくなるので便利なオプションですが、個別にエラーハンドリングをしたくなった時にも意図せずスクリプトが中断されてしまい困ったことになります。 例えば、以下の例は false コマンドの実行で失敗扱いとなり、そこでスクリプトが中断されるため「finish」が出力されることはありません。 set -e # false コマンドは必ず終了ステータスに 1 (失敗) を返すコマンド # エラーが起きたとみなされスクリプトは中断される false # このコマンドは実

    シェルスクリプトでset -eしているときに処理を中断せずエラーを扱う方法
  • シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳

    Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な

    シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳
    iww
    iww 2018/12/12
    基本的に枯れているというのは技術的には誉め言葉でしかないと思っていた。 低レベルと同じくらい誤解が多い言葉なんかな