タグ

ShellとShellScriptに関するmytechnoteのブックマーク (25)

  • シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳

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

    シェルスクリプトを高級言語のような書き味に近づける Tips 集 | 創作メモ帳
  • bashのTips色々 - Qiita

    概要 bashの記法は独特なものが多く毎回ググってしまうのでまとめて(と言いつつまとまりがないですが。。。)おこうと思います。 ある程度まとまってからpostしようとか思ってたらごちゃごちゃになっちゃいました。 bashで使えるという意味なのでposixシェル共通のネタも混ざってます。 随時更新します。参考になれば幸いです。 参考 man bash リファレンスマニュアル Advanced Bash-Scripting Guide カッコ色々 bashでは色々なカッコがありますが、よく違いが分からず使っていたりするのでまとめてみます。 []と[[]] []はtestコマンドのaliasです。[[]]じゃないとできないこととしては、以下のようなものがあります。 空白を含む文字列をクォートしなくてOK var='abc 123' # []の中だとクォートしないとエラーになる [ $var =

    bashのTips色々 - Qiita
  • 初心者向け、「上手い」シェルスクリプトの書き方メモ - Qiita

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

    初心者向け、「上手い」シェルスクリプトの書き方メモ - Qiita
  • シェルスクリプトを公開するとき, コマンド前にバックスラッシュをつけるべき - Shohei Yoshida's Diary

    oh-my-zsh の環境で、peco-select-history が動かない - Qiita 追記 2014年 7月 7日 シェルスクリプトと書いてしまい漠然すぎましたが, ここで述べている ことが問題になるのは, .bashrc, .zshrcに関数, alias設定等がコピー される場合や, sourceコマンドでファイルを読み込む場合です. non-interactiveに実行されるシェルスクリプトについては特に 問題ないです. 問題点 そうしないと, 公開されたコマンドを自分の環境に導入した場合, aliasにより正しく動かなく場合があるためです. aliasをつけがちな コマンド(ls, grep等)がシェルスクリプトに含まれていると 特に問題が起こる可能性が高くなります. 例 pecoを使って カレントディレクトリのファイルをページャで開く 例を考えてみましょう. 単純に考

    シェルスクリプトを公開するとき, コマンド前にバックスラッシュをつけるべき - Shohei Yoshida's Diary
  • Talpa memorandum

    橘玲の『「読まなくてもいい」の読書案内』を読んだので、感想とメモをまとめておく。 この、タイトルは『「読まなくてもいい」の読書案内』だが、実際には「読まなくていい」はほとんど紹介されていない。紹介されているのは、当たり前の話かもしれないが読むべきだ。他の読書案内と異なっているのは、”こういうは読まなくて良い”と、ばっさり切り捨てているところ。読むべきか・読まなくてもよいかの基準は、20世紀後半に爆発的に進歩した科学研究の成果に置いている。著者は、この時期に起きた科学研究の大幅な進歩を”知のビッグバン”、”知のパラダイム転換”と呼び、これ以前に書かれたは(とりあえず)読む必要がないと言い切る。古いパラダイムで書かれたは捨てて、新しいパラダイムで書かれたを読もうという話だ。ちょっと乱暴な分け方ではあるが、1980年代に大学生だった私には案外納得できるものだった。学生時代に最

  • 使いやすいシェルスクリプトを書く

    できればシェルスクリプトなんて書きたくないんだけど,まだまだ書く機会は多い.シェル芸やワンライナーのような凝ったことではなく,他のひとが使いやすいシェルスクリプトを書くために自分が実践していることをまとめておく. ヘルプメッセージ 書いてるシェルスクリプトが使い捨てではなく何度も使うものである場合は,体を書き始める前に,そのスクリプトの使い方を表示するusage関数を書いてしまう. これを書いておくと,後々チームへ共有がしやすくなる.とりあえずusage見てくださいと言える.また,あらかじめ書くことで,単なるシェルスクリプトであっても自分の中で動作を整理してから書き始めることができる.関数として書くのは,usageを表示してあげるとよい場面がいくつかあり,使い回すことができるため. 以下のように書く. function usage { cat <<EOF $(basename ${0})

  • 第5章 シェルスクリプトプログラミング

    C言語でのプログラミングに入る前に、章では、シェルスクリプトを用いたプログラミングについて説明します。 GUIを前提としたWindowsとは異なり、Linuxを含むUNIXシステムでは、基的にすべての操作をコマンドラインインターフェースから行うことができます。 シェルは、コマンドラインプロンプトから入力されたコマンドを、Linuxシステムに受け渡す機能を持ったプログラムです。シェルは、ユーザーから入力されたコマンドを一つ一つ実行するだけでなく、ファイルに記述されたコマンドを逐次実行するインタープリタとしての機能も有しています。 シェルが解釈できる形式で記述されたプログラムを、シェルスクリプトと呼びます。 シェルは構造化プログラミングが可能で、その機能は非常に強力です。Linuxの豊富なコマンドと合わせることで、アプリケーションプログラムのプロトタイプをシェルスクリプトで記述することもで

  • いまさらxargsの便利さを主張してみる — ディノオープンラボラトリ

    タイトルの通りですが、xargsコマンドの便利さを紹介する記事を書いてみました。xargsは私が大好きなコマンドの一つで、標準入力から渡されたファイル名などを引数とみなして、別のコマンドの引数として起動するというものです。 例えばfindで見つけたファイルを全部削除したい場合、xargsなしでも下記のように書くことができます。

  • シェルスクリプト Tips | UNIX & Linux コマンド・シェルスクリプト リファレンス

    シェルスクリプト Tips コーディング・スタイル ここに書かれている内容は、あくまで筆者の好みでありほぼ完全に主観ではあるが、経験的に行き着いたスタイルでもあるので推奨します。 スクリプトのヘッダを作成する 最近はあまり使用されることもないのかもしれないが @(#) の記述と、スクリプトの使用方法、および概要をファイルの前方にコメントとして記述しておくようにする。 ※ @(#) は what コマンドで参照する情報を記述するための記号です。詳細は「whatコマンドについて」を参照。 #!/bin/bash # # @(#) hoge.sh ver.1.0.0 2008.04.24 # # Usage: # hoge.sh param1 param2 # param1 - パラメータ1です. # param2 - パラメータ2です. # # Description: # hoge.shスク

    シェルスクリプト Tips | UNIX & Linux コマンド・シェルスクリプト リファレンス
  • [Bash] ファイルやディレクトリの存在をチェックする方法

    Bashで、ファイルやディレクトリの存在を確認する方法を紹介します。 if testによる確認方法 ファイルやディレクトリの存在を確認するには、以下の構文を使います。 if [ -e パス ]; then # 存在する場合 else # 存在しない場合 fi 「パス」の部分に、チェックしたいファイルやディレクトリのパスを指定します。 (実際は、testコマンドを実行することになります。) ファイルtest.txtと、ディレクトリtestdirを用意した状態で、サンプルcheck.shを実行してみます。 test-check-file$ ls check.sh test.txt testdir check.shの内容は以下のとおりです。 #!/bin/bash file=test.txt dir=testdir # test.txtが存在するかチェック if [ -e $file ]; th

  • test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog

    test と [ と [[ コマンドの違い - 拡張 POSIX シェルスクリプト Advent Calendar 2013 - ダメ出し Blog 拡張 POSIX シェルスクリプト Advent Calendar 2013、15日目の記事です。 書くのが遅れ、ネタは尽きかけ、 マニアックさやニッチさが足りなくなってきているような気がします。 ふつうの内容ですみません。 今日は test, [, [[ コマンドの違いについてざっくり紹介します。 [[ がある bash, ksh, zsh ならば test と [ の使用は避け、 [[ を使用すべきです。 [ は慎重に使わないと様々な罠にかかるため危険です。 (翌日のネタも併わせてどうぞ) test と [ の違い どちらもシェルの組込みコマンドです。名前が違うのと [ は最後の引数を ] にしなければいけない縛りがある以外、 動作まった

  • Shell Style Guide

    Revision 1.25 Paul Armstrong Too many more to mention Bash is the only shell scripting language permitted for executables. Executables must start with #!/bin/bash and a minimum number of flags. Use set to set shell options so that calling your script as bash <script_name> does not break its functionality. Restricting all executable shell scripts to bash gives us a consistent shell language that'

  • シェルスクリプトを書くときに気をつける9箇条 - Qiita

    最新の類似投稿としてシェルスクリプトのコーディングルール2014も併せてどうぞ。 2014/10/09追記 ぼくがシェルスクリプトを書くときに気にしていること、過去の失敗で書き留めたことを忘れないために。 1. グローバル変数は大文字 PATH や HOME など、環境変数が大文字なので、エクスポートする変数を大文字で書くという習慣は一般的であるような気がしますが、エクスポートする変数を抱えるシェルスクリプトを作成する機会が稀なので。 グローバル変数は大文字 ローカル変数は小文字 エクスポートする変数も大文字 関数内からグローバル変数にアクセスする場合がありますが、やはり区別していると、可読性が増すような気がするのでお勧めです。 2. awk を知る Unix 上にて文書処理をするときに、数多くのフィルタコマンド(grep、cut、tr、head、sort、uniq、sed、awk、wc、

    シェルスクリプトを書くときに気をつける9箇条 - Qiita
  • getoptによるロングオプション解析

    ロングオプション(--tmpdir /tmp みたいなやつ)が欲しいと思ったことはなかったのですが、この日書いていたスクリプトに、意味をよく理解して注意して指定して欲しいオプションを実装しようとしていて、そういう局面ではロングオプションを使うのがいいのでは?と思い至りました。 そこで、まずは練習として、前に書いたテンプレート(getoptを使う版)を拡張して、ロングオプションに対応してみました。 #!/bin/bash # # getopt-long-template.bash (use getopt utility) # export LANG=C usage_exit() { echo "Usage: getopt-long-template.bash [-a] [-d dir] [--extra] [--file f] item1 item2 ..." 1>&2 exit 1 } #

    mytechnote
    mytechnote 2013/09/20
     ロングオプション
  • 指定日付以前の古いファイルを削除したり移動する方法

    <IT技術の処方箋:指定日付以前の古いファイルを削除したり移動する方法> システムを運用していると、 ログファイルやデータファイルなどが どんどん溜まっていきますね。 そんなファイル、いつかは移動したり削除する必要がありますね。 ●それには、findとxargsをうまく使うとコマンド一発で対処できます。 (例1) find ./ -mtime +50 -name "*.txt" | xargs mv --target-directory=./aaa ファイル名に.txtがついて、最後に修正されたのが50日より前のものを、 aaaというディレクトリに移動させる方法です。 (例2) find ./ -mtime +50 -name "*.txt" | xargs rm -f ファイル名に.txtがついて、最後に修正されたのが50日より前のものを、 削除する方法です。 (解説) xargsは、標

  • 【Ubuntu】開発の間だけ、長すぎるJavaScriptファイルを分割したい - すたら日記

    【最終更新 2012年3月14日】 【今回紹介する分割方法の特徴】 一人用 長くて読みづらくなったJavaScriptファイルを分割する。 しかし、番ではひとつにまとめる。 分割しても、開発中のファイル編集やブラウザでの動作確認などの際に余計な手間が増えることはない。 欠点として、端末をずっと起動させておく必要がある。 【対象環境、必要なツール・知識】 Ubuntu シェルスクリプト inotify(要追加インストール) 【目次】 inotifyをインストール 分割ファイルを作成 シェルスクリプト作成 実行してみましょう ついでに (yui-compressorで圧縮) inotifyをインストール端末からインストールします。 $ sudo apt-get install inotify-tools ※inotifyは『ファイルやディレクトリに対して変更が行われると通知してくれる』ツール

    【Ubuntu】開発の間だけ、長すぎるJavaScriptファイルを分割したい - すたら日記
  • 私が他人のシェルスクリプトから学んだこと | 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
  • パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方 - Qiita

    これはコマンドの標準出力を1行ずつ f という変数に読み込んで何らかの処理を行うってやつです。 whileの中でやることがファイル操作などの一般的なことならこれで全然問題ないんですが、実行中のシェル環境に対する処理(具体的には変数の設定など)を行おうとすると期待通りにいってくれなくなります。例えばこんな感じ↓ # findで見つけたファイル名をfilesという配列変数に詰め込みたい files=() find -type f | while read -r f; do files+=("$f") done echo "${files[@]}" # 確かにfilesに値を入れた筈なのに空が出力される?? これはパイプで繋げると後ろのwhileがサブシェルで実行されてしまうために起こる現象です。噛み砕いて説明すると… 現在findを実行中のbashとは別に、パイプの後ろでもう一つのbashが起

    パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方 - Qiita
  • http://blog.asial.co.jp/1134

  • シェルスクリプトで、ある順番以降の引数を取得する - Qiita

    $#には、引数の数が格納されています。なので、この場合は3番目以降の全部なので、全体の数から、いらない2つを引いているわけです。 てか、↑をやんなくても、3番目以降「全部」なら${@:3}でもよかった。つまり、開始の順番だけでよい。3番〜5番目とかなら「3番目以降の3つ」という意味で ${@:3:3}と書く必要がある。 応用例として、2個の引数のあと、--以降にオプションとして解釈されたくない文字列がある場合、以下のように書けます。

    シェルスクリプトで、ある順番以降の引数を取得する - Qiita