タグ

shellとbashに関するshuuuuunyのブックマーク (36)

  • シェルスクリプトで空文字列かどうか調べる。 - masa.edw the ハバネロブリーダー

    シェルスクリプト(sh)で、ある変数が空文字列かどうかを調べるには、testコマンドの -n (Nonzero length) または -z (Zero length) を使う……と書いてあるんだけど、コツがいる。 if [ -n $HOGE ]; then echo "nonzero だよ。" fi ↑これはダメ if [ -n "$HOGE" ]; then echo "nonzero だよ。" fi これならOK。 要は、変数が文字列埋め込みされてないと上手く動かない。何故か?はよくわからない。(シェルに於ける変数の概念はどういうものなのか?) 真理表にまとめると、こんな感じ。 -n -z $UNDEFINED T T $ZEROLEN T T $NONZEROLEN T F "$UNDEFINED" F T "$ZEROLEN" F T "$NONZEROLEN" T F 検証用ス

    シェルスクリプトで空文字列かどうか調べる。 - masa.edw the ハバネロブリーダー
  • Bashでの数の取り扱いについて

    B! 6 0 0 0 Bashでの数の取り扱いについて今更ながら知ったことがあったのでまとめ。 特にスクリプトなどで数値をインクリメントしたいときなどにどうするか、について。 expr let 二重括弧 コロン+二重括弧 さらに短縮 小数を取り扱いたい時 expr 恐らく最初に最初に覚える方法。 というか純粋なBourn Shell (sh)だと下のletや二重括弧記号が使えないのでこれが基。 今やshもほとんどbashへのリンクになったりしてるので 問題ないかもしれませんが、移植性を高くしたければexprにしておくのが無難。 $ a=1 $ a=`expr $a + 1` $ echo $a 2 と言った感じ。 扱える数値は整数のみ。exprに与える式は演算子の両側に必ずスペースが必要です。 exprで四則演算などに文字列を渡すとエラーになります。 $ expr a + 1 expr:

    Bashでの数の取り扱いについて
    shuuuuuny
    shuuuuuny 2015/02/16
    bc expr 二重括弧 演算 計算
  • シェルで変数のインクリメントに expr を使うと100倍遅い件

    シェルプログラミングにおいて、ループカウンタなどをインクリメントするとき、どのようにしますか? いきなりですがサンプルから。 #!/bin/bash COUNT=0 while [ $COUNT -lt 1000 ]; do # 何かの処理 COUNT=`expr $COUNT + 1` # COUNT をインクリメント done expr コマンドを使う? シェルプログラミングの入門記事などを見ると、変数のインクリメントに上記のような COUNT=`expr $COUNT + 1` を用いているものが多くあります。 しかし、この書き方は とても遅い です。空のループを1000回繰り返すだけでも手元の mac (Core i7) で約2秒もかかってしまいました。

    シェルで変数のインクリメントに expr を使うと100倍遅い件
    shuuuuuny
    shuuuuuny 2015/02/16
    bc expr 二重括弧 演算 計算
  • bashのちょっと変態っぽい感じの文法メモ - 量子化された無意味な人生

    変態そうで変態じゃない、少し変態なbash。 最近bashでシェルスクリプトをよく書くんですが、結構奇っ怪な文法で便利なのがあるので自分用にメモ。 もうbashちゃんがいないと生きていられないよお…。 csh? zsh? ハッ。ていうこのスタンス。*1 二重かっこで囲って演算子を使う $(())の中ではbash独自の演算子がつかえる文法。 $ bash << 'EOF' > a=10 > b=20 > hoge=$((a+b)) > echo $((a/5)) > echo ${hoge} > EOF 2 30expr使うよりもbash組み込みのこちらの方が環境依存がなく良いらしい。(参考: bashでexprを使わずにインクリメント処理する。 - 0xDB) exprでは演算子との間にスペース必須だったがこれはスペースがあってもなくてもどちらでも良い。 インクリメントもできるのでだいぶコ

    shuuuuuny
    shuuuuuny 2015/02/16
    bc expr 二重括弧 演算 計算
  • 【ln -s】シンボリックリンクをちゃんと理解―絶対パス 相対パスでのリンク張り - tweeeetyのぶろぐ的めも

    はじめに linuxコマンドのlnについてのおはなし 特に相対パスでのシンボリックリンクについて。 普通にシンボリックリンク シンボリックリンクはこんな説明が多い ln -s リンクされるfile(or dir)パス リンク名称ぜんぜんそうだね、と思ってたけど相対パスでのシンボリックリンク時につまづいた。 自分がよく使うのはこんな感じ ln -s /tmp/anydir1/anydir2 /home/hoge/anydir2理解してなかったのは相対パスでシンボリックリンクを貼るとき。 相対パスでのシンボリックリンク ファイルの構成がこんな感じだったとして。。。 # tree ./lntest/ ./lntest/ └── projectDir └── dirA ├── dirB ├── dirC │   └── dirD │   └── dirE ←ここにdirGへのシンボリックリンクを相

    【ln -s】シンボリックリンクをちゃんと理解―絶対パス 相対パスでのリンク張り - tweeeetyのぶろぐ的めも
    shuuuuuny
    shuuuuuny 2014/12/13
    ln symbolic link
  • http://unicus.jp/skmk/archives/338

    shuuuuuny
    shuuuuuny 2014/12/09
    time リダイレクト エラー
  • bashrcの設定の読み込まれる順番 - それマグで!

    bashrcが反映されないなーと思ったので調べてみた。 すると、原因は .profile が無かった。 なので .profile にbashrc を読込設定を書いた bashrc読込設定は/.profileに書いておけばいい。(Debianのデフォルトを貰ってきた→後述) このとき、~/.profileに書いて大丈夫か心配になったので調べてみた。 設定に関するファイルの一覧 bash環境変数に関する設定は次のファイルに依って構成されていました。 /etc/profile ~/.bash_profile ~/.bash_login ~/.profile /etc/bash.bashrc ~/.bashrc どの順に読み込まれるか調べてみた。 各ファイルは自分のファイル名だけを出力する設定にして、その他を全部コメントアウトした /etc/profile を空っぽにしてEchoだけして読込順を調

    bashrcの設定の読み込まれる順番 - それマグで!
    shuuuuuny
    shuuuuuny 2014/11/08
    profile bashrc
  • シェルにおけるタブと改行の扱い - ザリガニが見ていた...。

    最近はradikoやらじる★らじるのタイマー録音絡みで、シェルスクリプトを触る機会が多かったのだが、 再びradikoで録音したい! - ザリガニが見ていた...。 予約日時になったらちゃんと目覚めるtimerコマンドが欲しい - ザリガニが見ていた...。 radikoをキーワードで予約する - ザリガニが見ていた...。 自分の思いどおりに動作する時とうまく動かない時の原因は、そのほとんどが、スペース・タブ・改行を扱う時の勘違いにあると感じてしまった...。その扱いを正確に理解していれば、シェルスクリプトはかなり高度なテキスト処理を最初から的確にこなしてくれるはずだ。シェルスクリプトを理解するポイントの1つは、これらの目に見えない文字を、頭の中で正確に思い描く想像力かもしれない。現状の理解をメモしてみた。 検証環境 MacBook Pro Retina15 OSX 10.8.2 bas

    シェルにおけるタブと改行の扱い - ザリガニが見ていた...。
    shuuuuuny
    shuuuuuny 2014/11/05
    sed tr awk perl ruby
  • http://www.fse.cs.ritsumei.ac.jp/~takayuki/unix.html

  • さんすけ unix 参考書(UNIX その他/2 環境変数)

    UNIX その他 2. 環境変数 について説明します。 環境変数とは、いろいろなアプリケーションが参照する定義です。特定のコマンドだけが参照する環境変数や、HOME、EDITOR などのように多くのコマンドが参照する環境変数があります。 環境変数はシェル変数と違って子プロセスに引き継がれます。 環境変数の設定方法は csh・tcsh と sh・bash で違います。ここでは csh・tcsh を前提に説明します。 % setenv 環境変数名 設定値 ( csh・tcsh の場合 : ~/.cshrc ) % export 環境変数名=設定値 ( sh・bash の場合 : ~/.bashrc ) 環境変数の参照 % printenv ..(現在設定されている環境変数が表示される)... % setenv ..(現在設定されている環境変数が表示される、bash では無効)... 例 HOM

  • なるべく書かないawkの使い方 - ザリガニが見ていた...。

    awkという、古くからのスクリプト言語がある。(1977年生まれ。読み方は「オーク」である。エイ・ダブリュ・ケイではない)man awkをPDFに変換してみると、たったの3ページ強しかない。 $ man -t awk|pstopdf -i -o ~/Downloads/awk.pdf とてもシンプルな言語仕様ではあるが、awkには必要十分な表現力がある。特にテキストを処理する場面においては、最小限のシンプルな記述で、気の利いた処理を素早くこなす。無駄のないawkワンライナーを見ると、ある種の感動を覚える。awk以降に生まれたスクリプト言語は、少なからずawkの影響を受けていると思われる。 awkを知ることで、間違いなく幸福度は上がると思う。いつかきっと「知ってて良かった」と思える時が来るはず。もっともっと、awkを知りたくなってきた。 基動作 awkの基動作は、とってもシンプルである。

    なるべく書かないawkの使い方 - ザリガニが見ていた...。
  • ex

    実用的なシェルスクリプト 実用的なシェルスクリプトでよく利用される機能について, 実験し理解しよう. 入出力制御 エラー処理 関数 コマンドライン処理 練習問題 作業の前に, bash マニュアル を開いておこう. 入出力制御 コマンドの入出力を制御するために,リダイレクトがある. 基的なリダイレクトは次の通り: コマンド < ファイル : ファイルから入力する. コマンド << 区切文字列 : ヒアドキュメント.区切文字列が入力されるまで入力を続ける. コマンド > ファイル : ファイルへ出力する.ファイルの元の内容は書き換えられる. コマンド >> ファイル : ファイルへ追加する.ファイルの元の内容の後に出力が追加される. 出力リダイレクト(出力および追加)では,後述のように, 標準エラー出力を取り扱うためのものも用意されている. また,今回は詳しく紹介しないが,入出力制御には,

    shuuuuuny
    shuuuuuny 2014/10/16
    入出力
  • ファイルの分割(split)と結合(cat)跡地 - 試験運用中なLinux備忘録・旧記事

    (2015/9/27)記事は「Linuxでファイルを分割・結合する方法(コマンド)」へ移動した。

    ファイルの分割(split)と結合(cat)跡地 - 試験運用中なLinux備忘録・旧記事
    shuuuuuny
    shuuuuuny 2014/09/29
    split
  • grepした結果をsed(正規表現置換)したかったときにMacだとハマった話 - 憧れ駆動開発

    だいたい基的にLinux前提で書かれている ググってよくみつかるのは以下のワンライナー grep -r hoge * | xargs sed -i "s/hoge/hufa/g" ハマってる話をあまり聞かない限りは、たぶんこれで基的にできるんだろう。 Macだとsedがハマる そもそもMacのsedはBSD経由のsedらしくて、GNU版のsedとは違うらしい。だから -i オプションがつかえなかった。ということでbrewでgnu-sedいれた。port版もちゃんとあるらしい brew install gnu-sedコマンドは gesd になる。あとはgnu-sedなのでいつもどおりなsedが使える。と思う あるプロジェクト以下の文字列を一括変換したかった grep -rl hoge ./ | xargs gsed -e -i "s/hoge/hufa/g"できたし!!!! @xxxxx

    grepした結果をsed(正規表現置換)したかったときにMacだとハマった話 - 憧れ駆動開発
  • findで空のディレクトリを削除する - hogehoge foobar Blog Style Beta

    たくさんあるディレクトリの中からファイルが一つも無いディレクトリ(いわゆる空ディレクトリ)を削除する方法です。 削除する方法としては、findで空ディレクトリを探して、見つかったディレクトリを削除するという方法になります。 空ディレクトリの検索はfindでファイルタイプを指定(-type d) + 空(0byte)のファイルやディレクトリを検索指定(-empty)をします。*1 ディレクトリ削除については、「xargs」「-exec」「-delete」を使う方法があります。 xargsを使用したサンプル find . -type d -empty | xargs rm -rf -execを使用したサンプル find . -type d -empty -exec rm -rf {} \; -deleteを使用したサンプル ※「-delete」オプションはBSD系(FreeBSD,Mac OS

    findで空のディレクトリを削除する - hogehoge foobar Blog Style Beta
  • [Bash]標準出力・標準エラー出力の全て(1>&2とか)まとめ | Coffee Breakにプログラミング備忘録

    標準出力と標準エラー出力についてメモ 毎回調べ直すことになっているので、メモメモ。さらに調べるのにまとまったサイトがなくて1つ1つ調べるはめになるので。まとめ シェルによって違いがあるため今回はbashに限る 前提知識 【知識0】 unixコマンドは左から右に処理される。これは絶対 【知識1】 (標準入力 : 0) 標準出力 : 1 ※画面に出力される 標準エラー出力 : 2 ※画面に出力される 【知識2】 0,1,2はファイルディスクリプタと呼ぶ 【知識3】 「>」リダイレクト シェルの結果を出力する場所を指定可能 command ファイル・ディスクリプタ> 出力先 ※commandは何らかのコマンドかshファイルとしている 【知識4】 出力先などを特定のファイルディスクリプタに送りたい場合は「&ファイル・ディスクリプタ」とする echo "standard output" >&2 【知

  • pgrep, pkillでプロセスをkillする - 右往左往ブログ

    特定のプロセスをkillするときは、いつも以下のようなコマンドを使っていました。 # ps -ef | grep java | grep -v grep root 12927 1 2 15:51 pts/0 00:00:05 java -Xmx64m -jar start.jar # kill 12927 もっといい方法はないのかと思っていたら、pgrepやpkillという方法があるのを知りました。 pgrepは、プロセス名で絞り込んだPIDを表示させることができます。 # pgrep java 12927 -lオプションの場合、コマンドが表示されます。 # pgrep -l java 12927 java ただ、複数のプロセスがある場合は、区別がつきません。 この場合は、-fオプションにより詳細が表示されます。 # pgrep -lf java 12927 java -Xmx64m -j

    pgrep, pkillでプロセスをkillする - 右往左往ブログ
  • if 文と test コマンド | UNIX & Linux コマンド・シェルスクリプト リファレンス

    if 文と test コマンド if 文とは? if 文とは、与えられた条件式が真のときのみ処理を行い、それ以外の場合は処理をスキップする、などといった場合に使用される条件分岐処理である。 条件式には一般的に test コマンドを用いるが、ls コマンドや grep コマンド等の他のコマンドを用いても構わない。 if 文は条件式に指定されたコマンドの終了ステータスを判定し分岐を行う。終了ステータスが「0」の場合は真、その他の場合は偽となる。 if 文 タイプ 1

    if 文と test コマンド | UNIX & Linux コマンド・シェルスクリプト リファレンス
    shuuuuuny
    shuuuuuny 2014/09/25
    test if
  • bashでコマンドを連続実行し、処理を監視する。 | J-Linuxer

    shuuuuuny
    shuuuuuny 2014/09/25
    while
  • bashによるシェルスクリプトの小技(2) - shibainu55日記

    前回(bashによるシェルスクリプトの小技(1))に引き続き、シェルによって自動的に値が設定される特殊な変数について紹介する。特殊な変数を参照することにより、様々な情報を取得することができる(ただし、これらの変数には自分で任意の値を設定することはできない)。 さて、まずは特殊変数を一覧でまとめてみる。お馴染みのものが多いが、最後の2つ(特に最後のPIPESTATUS)についてはきっと今まで知らなかった人もいるんじゃないだろうか。シェルの中でパイプすると途中のコマンドのリターンコード、拾えないとか思っていませんか?今回のポイントとしては、「1. PIPESTATUS変数について」と「2. 特殊変数 $@と$*の違いについて」の2点を主に説明する。 特殊変数一覧表 変数名 自動的に設定される値 $? 直前に実行されたコマンドの終了ステータスが設定される変数。正常終了の場合は「0」、異常終了の場

    bashによるシェルスクリプトの小技(2) - shibainu55日記
    shuuuuuny
    shuuuuuny 2014/09/25
    background 特殊変数 一覧