タグ

shに関するakaneharaのブックマーク (27)

  • シェルの展開順序に気をつけよう - Qiita

    Shell Script Advent Calendar 2016の12月17日エントリーです(途中途切れてるので日数計算は不明)。 初級者向けの基礎知識として、シェルの展開順序について書きます。ここではbashを例に説明しますが、基は各種シェルに共通していると思います。 展開と実行の順序 端末やシェルスクリプトなどでシェルを使うときには、展開順序を意識していないと思わぬ失敗をすることがあります。展開(expansion)とは、ファイル名のパターン(ワイルドカード)やシェル変数などの処理です。 展開のメカニズムは普通のプログラミング言語のモデルと大きく異なる点の一つです。たとえば、多くのプログラミング言語の文法では変数は値の一種として扱われますが、シェルの文法では変数が展開されてから実際の処理が実行されます。このあたりの感覚は、C言語のプリプロセッサマクロなどに近いかもしれません。 ba

    シェルの展開順序に気をつけよう - Qiita
  • シェルスクリプト——こんなとき、かうする - Qiita

    POSIX シェルの小ネタ集。随時更新。 POSIX の範囲外の機能に依存するところには 【non-POSIX】 と書いておいた。 ファイル操作 空のファイルを作る touch でもいいがリダイレクトした方が速い。 >> filename # 既存ファイルは上書きしない (ファイルの更新日時も変へない) >| filename # 既存ファイルは空にする > filename # -C が有効なら既存ファイルがあるとエラーになる フィルタ ソートして重複行を消す sort | uniq でもいいが sort -u だと一コマンドで済む。 ソートせずに重複行を消す awk '!x[$0]++' 1 行番号を付加する awk '{print ++i,$0}' 【non-POSIX】 cat -n 一行目だけを消す tail -n +2 sed 1d 最後の行だけを消す head -n -1 s

    シェルスクリプト——こんなとき、かうする - Qiita
  • シェルスクリプトの罠を避ける三つの tips

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

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

    12月にTwitterに流れていたPOSIX何とかという話題を読んでいたらこの記事にたどり着いた。もう3年以上前の記事だけれど、内容がとても偏っていると思う。 シェルスクリプトの書き方について解説しているウェブ上の資料は少なく、当該記事も検索に引っかかりやすい。最近の初学者はまず検索して調べることが多いが、反論が検索に引っかからないとそれが正しいと受け入れてしまう可能性が高いように思う。きちんと反論している日語の記事が引っかからないので、あえて問題と思う点をまとめてみた。 そんなこと書いているあなたは誰? わたしはシェルスクリプトの専門家でも職業プログラマでもないけれど、シェルスクリプトを書いた量はそれなりにあると思う。環境はSunOS4, Solaris, HP-UX, IBM AIX, FreeBSD, OpenBSD, Linuxを経験していて、移植性や性能の問題がどこで発生しやす

    akanehara
    akanehara 2017/01/13
    知らなかった "setで出力される変数の一覧は、そのままevalして変数代入できることがPOSIXで保証されている。"
  • オープンソースのアーキテクチャ(和訳)

  • bashを読もう!『オープンソースアプリケーションのアーキテクチャ』3.1〜3.3 | DevelopersIO

    こんにちは、虎塚です。 8月31日(日)に「オープンソースアプリケーションのアーキテクチャ読書会(1)」という勉強会に参加してきました。 とても面白いだったので、3章の3.1〜3.2の内容をレポートしたいと思います。 The Architecture of Open Source Applications 日語版PDF はじめに 読書会の開催経緯 主催者の方がある経緯でSQLiteのソースコードを読もうとしたところ、想定したより巨大だったので、先にBarkeley DBを読むことにしたそうです。 Barkeley DBの資料を探す中で、この『Architecture of Open Source Applications』に辿り着き、せっかくなので他にも面白そうな章を読んでみようということで、今回の読書会が企画されたとのことです。 読書会の進行 20人ほどの参加者を席順に従って2人ず

    bashを読もう!『オープンソースアプリケーションのアーキテクチャ』3.1〜3.3 | DevelopersIO
  • BashでTCP/UDP通信を行う | 俺的備忘録 〜なんかいろいろ〜

    時折、ポートなどの疎通確認のため、相手先のポートがちゃんと開いているかを確認したい時がある。 そんな時は、基的にポートの疎通確認用のコマンドを利用するのだが、地味にBashからでも疎通確認を行うことができる。 exec 3<> /dev/tcp/相手先ホスト名/ポート番号 # TCP通信の場合 exec 3<> /dev/udp/相手先ホスト名/ポート番号 # UDP通信の場合 準備ができたら、以下のコマンドで対象のポートに通信を行える。 echo -e "メッセージ" >&3 cat <&3 root@BS-PHY-PROX-01:~# exec 3<> /dev/tcp/orebibou.com/80 root@BS-PHY-PROX-01:~# echo -e "GET $2 HTTP/1.0\n\n" >&3 root@BS-PHY-PROX-01:~# cat <&3 <!DO

  • 位置パラメーターの一括展開 $* $@ "$*" "$@" の違いを知れ!! - Shell Script Advent Calendar 2016 - ダメ出し Blog

    位置パラメーターの一括展開 $* $@ "$*" "$@" の違いを知れ!! - Shell Script Advent Calendar 2016 - ダメ出し Blog Shell Script Advent Calendar 2016 の 15日目の記事です。 位置パラメーター (Positional Parameters) の紹介と、 その値をすべて展開する $*, $@, "$*", "$@" の違いについて解説します。 $*, $@, "$*", "$@" の違いを認識し使い分けできるかどうかは、 シェルをちゃんと理解しているかどうかの指標の一つと言えるのではないかと思います。 残念ながら、適切な位置パラメーター展開を用いていないシェルスクリプトが珍しくありません。 あなたのシェルスクリプトは大丈夫ですか? あなたの好きな◯◯のソースコードや配布物に付属のシェルスクリプトも要チ

  • 5. bash — it-note 1.0 ドキュメント

  • どの環境でも使えるシェルスクリプトを書くためのメモ ver4.60 - Qiita

    シェルスクリプトは環境依存が激しいから…… などとよく言われ、敬遠される。それなら共通しているものだけ使えばいいのだが、それについてまとめているところがなかなかないので作ってみることにした。 「どの環境でも使える=POSIXで定義されている」と定義 「どの環境でも使える」とは、なかなか定義が難しい。あまりこだわりすぎると「古いものも含め、既存のUNIX全てで使えるものでなければダメ」ということになってしまう。しかし、私個人としては 今も現役(=メンテナンスされている)のUNIX系OSで使いまわせること にこだわりたい。 とはいっても全てのOSやディストリビューションについて調べられるわけではないので、この記事では基的に最新のPOSIXで定義されていることをもって、どの環境でも使えると判断するようにした。(飽くまで「基的に」ということで) 従って、互換性確保のため、シェルの中で使ってよい

    どの環境でも使えるシェルスクリプトを書くためのメモ ver4.60 - Qiita
  • bash によるオプション解析 - Qiita

    すこし記事が長いため、簡単なアウトラインを書いておきます。要点だけ掴みたい場合は、最終項の「まとめ」を読むのがいいかもしれません。 コマンドライン引数の一般的な解析手法 それぞれの特徴 〜 getopt と getopts の違い getopts(メリット・デメリット) getopt(メリット・デメリット) 自前で解析しちゃう(唯一のデメリット) まとめ ============================= コマンドライン引数を処理する一般的な手法として、 getopts getopt shift などで自力で解析 といった具合に、上から順に考えつくかと思います。getopt(3) は UNIX において、コマンドの引数を処理する一般的な C 言語のライブラリ関数です。それを用いて実装されたコマンドが getopt(1) です。Bourne シェル系だと内部関数になりますが、同系統の

    bash によるオプション解析 - Qiita
  • 初心者向け、「上手い」シェルスクリプトの書き方メモ - Qiita

    ここ最近、沢山シェルスクリプトを書くようになりました。 元々あまりシェルスクリプトを書いたこと無かったので、色々と勉強しつつ書いてるのですが、 他のプログラミング言語とはちょっと違って独特なクセというか、発見の度におぉー!ってなることが沢山あって楽しいです。 そんなわけで、最近学んだり参考にした中で特に感動したシェルの上手い書き方をまとめてみます。 きっとまだ知らないこととかもっと上手くやる方法なんかが沢山見つかりそうなので、 もっといいやり方あるよ!って方はコメントください 何もしない : (コロン)コマンド シェルを書いていた時に非常に欲しかったコマンドがこれ!何もしない! : というコマンド(?)を利用すると、何もせずに終了ステータス0(つまり正常終了)を返します。 これが様々な事に使える万能コマンドで、これによって面倒なエラー処理を簡潔にできたり、 入力や出力のリダイレクト元/先と

    初心者向け、「上手い」シェルスクリプトの書き方メモ - Qiita
  • シェルプログラミングの基礎知識 | Shinta's Site

    UNIX のコマンドインタプリタである Bourne shell を知っておかないといろいろ困るので基的なことをメモしておく。ここでは、コマンドをバッチ処理するための シェルスクリプトについて記述しています。 #!/bin/sh UNIXでスクリプトを記述する場合、一番初めの行は #!(shebang)ではじめます。さらに、シェルスクリプトであることを明確にするためにコマンドをフルパスで記述します。シェルスクリプトでは、#!/bin/sh となります。Bourne shell の場合、初めの行が : (コロン)のみでもよいが、現在あまりこの記述は使われていない。また、#! /bin/sh というように #! の後に半角スペースを入れても動作する UNIX システムもあるが、互換性を考えると半角スペースは入れないほうがよい。 コメント行と改行 # 以降コメントとなり、\ を利用して複数行を

  • なぜ私は敢えて Zsh で Shell Script も書くのか、目的合理性はどこにあるのか - hkoba blog

    はじめに UNIX, Linux のためのシェルスクリプトを bash どころか敢えて zsh で書くことに、どんな目的合理性があるのか… 個人的な考えをまとめてみます。 #!/bin/zsh の勧めにしたかったけど、途中で力尽きました。 勿論、 万人向けではない話 なので、なるべく背景・仕事環境・与えられた状況についても言及していくつもりです。 ツッコミも歓迎です。 前提 人生は短い。 限られた時間で、目的を達成したい。 『成果出力 / 学習含めた開発時間』の比を、納得行くレベルに保ちたい。 sh 族の各々には力の差が有る。 プログラミング言語としての表現力の優劣や、処理系の完成度の優劣が存在する。 チームの root と教育を任されている。 自分が個人としてベストな仕事をするだけでなく、メンバーの学習まで含めて判断したい。 道具は使い分ける。 sh 族で書くメリットのある、向いたタスク

    なぜ私は敢えて Zsh で Shell Script も書くのか、目的合理性はどこにあるのか - hkoba blog
  • 【たのしいな】様々なコマンド達を何も考えずにつないで遊ぶ - Qiita

    きっかけ matsuya-generator-rubyが、cowsayコマンドと組み合わせるとシュールこの上ない。 pic.twitter.com/gxaudeU377 — ぐれさん (@grethlen) 2015, 12月 6 もっと色々やってみたい。 あれ?Shell Script Advent Calendar 2015の22日目の枠残ってるじゃん。 じゃあやろう。 環境 Mac OSX Yosemite 10.10.5の端末上で実施。 zshを使って動作確認してますが、多分bashでも動きます。

    【たのしいな】様々なコマンド達を何も考えずにつないで遊ぶ - Qiita
    akanehara
    akanehara 2015/12/22
    おなかいたい
  • USP友の会:SoftwareDesignシェルスクリプティング道場反省会会場

    どうも。ほかにやることがあるのに性懲りも無くここに書き書きしている開帳です。 昨日発売のSoftwareDesignの特集「シェルスクリプト道場」、 じわじわ反響が来ているのでコメント等、 ここにまとめたいと思います。随時更新します。 これは恥ずかしい 「使う必要は必ずあるわけではありません」 はいすいません。「使う必要があるわけではありません」ですね・・・ 「edを開く」 edって、開くものだろか??「edを立ち上げる」くらいじゃないだろか。 オフィススィート dis について SD2月号を読み始めたけど、シェルスクリプトの記事で盛大にオフィススイートがdisられてて笑った。いいぞもっとやれ。 — いくや (AWASHIRO Ikuya)さん (@ikunya) 1月 18, 2013 ・・・もっとやります。 といっても、この手のソフトがなくなれとは思っていません。 私も愛用しています。

  • 時代はシェルスクリプト - Qiita

    らしい。 さあ、始まりました Shell Script Advent Calendar 2015 1 日目。思ったよりも AC 全体として盛り上がりなさを感じているのは自分だけでしょうか。 タイトルからして恐れ多いですが、1 日目だしいいでしょ感で書いています。 なんで今更 「今更そんな枯れツール使わんしょw」勢が一定数いることも知っていてのこのタイトルです。 意外にもシェルスクリプトってのは根強く使われ続けていて、以下に面白いグラフがあります。 via The RedMonk Programming Language Rankings: June 2015 これは RedMonk 社が、2015年1月版のプログラミング言語ランキングを発表したもので、GitHub での各言語の使用率と、Stack Overflow での発言量を元に作られた相関グラフです。 Shell が意外にも人気ですね

    時代はシェルスクリプト - Qiita
  • ZshでもBashでも動くfunctionを書くときのストレスを減らそう - Qiita

    この記事は zsh Advent Calendar 2015 3日目のために書かれました. Zsh には様々なオプションが存在します.オプションの中にはシェルが与えられたコマンド列をどう解釈するのかどうかに影響するものがあります.それらのオプション次第では,同じバージョンの Zsh であっても異なる挙動を示すことになってしまいます. さらに Zsh 以外のシェルで実行する場合は,当然のことながらオプション次第では互換性を失ってしまう構文が存在します. そこで今回は Zsh 以外のシェルとして Bash を取り上げつつ,オプションや書き方を調整することで,自分の設定が反映されていない Zsh でも Bash でも動くようなfunctionを変なところでハマらずに書けるようにしましょう. はじめに Zsh のオプションの設定にはsetoptやset -oなどが存在しますが,今回はsetoptで

    ZshでもBashでも動くfunctionを書くときのストレスを減らそう - Qiita
  • そこまで遅くないShellスクリプトの書き方

    この記事は Shell Script Advent Calendar 2015 10日目の記事です。 9日目の記事はryoana14さんの麗しきawkの世界でした。 Shellスクリプトがいつまで経ってもまともに書けないMasWagです。書けないなりにも人の書いた(昔の自分が書いたものも多く含む)スクリプトを見てこれは遅いなと思うことはたまにあります。書き方のコツというか考え方が幾つかあると思うのでまとめてみようと思います。基的な話なので多分Shellスクリプトをあんまり普段書かない人向けだと思います。ShellはBashを前提として書きます。zshだともっと色々できるのかもしれないです。細かい説明は(そんなに細かくなくても?)省いているので適宜manやinfoを参照すると良いでしょう。 forkを減らす Shellでコマンドを使うということは多くの場合プロセスをforkしていることにな

  • bash vs. dash

    bash vs. dash PLUG West 2008-10-20 PLUG North 2008-11-10 JP Vossen bashcookbook.com STOLEN!!! ● Note: I stole a lot of this material from Carl Albing's "bash vs. dash" presentation at Ubuntu Line 2007! ● Original at: http://tinyurl.com/3mv8gy bash vs. dash ● Huh? ● bash != Bourne != dash != ... http://en.wikipedia.org/wiki/Comparison_of_computer_shells http://en.wikipedia.org/wiki/Bash http://en.w