それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

bash

bash のシンタックスチェックでシンタックスエラーを防ぐ

bash にもシンタックスチェック機能があります。 シンタックスチェックをすることでエラーを未然に防ぐ事ができます。 たとえば、長文のシェルスクリプトを書いているときシンタックス・チェックが有ると、事前にミスが見つかるので便利です。 bash のシンタ…

ヘルプ(help) コマンドで関数マニュアルを調べる使い方

bash の help 機能について bash の組込の機能については man / info でもいいのですが多すぎて大変。 help コマンドを使います。help でダイレクトに調べられます。 bash のシェルスクリプトとしての機能やSHELLとしての機能を見たいときには help を使えば…

bashで連想配列(assoc array / hash ) を使う。

bash の配列にも 連想配列が加わりました。 追加されたバージョンは、bash 4.2 からです。 はじめに連想配列とは何なのか 連想配列(PHPでの略語)は associative array と呼ばれる機能です。js や php を始めスクリプト系言語ではおなじみですね。 # javasc…

bashで可変変数(抽象化)をする。

bash でも変数名の変数を使えます。 php では variable variable (可変変数)、javascript では obj[name]() などとやります。 関数名や変数名を、変数に確保しておき後で使ったり、動的に変数名をつくって変数を参照するなどするときに使われます。java な…

bashの文字列の追記(append)演算子の紹介

文字列の追加が簡単になっています。 bash 3.1 から 使えます。 a='Hello' a+=' World' echo $a # Hello world PATH などの追記が簡潔になります たとえばPATHの末尾に文字列を追加するときは次のように書くことが出来ます。 PATH+=:/home/takuya/.bin いま…

bashでif に正規表現を使った文字列マッチ条件分岐

bash の使い方 bash の使い方の正規表現編です。 bash で正規表現マッチのif も出来ます。 Version 3.2 くらいから、=~ によるマッチ判断ができるようになっています。 正規表現マッチで条件分岐の例 とてもかんたんなマッチングの例を見ておきましょう。 na…

bash の組込 let による数値計算とインクリメント

bash で数字を計算する let bash で数字を計算するときに、どのような方法を使いますか? 数字を計算するときに、いくつか選択肢があります。 expr let C style 主に、この3つのどれかだと思います。*1 今回はこの3つのうち、let について 見ていきたいと…

bashのif文で数字の比較を評価条件ぱぱっとやる方法ー(比較演算子やC言語スタイルforを使う)

bash の if で数値比較をするには シェルスクリプトやbash のターミナルで、数値と数字の比較をしたいとき。 どのような方法を取りますか? a = 1 if (( a )) ; then echo 1 ; fi 私は、C言語スタイルの比較演算子を使うことが多いです。 数値を比較するには…

bash の for ループ : for in スタイル

bash の for ループは for ..in スタイル bash では、for ループを for .. in スタイルで記述することが一般的です。 もちろん、C言語スタイルのbash のfor ループを記述することも可能です→参考 一般的に使われるのは for ... in スタイルではないでしょう…

bashでC言語スタイルforループ

bash ではC言語スタイルのfor ループが使えます。 bash のループの例を調べると seq などが散見されるのですが、C言語スタイルのおなじみの for ループが使えます。 え?とおもった人はbash のヘルプをもう一度見てみてください ヘルプの読み方 bash$ help '…

bash のブレース展開機能の紹介と用例

bash のブレース展開機能が強化されている bash 4.0 から、bash のブレース展開機能が強化されています。 bash のブレース展開の使い方を紹介したいと思います。 bash ゼロ埋め展開機能 数字のゼロ埋めができるようになっています ゼロ埋めの例1 echo {0000…

bash の展開機能をクールに使って、ファイルのバックアップのコピーを楽チンにする

bash には {} の展開機能があります。 これがものすごく便利ですよね。 1〜10までの連番を作る たとえば連番を作る $ echo {1..10} 1 2 3 4 5 6 7 8 9 10 ゼロ埋めで、連番を作る $ echo {001..10} 001 002 003 004 005 006 007 008 009 010 展開をする。…

文字列を逆順にするコマンド rev/ 行を逆さに並べる tac

文字列を逆順にするコマンド。 ls の結果が長くて逆順に出したいと起動するか。たぶん最初に習ってるはずなんだけどよく忘れるんだよね。 tac コマンド。 tac コマンドは、cat の逆だからtac 覚えやすい。覚えやすいのにめったに使わないから忘れるw tac コ…

bashのパラメータのブレース展開での拡張子・ディレクトリ名・ファイル名の取得・拡張子の置換

bash のbrace 展開で文字列を置換する 文字の置換は、bashはとても楽ちんである。 NAME=www.example.com echo ${NAME//./_} # www_example.com echo ${NAME//./_} # www_example_com これをもう少し掘り下げる。 bash でファイル名から拡張子を取出す方法 フ…

waifu2x をシェルスクリプトから呼び出す。

画像を拡大したときに、ギザギザにならないように 画像を拡大したときに、ギザギザにならないように補完してくれるサービスが有りました。 画面キャプチャやちょっと古い画像を拡大するときに、重宝しました。 curl コマンドから呼び出す。 WEBサイトから呼…

ファイル名を0埋めして数字の番号順に並べてファイル名を付け直す

0埋めされてないと結構面倒くさいですよね。 takuya@:2$ ll | head 合計 61404 -rw-r--r-- 1 takuya takuya 8014 2016-02-04 18:15 1.jpg -rw-r--r-- 1 takuya takuya 3931 2016-02-04 18:15 10.jpg -rw-r--r-- 1 takuya takuya 2852 2016-02-04 18:15 100.…

シェルの組込関数(ビルトイン)の使い方manを見る方法

Shell Built'in Functions のヘルプを見たい Man ページだと見れないんだよ。man だと。 man history ## 見れない。 man で見ると、shell builtins に飛ばされる。そしてオプションを見られない。 help を使う。 help history help コマンドを使う。 シェル…

空白を含むファイル名や出力結果を1行ずつbash/forで扱うには。IFS シェルスクリプトの小手先

空白を含むファイル名を扱いたい。 最近のbash 最新版ならナニも考えずに、ファイル名の空白気にせず動くんですよ。 takuya@~/Desktop/tmp$ for i in * ; do echo $i; done ; サンプル-01 [2016-04-05].txt サンプル-02 [2016-04-05].txt サンプル-03 [2016-…

指定したファイルの属性情報だけをコピーする。更新日・権限を揃えたい。

ファイルの属性情報を同じにしたい ファイルをコピーすると、作成日時の情報が喪失したり、しなかったり。イマイチ安定しない。 ファイルの作成日時って結構大事な指標で、ファイルを並べたり整理整頓したり、探したりに使えます。 だからこの情報が失われる…

bash-completion を自分で作る。独自補完を作ってみた。

bash-completion is 便利。 bash-completion って便利ですよね。zsh ユーザには興味のない話かもしれないけど、、zsh に比べ bash はどこでも使えるので便利なんですよね。 brew install bash-completion また、各コマンドのcompletion もbrew や apt で一緒…

bashのalias に引数を渡すには?

Bash のAliasに引数を渡す。 何も考えずに、Aliasをするとそのまま渡される。 alias some=echo some aaaaaaa alias は実行前に、bashが解釈するために some aaaaaaa は echo aaaaaaa` に展開される。 出来ない。 なので次のようなことは出来ない。 alias git…

bashでファイルがリンクかどうか調べる

このファイルがリンクかどうか調べるには if [ -f /usr/local/bin/ruby -a -L /usr/local/bin/ruby ] ; then echo "link exists" else echo "not link" fi Bashの比較オプション オプション 意味 -f ファイルかどうか調べる -L シンボリックリンクかどうか調…

bash のチルダ展開をやめさせる方法。

bash がチルダを展開しちゃって読みづらい。 vim ~/.bash<TAB> vim /home/takuya/.bashrc # 展開される。 この展開をやめさせる方法。 展開は2つで行われる。 ひとつは、 .inpurc の設定。 もうひとつは bash_completionの補完 .inputrc による展開の設定 takuya</tab>…

コマンド履歴の検索をカンタンにする

inputrc について調べていたら、いろいろ便利なものを発見した。 ctrl+R を打ち込んで履歴検索が面倒。 .inputrc に次のように書く。 "\e[B":history-search-forward "\e[A":history-search-backward すると、いま入力した文字でコマンド履歴が検索できる。 …

xmlを見やすいインデントに整形する(xmllint)

xmllintで 便利ですよねぇ。 xmllint を使うとフォーマットを整形して、美しく見やすくすることが出来る。 xmllint --format content.opf サンプル 準備として、最初に、XMLから改行を取り除いて、一行にする。 curl -s 'http://hatenablog.com/oembed?url=h…

bash でファイル名展開を階層を降りていく **/*.phpのように

いまどきの bashなら パス名展開も出来る。 zsh なくてもbashでもう大丈夫。 shopt -s globstar コレ書くだけ。 すると、階層をたどって展開される こんな感じ takuya@rena:~/repos/my_command$ ls -l **/*.rb -rwxr-xr-x 1 takuya staff 459 7 4 2014 cygwi…

標準入力行を文字長さ順にソートする

PATHを文字の長さ順にソートしたいと思いました。 PATH文字読みにくい。 PATH=/usr/local/share/npm/bin:/Users/takuya/.rbenv/shims:/usr/local/sbin:/Users/takuya/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin : を 改行に置換して表…

aliasの使い方

bash でのalias と tch 系のaliasは設定方法が異なる。 alias 設定 alias ls=ls aliasを一時的に無効にする \ls alias解除 unalias ls 一覧表示 設定済みalias一覧 alias less を more っぽく見せたい場合 alias more="less '-E -P?f--More-- (%pb\%):--More…

Bashシェルスクリプト入門

シェルスクリプトの書き方を調べています。ちょっとずつ追記していきます。 全体の見出し。 シェルスクリプト書き方 shebang 実行許可 変数 変数 foo=bar 文字列 コメント クォテーション 引数展開 シェル変数 環境変数 特殊変数 変数置換 if文 条件 エスケ…

bashスクリプトで、変数が空かどうか調べる。

Bashをつかって、Basic認証をガリガリチェックしていた。 bashを使ってBasic認証をチェックする。 ret=`wget -O - --http-user=$username --http-passwd=$password $url -nv 2>/dev/null ` if test "$ret" = "" ;then echo "$username" was login failed.; f…