Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

bash

【読書メモ】シェルスクリプト+データベース活用テクニック―Bourne ShellとSQLiteによるDBシステム構築のすすめ

シェルスクリプト+データベース活用テクニック―Bourne ShellとSQLiteによるDBシステム構築のすすめ作者:雄二, 広瀬カットシステムAmazon結構前から、システムを作るときにはシェルスクリプト on Bashな構成で作っています。 保存はファイルにやってたのです…

printf(1)の"-v"オプションで生成文字列を変数に格納する

実際のところ 今までは、こんな感じで変数の代入で式展開というようなアクロバットな事をしていました。 $ OURVAL=`printf "%x" 254` $ echo $OURVAL feこれが、"-v"オプションでこう書けます。 $ printf -v OURVAL "%x" 255 $ echo $OURVAL ff 参考もと Con…

foldコマンドで数文字毎に折りたたむ

ソレなりに長い16進数ダンプの文字列があって、それを4バイトごとに折り返して格納する必要がでてきました。 awkでやろうかとも思いましたが、そういうコマンドがあるんじゃないかと調べたところ……foldコマンドを発見。 早速使ってみることに。 実際のと…

ヒアドキュメント中で16進数として格納された文字列を10進数にパースし格納する

ヒアドキュメントとtrで長めな文字列を成形 - Bye Bye Moore と bash内の算術置換で16進数の数値をつかう - Bye Bye Moore の発展的話題。 実際のところ NetcatでUDPでウケたデータをhexdumpでベタ文字列にし、それをパースする例。Bashの基数記法を使って、…

ヒアドキュメントとtrで長めな文字列を成形

実際のところ $ tr -d '\n' << EOF 12 34 EOF 1234 応用すると、目視し辛いデータの可視性が多少マシになる。 速度は落ちるかもしれないが……。 $ VAL_C=$(tr -d '\n' << EOF 12 34 EOF ) $ echo $VAL_C 1234 bashの16進数記法もパース可能 $ DATACMD="$(tr -…

Debian標準添付の対話型CLIツール「whiptail」の事例をしらべる

設定画面とかは気を回せばいくらでも丁寧に作成可能ですが、 自分で使うツールに手を掛けすぎてもコストが回収できませんよね。 とはいえ、設定ファイル単体駆動みたいな構成にすると後が死ぬし……。 こういう時、ちょっとした対話型インターフェイスがあると…

シェル関数statでファイルの情報を取得

実際のところ シンプルな読み出しでは各種情報が出てくる。 $ stat tk-test2.py File: tk-test2.py Size: 2591 Blocks: 8 IO Block: 4096 通常ファイル Device: b307h/45831d Inode: 134198 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/ pi) Gid: ( 100…

シェル関数uptimeでシステムの起動時間を知る

uptime関数はシステムがどの程度起動しているかを調べられる関数です。 実際のところ $ uptime 00:34:25 up 2:21, 3 users, load average: 0.12, 0.12, 0.09"-s"をつけると、起動した時間が”yyyy-mm-dd HH:MM:SS”の形式で出てきます。 $ uptime -s 2021-01-1…

dateコマンドでUNIX秒+ミリ秒な文字列を生成する

$ date +%sとすればUNIX時間の秒表記がでてきます。 が、連携先がGPSなど秒より細かい刻みで動いてるデータの場合、ミリ秒の単位があると嬉しかったりすることも。 実際のところ 揃えればいい時 なら、とりあえず1000倍……というか、末尾にゼロ3個。 $ date …

curlコマンドのヘッダーの要素を追加

shuzo-kino.hateblo.jp の続きめいた話。JSONをポストする際、ヘッダ部分にAPPKEYを入れる仕様に対応したとき。 実際のところ ファイル”YOURKEY”に記載された内容をリクエストヘッダのYourKeyに渡して使うには以下のように。 $ curl -X POST -H "Content-Typ…

curlコマンドのデータペイロードに標準入力をつなぐ

みんな大好きパイプ処理。 小分けに作成できて、僕は好きです。 さて、今回はそんなパイプ芸をCurlでも使う方法をば。 標準入出力は"-"で表現される事が多いですが、このCurlでもそんなノリ"@-"で使えます。 実際のところで echoで出力したJSONをCurlのデー…

"-bash: 警告: command substitution: ignored null byte in input"について

"-bash: 警告: command substitution: ignored null byte in input"について。 bash4.4から導入された警告文らしい。 実際のところ 例のごとくバイト列遊びをしていた時の事。 netcatでうけた文字列をhexdumpで表示しようとしたら、以下のような警告文が。 $…

bash環境下で”$ echo *とやったら現在のディレクトリが表示された話

未開蛮族なので”$ echo *”でlsっぽい出力でるの知らなかった— 木野修造@零細事業主 (@shuzo_kino) January 7, 2021 これなら、ただの便利コマンドやん……で終わるのですが。 echoのインライン実行でこれを知らないと面食らうかも。 というか私はギョッとしま…

"/dev/udp"をつかう

実際のところ netcatだと echo "something" | nc -u -w0 127.0.0.1 8125これがbashの場合、 echo "something" >/dev/udp/127.0.0.1/8125 echo "$*1" > /dev/udp/lights.climagic.com/45444 # Send a random number 1-9 over UDP to https://t.co/2ECImTvDRH …

パイプで繋いだwhile構文の条件にreadコマンドを使うと、すこし複雑な文字列を先に生成してから処理できる

パイプで繋いだwhile構文の条件にreadコマンドを使うと、すこし複雑な文字列を先に生成してから処理できる 実際のところ なんのこっちゃと思うので、実例を一つ。yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .02; done # …

シェルスクリプトの変数は持ち越されるので作り捨てでも名前は分けましょうという話

シェルスクリプトは書くの楽なので、私はついつい書き捨てのモンを量産してしまいます 今日、それぞれ別の件で作ったモンを一つのボードに入れたところ、なぜか動かず。 原因をしらべたところ、RasPiのボタン状況をとる変数が共通していていたのが原因でした…

Waveshare社OV5648USBカメラをつかう その4:GPIOをトリガーにして撮影してみる

実際のところ BCM2とGNDにそれぞれ線をつなぐ。 操作スクリプトの”button.sh”はこんな塩梅。 #!/bin/bash while : do if [ $(gpio -g read 2) == 0 ]; then fswebcam -r 1920x1080 -S 12 -F 1 image/$(date -Iseconds).png fi printf "." sleep 0.5 doneこの…

findで直近30分の間で更新されたファイルをさがす

"mmin"オプション使うといけます 実際のところ ”.log”の拡張子をもつファイルのうち、直近30分で更新されたものを探すには $ find . -name "*.log" -mmin +30 -print日数ならmtime(ただし0のとき当日)があります。 秒はないようです。 あっても、そんな変…

bashで少しだけ違うコマンドを楽に入力する

実際のところ こんなコマンドがあるとします。 $ echo some someこれの入力を"Rome"にしたいなら、こんな記法で臨みの結果が得られます。 $ !!:s/s/R/ 2>/dev/null echo some Romeデフォだとhistroy番号から実行するやつ(!NUM)と同じようにエラー出力に実…

FINSコマンドの終了コードで90とか出たら、アドレスが逆かも

あまりにマニアックすぎるネタですが、今後のためにメモ。OMRON製PLCと通信するときに使うFINSコマンドで 終了コードで90とか出たら、アドレスが逆かも……という話。これは、ネットワーク異常を示す先頭ビットが立った状態で、 かつパケット不正を示すメイン1…

hexパケットを吐き出すUDPサーバーにnetcatで通信し帰ってきたhexをみる

前の記事でやった変数格納を使って hexパケットを吐き出すUDPサーバーにnetcatで通信し帰ってきたhexをみる方法を実験しています。 実際のところ YOURPACKETにhexの値を投入しときます。 これをprintfで標準出力に出し、netcatのタイムアウト設定付きで受け…

printfで別プロセスで作った特殊記法の16進数文字を出力する

printfで別プロセスで作った特殊記法の16進数文字を出力する方法 ……上手い言い方を知らないので周りくどい表現ですが 変数に格納してインライン展開という方法が今の私の精一杯でs(白目 実際のところ まず、以前の記事で調べたように文字列中に特殊記法な…

シェルスクリプトで一定秒まつ

sleepだったかwaitだったかdelayだったか毎回忘れるのですが シェルスクリプトは秒1秒まつのは sleep 10.2秒なら $ sleep 0.2 参考もと man sleep

nohupコマンドでログアウト後もバックグラウンドでコマンドが実行されるようにする。

nohupはN0 HungUpの略で、その名の通りhung upシグナルの影響を抑えてコマンドを実行できるやつです。 実際のところ X Window越しでRasPiのGUIを起動する - Bye Bye Mooreで以下のようなコマンドを叩きましたが $ nohup arduino &これだとarduinoコマンドを…

socatで作ったサーバーに一個毎にデータを送る

socatで作ったサーバーにデータを送る方法です。 なんも考えないでnetcatで送信、コネクションが切れず終わらない 実際のところ サーバー ベタに、パケットを受け取って、USBポートにつないだシリアルデバイスにパケットを流す構成です。 $ socat TCP4-LISTE…

WiringPiのシェルコマンド 群 HIGH/LOWの読み書き

以前、つよいインターフェイスをもつ RasPi拡張ionoPiには、専用のシェルコマンド群があることを紹介しました。 Iono PiのI/Oをいじる その2:シェルからI/Oに手をつっこむ - Bye Bye Moore散々っぱら使っておいて今更気づいたのですが、wiringPiでも読み書…

シェルスクリプトの関数の引数として文字列をわたすと行頭スペースが勝手にパースされたりする件

……printfやechoで、行頭のスペースが消されて見えなくなるというあれが。 スクリプトの方はちゃんと整形していても、出力でお節介されたらたまりません。shunit2でテストをやろうとした時、先頭にスペースがあって然るべき文字列として渡しても、 スペースを…

ビッグエンディアンで数バイト格納されているデータをsedやawk でパースする

ビッグエンディアンで2バイト、1バイト、1バイトと格納されている文字列が来ていたとします。 こいつをリトルエンディアンで置き換えるには先頭だけ入れ替えてあげればいいですね。 $ echo AD7399AF | sed -e "s/\([1-9A-F]\{2\}\)\([1-9A-F]\{2\}\)\(.*\…

ddコマンドでNULL(0x00)埋めデータをつくる

実際のところ 100バイトのファイルを生成する場合は以下のように。 bsがバイト数、countが繰り返しで、出力を指定するifが0x00を延々と出力する/dev/nullなので 期待した出力が得られます。 dd bs=100 count=1 if=/dev/zero of=file1ためしにhexdumpで見ると…

sedで複数行にまたぐ処理をしたい時、パターンマッチ併用でやや複雑な事ができる。

shuzo-kino.hateblo.jp の発展です。 実際のところ こんなファイルがあったとします。 $ cat sample.txt This is my dog, whose name is Frank. This is my fish, whose name is George. This is my goat, whose name is Adam.ここで、dogが含まれる行だけ改…