I have a number 12343423455.23353. I want to format the number with thousand separator. So th output would be 12,343,423,455.23353

はじめに Bashでのファイルの読み込み、変数への格納、一時的な環境変数について、forよりもwhile readを使うと便利な点を記載する。 例題として、以下のCSVファイルを読み込んで各列を変数に格納する。 id1,sh id2,bash forを使う場合 forを使うと以下のようになる。 for i in `cat csv` do key=`echo $i | cut -d, -f1` val=`echo $i | cut -d, -f2` echo "$key => $val" done # 出力結果 #id1 => sh #id2 => bash while readを使う場合 while + readに一時的な環境変数を用いると、もっと簡潔に書ける。 while IFS=, read key val do echo "$key => $val" done < csv readの
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、本当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シ
[追記] 実行中のシェルスクリプトをchattr(1)を使ってimmutableにするというのはどうか - その手の平は尻もつかめるさ 調べてみたけどこれが良さそう <a href="https://stackoverflow.com/a/3399850/1921216" target="_blank" rel="noopener nofollow">https://stackoverflow.com/a/3399850/1921216</a>2022/01/02 17:02 b.hatena.ne.jp このブックマークコメントで指摘されましたが、immutableにするまでもなくこのラッパースクリプトを噛ませると良さそう。 #!/bin/bash # usage: # sh-run.sh script-you-want-to-run.sh args... set -ue file="$
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? はじめに ことの始まりは「シェルスクリプトでツールを作ったけど速度が遅くて使い物にならなかったので供養」というツイートを見たからです。コードを見てみると、実例をあまり見ないシェルスクリプトのリファクタリング例として丁度良い内容と分量だったため記事にいたしました。記事を書くにあたりコードの利用を快く承諾していただいた @Hayao0819 様にはこの場を借りて御礼を申し上げます。 内容は章立てで構成しており、序章で事前調査をし、第一章で一般的なリファクタリング、第二章でパフォーマンスを重視したリファクタリング、終章で少し余談をして締めくく
POSIX 準拠のシェルスクリプトでは find | xargs よりも find -exec {} + を使うべき!ShellScriptBashshellPOSIX はじめに find の出力を xargs にパイプで渡すというのはよく見かける使い方ですが、find -print0 | xargs -0 が使えない POSIX 準拠のシェルスクリプトでは find -exec {} + を使った方が良いです。安全かつ十分に速いからです。よく見かける -exec {} ; ではなく -exec {} + ですので間違えないようにしてください。多くのケースでは + の方が優れているのですが ; ばっかり使われているのを見ると、意外と知られてない気がします。 少しだけ予備知識として、-exec {} ; は -exec {} \; と ; をバックスラッシュでエスケープするのがよく見る使い方
ちなみに [ の外部コマンド版が /usr/bin/ と /bin/ の両方にあるのは Ubuntu 20.04 では /bin が /usr/bin へのシンボリックリンクになっているからです。Ubuntu や Solaris 10、11 などでは(ディスクサイズが大きい今では分ける理由がないから)と統合されています。Debian では統合されてない上に [ は /usr/bin 以下にあったりします。元々 /usr/bin は必要性が低いコマンドを置く場所なので、そこに [ があるというのは面白いですね。 [ が /bin/[ だったのはいつまで? この /bin/[ が使われなくなったのは今から 40 年前の Unix System III (1981) に搭載された Bourne シェルからのようです。 The Traditional Bourne Shell Family より
Bashでスクリプトを書く場合のポイントをまとめた Bashなどで書くシェルスクリプトは文法がシンプルで覚えると便利。他のプログラム言語だと何行もかかなければならないファイル操作や中身のデータ処理を、ちょちょいと数行レベルで書けとても強力だ。コマンドとの親和性が高い恩恵だろう1。 旧来バッチ処理で本領を発揮するシェルスクリプトだったが、昨今はDocker(Dockerfileや起動スクリプトなど)で活用される機会も多いだろう。 しかしながら他のプログラム言語ではみられない記法があったり、逆に似た書き方もあったりと、混乱しがちなのもシェルスクリプトの特徴かもしれない。 いちいちGoogle先生に確認するのもめんどうなので、このページに整理した2。 主な参照先(よくお世話になっているページ): UNIXの部屋(68user's page) - http://x68000.q-e-d.net/~
bash のシェルスクリプトを書くときに、いつも脳死で以下をやっている。(同僚が整備してくれたものをコピペしている) エディタなり CI で shellcheck をまわす set -euxo pipefail と冒頭に書く こんな感じ #!/bin/bash set -euxo pipefail いつまでもコピペではさすがにアレなので、意味を調べたメモ。 shellcheck koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts イケてない書き方に警告を出してくれる それぞれの警告にはエラーコード割り振られていてとても便利 エラーコードごとに正誤例、解説が書かれているのでわかりやすい SC1000 の例 CI もそうだし、エディタのプラグインも充実 しているのでとりあえず入れておくと良い set
my_func () { argument=$(パイプで受け取る) echo "my_func: $argument" } echo "hoge" | my_func # my_func: hoge my_func () { if [ -p /dev/stdin ]; then echo "*** From pipe ***" argument=$(cat /dev/stdin) # alternative: $(cat -) else echo "*** NOT from pipe ***" argument=$1 fi echo "my_func: $argument" } echo "hoge" | my_func # my_func: hoge [ -p /dev/stdin ]の中の-pは対象がパイプファイルであれば真となる。 catに-を与えると標準入力から読み込みを行う。ca
よくやるのが以下の記述だったのだけれど SCRIPT_DIR=$(cd $(dirname $0); pwd) これだと、このスクリプトをシンボリックリンクから呼び出したときに、 実ファイルのパスでなくリンク先のディレクトリが取得されてしまっていた。 シンボリックリンクから呼び出されたときも、実ファイルのパスを返すようにするには、 SCRIPT_DIR=$(cd $(dirname $(readlink $0 || echo $0));pwd) のようにすればよさげ。 追記)id:ngyukiさんにご指摘をいただいたので修正。 スクリプトがシンボリックリンクなディレクトリにあることを考慮して readlink -f とか cd -P とか pwd -P とかにするとなお良いのかな おお、なるほど。やってみたら確かにシンボリックリンクなディレクトリにあるとうまくいかなかった。なので修正した以
ご家庭で常時動いているサーバーの情報をどのように通知していますか? メールや専用のミドルウエアを利用して通知している方も多いかと思いますが、メールサーバーやミドルウェアなどの構築となると少しハードルが高くなってしまいます。 今回はPushbulletの紹介と併せて、UbuntuでPushbullet利用してお手軽にサーバーの情報を通知してみます。 Pushbulletとは? Pushbulletはサイトの説明にあるように、スマートフォンやタブレット、PCなどのデバイス間を接続するサービスで、スマートフォンやタブレットからの通知をデスクトップへ、またその逆へとデバイス間の通知を共有できるサービスです(図1)。 図1 Pushbullet 対象となるデバイスは、AndroidやiPhoneといったスマートフォンをはじめとし、ChromeやFirefox、SafariやOperaなどのブラウ
LinuxやUNIXを利用していると、スクリプト名などのファイル名のルールが変更したため、一括で置換を行いたいときがある。 そんな時は、どうすればいいのだろうか? 1.『rename』コマンドを利用する もし『rename』コマンドがあるようならば、これを利用するといいだろう。 Linuxには大体最初から用意されている。(なお、Ubuntuの場合だと置換の指定方法がPerl(sed)の指定方法になっている) rename 置換する単語 置換後の単語 対象PATH この対象PATHにはワイルドカードも利用できるので、以下のように一括で置換を行える。 [root@test-centos7 test]# ls -l 合計 0 -rw-r--r--. 1 root root 0 7月 3 06:37 TCScript0.sh -rw-r--r--. 1 root root 0 7月 3 06:37
Latest topics > tmuxとかの仮想端末で複数の画面間でBashのコマンド履歴を共有すると同じ履歴が何度も記録されてしまう問題を解決する 宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! « 説明すること、理解を求めること、自分が相手を理解すること、目を逸らさず自分の非に向き合うということ Main 技術書典4に参加して「まんがでわかるLinux シス管系女子3」とかグッズとか頒布しました » tmuxとかの仮想端末で複数の画面間でBashのコマンド履歴を共有すると同じ履歴が何度も記録されてしまう問題を解決する - Mar 04, 2018 このエントリはQiitaとのクロスポストです。 まんがでわかるLinux シス管系女子の74ページ
Bash は言わずと知れた歴史あるコマンド言語です。テキストにコマンドの羅列を記述するだけで、手軽にシェルスクリプトとして実行することができます。 シェルスクリプトの実体はシェルコマンドの羅列に過ぎませんが、手続き型プログラミング言語にあるような制御構文も備えています。変数や条件分岐、ループ、関数などです。これらを使えばシェルスクリプトでプログラミングも可能です。 もちろん、現代の一般的なプログラミング言語と比べると機能は限られます。他の言語には見られないシェルスクリプト特有の癖や記法も数多くあり、最近の言語に慣れている人ほど、つまずくポイントが多いです。 しかし、シェルスクリプトだからこその良さもあります。Bash は現在でも多くの OS で標準シェルとして採用されており、普段使っているシェルコマンドを書くだけで動かせる手軽さは何者にも代えがたいです。一度身につけておくと長く使えるお得な
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く