Macのdateコマンドで週の開始日(weekday)を取得する
Macのdateコマンドでは-dオプションが利用できない 忘れた頃にハマる。。 週の開始日なども取得できないので、関数を作成した。 週の開始日を取得する関数 #!/bin/bash sdate=$1 function weekday(){ sdate=$(date -j -f "%Y-%m-%d" "$sdate" +"%Y-%m-%d") wname=$(date -j -f...
View Article正規表現 例題・解説集(bash)
はじめに ひよっこエンジニアです。初心者向けにbashでの正規表現についてまとめています。 また、様々なパターンを調べるために、簡単な問題と解説を用意したのでトライしてみてください。 正規表現 記号や文字列を組み合わせて、目的のキーワードを見つけるためのパターンを作り、検出する方法。 記号はメタキャラクタと呼ばれ、記号にそれぞれ意味がある。 主なメタキャラクタ 記号 意味 備考 ^ 先頭 $ 末尾...
View ArticleLinux: 画面が文字化けしてしまった時にはRESETコマンド
たまに必要となるのでメモ。 実施環境: Linux [testuser@testhost ~]$ uname -a Linux testhost 4.18.0-147.8.1.el8_1.x86_64 #1 SMP Thu Apr 9 13:49:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux [testuser@testhost ~]$ echo $SHELL...
View Articleシェルスクリプトの「if」は条件式の「コマンド」の実行結果を判定している
シェルスクリプトで条件式を書く場合、一般的なプログラミング言語と同じように if と記述することで判定処理を行うことができます。 例えば、ホームディレクトリ配下に「 .profile 」が存在するかをチェックする場合はこんな感じです。 if [ -e $HOME/.profile ] ; then echo ".profile is exists" fi つい最近まで「シェルスクリプトの if は...
View Articleシェルスクリプトの「if」で「なにもしないをする」をやりたい場合
シェルスクリプトの if では条件が真の場合になにも処理を書いていない場合、エラーとなります。 if [ 条件式 ] ; then #なにもしない(あとで実装予定) else if [ 条件式 ] ; then exit 0 else exit 1 fi fi echo 'successful' なので、↑このスクリプトを実行するとエラーになります。 $ bash if_sample.sh...
View Article画像とグラフの重ね合わせ(gnuplot; 陽性者予測と実際の比較図の作成を題材に)
導入 画像とグラフを重ね合わせる機会はそれなりにある(特に古い文献を扱う場合).ここでは,画像とグラフをgnuplotでどう重ねるかについて,コロナ禍のなか話題になった,あるショッキングなグラフを題材にして述べる. そのショッキングなグラフとは,東京五輪開催に伴う新規陽性者シミュレーションと実際を比較したこのグラフである:...
View Articlebashのinvert変数の使われ方(メモ)
bashのexecute_command_internal関数のなかのinvert変数の使いみちが気になったので、調べてみたら、set -e に関連していることがわかった。 bashでset -eを実行すると、スクリプトの処理中にエラーが起きるとすぐに終了させることができる。 例えば、 $ for i in $(seq 10); do saiko; done とすると、エラーが10回表示されるが、...
View Articlebashのexecute_command_internal()に関する疑問(メモ)
bashのexecute_command_internal()の658行目あたりに子プロセスが実行する部分がある。 こんな感じ pid_t paren_pid; int s; /*中略*/ paren_pid = make_child(/*sは使われない*/); if (paren_pid == 0) { s = (/*フラグとかを評価*/) s += (/*フラグとかを評価*/)...
View Articlebashのコンパイルについて
この記事は、bashのソースを読みたいがコンパイルの仕方を知らない人向けに書きます。 bashは以下の手順でコンパイルできます。 $ wget https://ftp.gnu.org/gnu/bash/bash-5.1.tar.gz $ tar -xzf bash-5.1.tar.gz $ cd bash-5.1 $ CFLAGS="-g -O0" ./configure $ make -j 7...
View ArticleMacとRaspberry Piでshとbashの違いを確認
環境 macOS Catalina 10.15.7 Raspbian 10.3 実行するシェルスクリプト test_sh.sh #!/bin/sh echo {0..10} test_bash.sh #!/bin/bash echo {0..10} Mac上で実行 $ chmod +x test_sh.sh $ chmod +x test_bash.sh 実行権限を与える。それぞれ実行すると、 $...
View ArticlebashのTMOUT周りについて
bashにはTMOUTと呼ばれる変数がある。 これは文字通りタイムアウトの秒数を設定するための組み込みの変数で、 例えば以下のようにするとbashはTMOUT秒たったあとに終了する。 $ TMOUT=10 #10秒以上放置 man bashを見ると以下のように書いてあった。 TMOUT If set to a value greater than zero, TMOUT is treated as...
View Articlebashで参照変数(変数の変数)の値が設定されているかの判定
目的 変数で変数を定義したいことがあります。これを参照変数と呼ぶとすると、元の変数で参照先の変数が設定されているかを判定できるか?の記事です。 探してもすぐに出てこなかったので自分で試しました。 環境 bash --version GNU bash, バージョン 5.1.0(1)-release (x86_64-apple-darwin18.7.0) ... 変数の値に変数名の定義 #...
View ArticleBashで終了ステータスごとに異なる処理を行いたい場合にハマった
複数パターンの終了ステータスを返す「とあるスクリプト」を作成 終了ステータスが成功パターン(exit 0)、失敗パターンA(exit 1)、失敗パターンB(exit 2)のように3パターンにわかれる「とあるスクリプト」を作成しました。(元々のスクリプトはもっと複雑なんですが、ここでは簡略化して書いてます) とあるスクリプト.sh 処理A || { # 失敗パターンA exit 1 } 処理B ||...
View Article[02] docker-composeを活用して即座にPython 3.9.4 を立てる ... ビルドコンテナ実行ツール作成
本シリーズのトップページ https://qiita.com/robozushi10/items/eebd8068a0533ba49bea はじめに 限られた物理PC の中で、次の Python バージョン ・Python 3.6.8 ・Python 3.7.3 ・Python 3.8.3 ・Python 3.9.4 をインストールしてプログラムを作成することになった. ただし、物理PC...
View ArticleUbuntuシェルスクリプトのループ処理で Syntax error:"(" unexpectedが出たときの備忘録
環境 VirtualBox:6.1.22 Ubuntu:20.04.2 LTS bash: 5.0.17 やっていたこと Linux(Ubuntu)の環境でループ処理を行うシェルスクリプトを作成していた。 しかし配列の代入部分に「Syntax error:”(”unexpected」が出てしまった。 #ファイル名(loop.sh) #!/bin/sh info=(book website...
View Article次期POSIXシェル仕様の「宣言ユーティリティ」とシェルスクリプトの互換性問題
はじめに 次期 POSIX の仕様である Issue 8(2022年 後期予定)ではシェルの機能として「宣言ユーティリティ (Declaration Utility)」というコマンドの種類が追加されます。この記事では宣言ユーティリティの解説とこの種類が追加された理由。これにまつわるシェルスクリプトの互換性問題について解説します。 宣言ユーティリティとは...
View Articleシェルスクリプトの[ -lt, -le, -gt, -ge, -eq, -ne ]が嫌いな人に送るvalハック
はじめに シェルスクリプトでは数値を比較する時の演算子に -lt, -le, -gt, -ge, -eq, -ne を使います。これは他の言語で一般的な <、<=、>、>=、==、!= ではないため、分かりづらいという人がいるようです。-lt や -gt は CSS の実体参照 <、> と同じだし、英語の less than、greater...
View Articleハイフンから始まる〇〇を✗✗したい
-r というファイルを削除したい、みたいな話です。 基本 コマンドの引数に -- が現れたら、それ以降は - から始まる列でもオプションとして解釈しなくなります ハイフンから始まるものがファイル名なら、パスを ./-hoge と指定すればハイフンから始まらずに済みます 失敗する例 % echo hoge > -r % ls -r % rm -r rm: missing operand Try...
View Article【MySQL】DBに接続してSQLファイルを実行してCSVを出力するシェルスクリプト(備忘録)
はじめに DBのクライアントツール(a5:SQL Mk-2とか)が使える環境であれば特段困らないが、そうもいかないとCSVを出すのは至難の業…ということでshで一発でやれるshを作りました。 手順 confファイルを作る (shの中でmysqlコマンドを実行するところでユーザとパスワードを指定することもできますが、実行時に警告が出るのでやっておいたほうが吉。) mysql.conf [client]...
View ArticleBashでjqを使わずsedなど基本コマンドのみでJSONを破綻なく解釈
概要 Bashでjqコマンドなど使わず、sedなどの基本コマンドのみでJSONを破綻なく解釈したい。 破綻なくというのはこの記事では以下を指す。 文字列に記号が入っていても問題ない 配列、オブジェクトのネスト構造を、ちゃんとネスト構造として解釈する 何ができるようになるか Bashで主にsedを使った30行程度の処理で、JSONを破綻なく解釈できるようになる。 例えば、...
View Article