Unix/bash

簡単な計算

> echo $((3+4*2))
11

基数変換

16進数→10進数(hex2dec)

a=10; b=11; c=12; d=13; e=14; f=15
A=10; B=11; C=12; D=13; E=14; F=15
dec=(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)

hex2dec (){
    s=$(echo ${1}|sed 's/\(.\)/\1 /g')
    q=0
    for n in ${s}
    do
      q=$(expr 16 \* ${q} + ${dec[${n}]})
    done
    echo -n ${q}
}
> echo $(( 0x110 ))
272

10進数→16進数(dec2hex)

hex=(0 1 2 3 4 5 6 7 8 9 a b c d e f)

dec2hex () {
    s=${1}
    if [ ${s} -gt 15 ]; then
      dec2hex $(expr ${s} / 16)
      s=$(expr ${1} % 16)
    fi
    echo -n ${hex[${s}]}
}

URLエンコード

URLデコード

> echo "http%3A%2F%2Fsakamoto%2Efam%2Ecx%2F" | tr % = | nkf -emQ
http://sakamoto.fam.cx/
> echo "http%3A%2F%2Fsakamoto%2Efam%2Ecx%2F" | echo -e "$(sed 's/%/\\x/g')"
http://sakamoto.fam.cx/

URLエンコード

> echo "http://sakamoto.fam.cx/| nkf -eMQ | tr = %
http%3A%2F%2Fsakamoto%2Efam%2Ecx%2F
> echo -n "http://sakamoto.fam.cx" | echo -n ${1-`cat`} | od -t x1 -A n | tr " " % | tr -d "\n"
%68%74%74%70%3a%2f%2f%73%61%6b%61%6d%6f%74%6f%2e%66%61%6d%2e%63%78bash-5.0$ 

日付変換

日付文字 ⇒ UnixTime

> date -d "2017-05-24 00:00:00" +%s

UnixTime ⇒ 日付文字

> date -d "@1495551600"

標準入力

標準入力の文字列を事前に指定する

$ cat <<<"any words"
any words

評価

文字列をコマンドとして評価する

$ eval $(echo echo abc)
abc

ネットワーク

TCP通信の疎通確認

192.168.0.1サーバの80/tcpへ通信できるか確認する

$ echo 0 > /dev/tcp/192.168.0.1/80
$                     ←接続できた場合はプロンプトが返ってくる
$ echo 0 > /dev/tcp/192.168.0.1/80
                      ←接続できない場合はずっと待たされる

プロセス置換

プロセスの実行結果をディスクリプタへ書き込み。再利用する。

5秒前のプロセス状態との比較を行う例

$ diff -u <(ps ax) <(sleep 5; ps ax)

<(プロセスA) ・・・プロセスの結果が/dev/fd/xx に書き込まれるイメージ。
つまり、上記は/dev/fd/yと/dev/fd/zを読みこんで比較していると思われる。

null文字

echo コマンドの制御コード評価を有効にするオプション(-e)を利用する。
null文字(\0)の後に数値を繋げると別の意味になるので要注意。

$ echo -e  "123\0abc\0"    | od -c
000000   1   2   3  \0   a   b   c  \0  \n
$
$ echo -en "123\0abc\0"    | od -c
000000   1   2   3  \0   a   b   c  \0
$
$ echo -en "abc\0123\0"    | od -c
000000   a   b   c  S  \0
$
$ echo -en "abc\0\x3123\0" | od -c
000000   a   b   c  \0   1   2   3  \0
$



---
update at 2022/04/16 09:05:29

※注:当サイトは特定環境において確認できた事象のみを記述しています。他の環境での動作は一切保証しません。