タグ

bashに関するlearnのブックマーク (19)

  • Minimal safe Bash script template

    Published on December 14, 2020   ·   Updated on December 16, 2020 Bash scripts. Almost anyone needs to write one sooner or later. Almost no one says “yeah, I love writing them”. And that’s why almost everyone is putting low attention while writing them. I won’t try to make you a Bash expert (since I’m not a one either), but I will show you a minimal template that will make your scripts safer. You

    Minimal safe Bash script template
    learn
    learn 2021/01/18
  • GitHub - sstephenson/bats: Bash Automated Testing System

    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

    GitHub - sstephenson/bats: Bash Automated Testing System
  • シェルスクリプトの罠を避ける三つの tips

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん

    シェルスクリプトの罠を避ける三つの tips
  • コマンドラインツールを書くなら知っておきたい Bash の 予約済み Exit Code - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    コマンドラインツールを書くなら知っておきたい Bash の 予約済み Exit Code - Qiita
  • bash-hackers.org

    learn
    learn 2016/06/30
  • 何もしない組み込みコマンド ":" (コロン)の使い道

    Bash でシェルスクリプトを勉強していくと出会うのが : (コロン)という名前の組み込みコマンド。このコマンドは何もしないコマンドです。 こんなコマンドの存在は不思議だなと思う反面、C言語にも void という型があったり(関数のような形で存在するのは JavaScript とかですね)、LaTeX にも \relax があったり、何もしない命令というものは機械語の NOP からある普通のものです。 この Bash の : の使い道についてまとめてみました。 何か書かなければならないところに仮置きする 例えば「ここに制御構造を置くんだけど、この節に入るものは後で書くんだけどな〜」といった場合、制御構造の節の中に何も書かないと Bash は構文エラーとなります。

    何もしない組み込みコマンド ":" (コロン)の使い道
    learn
    learn 2016/02/13
  • 検索ではあんまり出ないbashの便利技 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    検索ではあんまり出ないbashの便利技 - Qiita
  • 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
  • シェルスクリプトを書くときはset -euしておく - Qiita

    を書いておく。以下解説。 set -e エラーがあったらシェルスクリプトをそこで打ち止めにしてくれる(exit 0以外が返るものがあったら止まるようになる)。「あっあれここでうまくいってないからデータ準備できてないのにあれあれっもうやめて!」ってなるのを防げる。 set -u 未定義の変数を使おうとしたときに打ち止めにしてくれる。Perlでいうuse strict 'vars';的なもの。 って気軽な気持ちで書いてしまって、「ん、やたら時間かかると思ったらスペルミスうわなにをするやめ」ってなるのを防げる。 一部だけ例外にしたい はてなブックマークのコメントより -e は command1 || command2 みたいなことが出来なくなるの使うことないな。-uは付けといて良いが。 確かにおっしゃるとおりですね。コマンドの失敗を考慮して書いている部分については(もしくはやたらexit 0以外

    シェルスクリプトを書くときはset -euしておく - Qiita
  • cdの引数を絶対パスにしてコマンドヒストリに残す - ももいろテクノロジー

    cdの引数が相対パスのままコマンドヒストリに残って便利な例が思いつかないので、絶対パスでコマンドヒストリに残すようにする。 具体的には、以下のシェル関数を.bashrcに書く。 if [[ -n "$PS1" ]]; then cd() { command cd "$@" local s=$? if [[ ($s -eq 0) && (${#FUNCNAME[*]} -eq 1) ]]; then history -s cd $(printf "%q" "$PWD") fi return $s } fi いくつかの重要なポイントを以下に記す。 cdの定義を上書きしているが、このような場合中で普通にcdを呼ぶと再帰してしまうためcommand組み込みコマンドを使う。 "$@"の代わりに"$1"を使うことはできない。cdを引数なしで呼んだときホームディレクトリに移動しなくなってしまう。 cdの

    cdの引数を絶対パスにしてコマンドヒストリに残す - ももいろテクノロジー
    learn
    learn 2014/12/12
    "配列変数FUNCNAMEがコールスタックになっており、この配列の要素数が1かどうかでシェルから直接呼ばれているか(関数の中からでないか)判定できる。"
  • パイプとフィルタ ~ソフトウェア工学における有用なアーキテクチャ~ | POSTD

    パイプライン は、最近のソフトウェアエンジニアリングにおいて、非常に便利な(そして驚くほど活用されていない)アーキテクチャパターンです。ソフトウェアでデータの流れを制御するためにパイプとフィルタを用いる考え方は、最初のUNIXシェルが作られた1970年代からあります。もしターミナルエミュレータでパイプ” | ”を使ったことがあるなら、”パイプとフィルタ”を活用できていることになります。以下の例を見てみましょう。 cat /usr/share/dict/words | # Read in the system's dictionary. grep purple | # Find words containing 'purple' awk '{print length($1), $1}' | # Count the letters in each word sort -n | # Sort l

    パイプとフィルタ ~ソフトウェア工学における有用なアーキテクチャ~ | POSTD
    learn
    learn 2014/11/23
    パイプラインの中でより早く問題を見つけ出す唯一の方法は、比較的知られていないbashの$PIPESTATUS変数を確認することです。
  • bashの数字 - Qiita

    bash等で文字列から切り出した数字を演算して他の数字を作るときの注意 数字として扱うときに頭に0が付いているときは8進数を意味する! このことすっかり忘れてて大量にJob流した後エラーを捨ててて後になって気がついた どっかに書いておかないと忘れちゃう(´・ω・`)..ので書いておくw ダメなケース A="08" B="01" printf "%02d" $(($A + $B)) bash: 08: value too great for base (error token is "08")

    bashの数字 - Qiita
    learn
    learn 2014/08/09
  • シェルスクリプトの二重起動禁止 - 祈れ、そして働け ~ Ora et labora

    検証環境 Fedora release 8 (Werewolf) Bash GNU bash, version 3.2.33(1)-release (i386-redhat-linux-gnu) プロセスを見る方法 [ $$ != `pgrep -fo $0` ] && { echo 'Cannot run multiple instance.' >&2; exit 9; } $$ 自分自身のプロセスID pgrep パターンにマッチするプロセスのプロセスIDを返す -f パターンをコマンドライン全体(パスや引数を含める)と照合する。デフォルトではプロセス名のみと照合する -o パターンにマッチする一番古いプロセスのプロセスIDを返す $0 自分自身のプロセス名(パス名) >&2 標準エラー出力にリダイレクトする 失敗例「cronで実行すると常に二重起動と判定される」 この方法により二重起

    シェルスクリプトの二重起動禁止 - 祈れ、そして働け ~ Ora et labora
  • 関数のローカル変数 - 技術整備

    関数内で変数を定義する際に local 変数名 とすればその変数は関数内でローカルな変数になる。localをつけなかった場合は変数のスコープは新たに作られず、グローバルな変数として扱われる。 function f() { echo "top of f a=$a" echo "top of f b=$b" local a=20 local b=20 echo "bottom of f a=$a" echo "bottom of f b=$b" } a=10 b=10 f echo "after f a=$a" echo "after f b=$b"

    関数のローカル変数 - 技術整備
  • 本当は使いたいけど使わないBashのTIPS - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    本当は使いたいけど使わないBashのTIPS - Qiita
    learn
    learn 2014/05/27
  • 私が他人のシェルスクリプトから学んだこと | 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の日記
  • Bash基礎文法最速マスター - いろいろ解析日記

    Bashの文法一覧です。他の言語をある程度知っている人はこれを読めばBashの基礎をマスターしてBashを書くことができるようになっています。簡易リファレンスとしても利用できると思いますので、これは足りないと思うものがあれば教えてください。 1.基礎 echo文 echo文です。 echo "Hello world" コメント コメントです。 # コメント 変数の宣言 変数の宣言です。 # 文字列変数 declare str # 数値変数 declare -i num # 配列変数 declare -a array スクリプトの実行 スクリプトを実行するにはコマンドラインで次のようにします。 bash script.sh 出力結果をファイルに書き出すにはリダイレクトを使います。 bash script.sh > file.txt 文法チェック 事前に文法チェックを行うには、次のようにします

    Bash基礎文法最速マスター - いろいろ解析日記
  • 1