経過日数を調べる

表題をshellで。

■ 環境

  • Linux

■ date

`date`コマンドで可能そう。

$ date -d '2017/01/01' +%s
1483196400
$
$ date -d '2017/09/06' +%s
1504623600
$

エポック秒の差分をとって日に変換する。1行で書くと下記のようなものに書ける。

$ expr \( $(date -d '2017/09/06' +%s) - $(date -d '2017/01/01' +%s) \) / 24 / 60 / 60
248
$

合っていそうだ。

以上。

shuf

表題のコマンドを知ったのでメモ。

■ 環境

  • Amazon Linux

■ shuf

どのパッケージに入っているのか確認。

$ which shuf
/usr/bin/shuf
$ rpm -qf /usr/bin/shuf
coreutils-8.22-15.52.amzn1.x86_64
$

ヘルプを見てみる。

$ shuf --help
使用法: shuf [OPTION]... [FILE]
または: shuf -e [OPTION]... [ARG]...
または: shuf -i LO-HI [OPTION]...
Write a random permutation of the input lines to standard output.

Mandatory arguments to long options are mandatory for short options too.
  -e, --echo                treat each ARG as an input line
  -i, --input-range=LO-HI   treat each number LO through HI as an input line
  -n, --head-count=COUNT    output at most COUNT lines
  -o, --output=FILE         write result to FILE instead of standard output
      --random-source=FILE  get random bytes from FILE
  -r, --repeat              output lines can be repeated
  -z, --zero-terminated     end lines with 0 byte, not newline
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

ファイルの指定がなかったり, - であった場合, 標準入力から読み込みます.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
shuf の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。
完全な文書を参照する場合は info coreutils 'shuf invocation' を実行してください。
$

実際に試してみる。10から20の間の数をシャッフルする。

$ shuf -i 10-20
13
17
20
10
15
12
18
14
11
19
16
$

なるほど。ではこの中から1つを表示。

$ shuf -i 10-20 -n 1
14
$ shuf -i 10-20 -n 1
19
$ shuf -i 10-20 -n 1
11
$

実行する毎にランダムにシャッフルした結果の1つを取得できる。単純にランダムな数値を欲しい時に使えそうだ。

以上。

シェルスクリプトにおけるifの複数条件

表題の通り。たまに忘れるのでメモ。

■ 環境

  • Linux

■ if

自身は下記のように書いている。例えば”${KEY}“変数が空である場合。

if [ -z "${KEY}" ] ; then
  :
fi

■ AND

${KEY1}“と”${KEY2}“がともに空である場合。

if [ -z "${KEY1}" -a -z "${KEY2}" ] ; then
  :
fi

■ OR

${KEY1}“と”${KEY2}“のどちらか一方でも空である場合。

if [ -z "${KEY1}" -o -z "${KEY2}" ] ; then
  :
fi

以上。

exprで四則演算

表題の通り。掛け算をどうやるんだっけ?とド忘れしまったのでメモしておく。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ expr

足し算

$ expr 2 + 3
5
$

引き算

$ expr 2 - 3
-1
$

割り算

$ expr 10 / 2
5
$

掛け算

$ expr 10 * 2
expr: syntax error
$
$ expr 10 \* 2
20
$

*“がワイルドカードとして展開されてしまうのが原因である。しっかりエスケープする必要がある。これは括弧を使用する場合にも同じである。

$ expr ( 10 + 2 ) \* 3
-bash: syntax error near unexpected token `10'
$
$ expr \(10 + 2 \) \* 3
36
$

以上。

■ 関連

小数点以下の計算