7月に動作していた処理が8月にエラー

TL;DR 0始まりの数字を10進数で解釈させたい場合は$((10#$val))のように記載する。 経緯 date +%mの結果は、8月の場合は'08’となる。これを先頭の0を取って比較したいため$(($val))とやっていたところ、7月までは問題ないのだが8月になって以下のようなエラーが出る。 08: value too great for base (error token is "08") bashでは一文字目が0の数字は8進数とみなされるため、08という表記はダメ、というエラー。 対応としては、$((10#$val))のように変数の頭に'10#‘をつけることで10進数で解釈させることができる。 https://stackoverflow.com/questions/8078167/printf-in-bash-09-and-08-are-invalid-numbers-07-and-06-are-fine 同じようなことは過去してきたと思ったのだが、今回初めて遭遇してかなりびっくりした。

<span title='2021-08-02 00:00:00 +0900 +0900'>August 2, 2021</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

bashのfunctionの戻り値とexit status

bashで戻り値とexit statusがごっちゃになっていたのでメモ。 [参考] https://www.shell-tips.com/bash/functions/ https://eng-entrance.com/linux-shellscript-function 戻り値 function func1(){ echo "2" echo "err" >&2 return 1 } return_value=`func1` rc=$? 上記コードでreturn_valueに格納される値「2」。function内で標準出力に出力した内容がすべて格納される。標準エラー出力に出力した内容は含まれない。 exit status 上記コードでrcに含まれる値「1」。8bitの範囲である0-255の範囲しか指定できない。

<span title='2021-06-23 00:00:00 +0900 +0900'>June 23, 2021</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41

rm /* やってしまった

やってしまいました。 rm ${HOGE}/* HOGEが未定義のため、ルートディレクトリのファイルが全削除。 幸い、rfオプションは付けていなかったので、消されたのはファイルのみ。 CentOS7において、ルートディレクトリに存在するファイルは以下のシンボリックリンク。 /bin -> /usr/bin /lib -> /usr/lib /lib64 -> /usr/lib64 /sbin/ -> /usr/sbin 組み込み系のコマンドしかまともに動作せず、/usr/binフォルダに移動してコマンドを実行しても -bash: /usr/bin/ln: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: となってしまう… なんとかググって見つけた以下のサイト [https://ja.stackoverflow.com/questions/24643/rm-f-%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%97%E3%81%9F:embed:cite] # /usr/lib64/ld-linux-x86-64.so.2 --library-path /usr/lib64 /usr/bin/ln -s /usr/lib64 /lib64 # /usr/bin/ln -s /usr/bin /bin # ln -s /usr/lib /lib # ln -s /usr/lib64 /lib64 # ln -s /usr/sbin /sbin 上記コマンドで復旧した。神!! 感謝!!! 死ぬほど焦った… 今覚えば、/usr/bin/busyboxを使えばよかったのかもしれない。 ちなみに、shebangにて #!/bin/bash -eu とやっていたのだが、該当ファイルを/bin/bashの引数で呼び出したので効いていなかった… shebangではなく本文中にset -euと書くことが大事だと、死ぬほど理解した.

<span title='2019-07-26 00:00:00 +0900 +0900'>July 26, 2019</span>&nbsp;·&nbsp;1 min&nbsp;·&nbsp;tack41