$ cat split.sh #!/bin/bash -x <input.txt pr -3tas, <input.txt paste -d, - - - <input.txt awk 'ORS=NR%3?",":"\n"' <input.txt perl -pe'$.%3&&s/\n/,/' <input.txt split -l3 --filter=paste\ -sd, <input.txt perl -l0pe '$_.=$.%3?",":"\n"' $ ./split.sh + pr -3tas, A,B,C D,E,F + paste -d, - - - A,B,C D,E,F + awk 'ORS=NR%3?",":"\n"' A,B,C D,E,F + perl '-pe$.%3&&s/\n/,/' A,B,C D,E,F + split -l3 '--filter=pas
bashコマンドのバックグランド実行方法について、まとまっている記事が見つからなかったのでまとめメモ 通常のバックグラウンド実行 &でバックグランド実行 参考:http://kazmax.zpp.jp/linux_beginner/process_background.html もっとも基本的なバックグランド実行、コマンドの後ろに&をつけて実行する。 ターミナルの切断が切れたりしてログアウトした場合に、 この方法で実行したプロセスはkillされてしまうので注意する。 途切れたら困る処理の場合はtmuxのセッション上で実行、 もしくは後述するnohupコマンドでのバックグラウンド実行推奨。 # バックグラウンド実行 $ sleep 5 & [1] 21871 # プロセス確認 $ ps $! # ps 21871 PID TTY STAT TIME COMMAND 21871 pts/0 S
こんにちは、エンジニアリングGの中村です。 以前にこのブログにてエムスリーでの社内研修について紹介しました。今回は、この中でのbashスクリプティング講座の資料を公開します。 www.m3tech.blog 弊社の中でもいろいろな用途でbashが使われていますが、bashは簡単に利用できるもののプログラミング言語としてはバグを生みやすい、辛い言語だと思います。 ここで紹介しているのはいわゆるコーディング規則というよりも、バグ防止と可読性向上のためのルールをTips集的にまとめたものです。 bashにおいてまだまだ注意するところはありそうですが、多少なりともわかりにくいスクリプトの削減になればと期待しています。 [追記: 2018-08-22] はてブにて以下のコメントをいただきました。 bashスクリプティング研修の資料を公開します - エムスリーテックブログ bashで50行以上になった
株式会社ラクーンホールディングスのエンジニア/デザイナーから技術情報をはじめ、世の中のためになることや社内のことなどを発信してます。 bashインフラLinuxプロセス置換ファイルディスクリプタシェルスクリプト こんにちは、羽山です。 今回は意外と知らないかもしれないbashの「プロセス置換」という機能を紹介します。 UNIXでは「1つのプログラムは1つの機能にとどめ、フィルタとして動作できるようにせよ」という設計思想があります。 その言葉の通り、大抵のコマンドはパイプでつないでフィルタのように動作可能ですが、必ずしも理想的に設計されていない、もしくは仕様上できないコマンドもあります。 例えば、よく使う diff コマンドがこれにあたります。 指定するファイル名を - とすれば片方は標準入力から読み込めますが、もう片方はどうしても引数で指定しなければいけません。 コマンドの実行結果を直接比
空白を含むファイル名を扱いたい。 最近のbash 最新版ならナニも考えずに、ファイル名の空白気にせず動くんですよ。 takuya@~/Desktop/tmp$ for i in * ; do echo $i; done ; サンプル-01 [2016-04-05].txt サンプル-02 [2016-04-05].txt サンプル-03 [2016-04-05].txt ファイル名であれば、ワイルドカードで済むとき「も」あります。 しかしコレがコマンドの結果を使うときなどに困ります。 たとえば、特定の拡張子のファイルを日付順に処理したいなど。 崩れる時があります。 気になるのは、シェル呼び出しをした結果をした場合 takuya@~/Desktop/tmp$ for i in $(ls *.txt) ; do echo $i; done ; サンプル-01 [2016-04-05].txt
BASHとPowerShellのフィルタ処理例をまとめていきます。下記記事たちの続きですので、フィルタそのものの説明、目的、検証環境などの前置きは記事①をご参照ください。 ■BASHとPowerShellのフィルタ処理まとめ① ■BASHとPowerShellのフィルタ処理まとめ② ①と②は主に文字列のフィルタ処理についてまとめましたが、 本記事③は主に行に関するフィルタ処理をまとめていきます。 テスト用のフィルタするファイルは共通して以下3つを使用します。 ①と全く同じ内容に戻しました。 ***<空行>*** ***<空行>*** 連番,氏名,氏名(カタカナ),性別,生年月日,年齢,出身地,血液型 1,海野華音,ウミノカノン,女,1991/06/20,26,静岡県,AB 2,有馬花菜,アリマハナ,女,1989/12/25,28,栃木県,A 3,小柳有紀,コヤナギユキ,女,1998/04/
ドットインストールのシェルスクリプト入門 #04 特殊変数を使ってみよう(新しいタブで開く)を見ていると、特殊変数(以下、特殊パラメータとします)として5つのパラメータが紹介されています。 $1, $2 ... 引数。引数の順番 $0 スクリプトの名前 $# 引数の数 $@ すべての引数の表示 $* $@と同じ 一方、新しいシェルプログラミングの教科書(新しいタブで開く)のP.42を読んでいると4つの特殊パラーメータが表現されています。 $# (ドットインストールと同じ) $? 直前に実行したコマンドのステータス値 $$ 現在のプロセスのプロセスID $! 最後に実行したバックグラウンドコマンドのプロセスID 今回の記事では、ドットインストールの記事では紹介されていない、”$?“の重要性について考えてみたいと思います。なお今回の記事を書くにあたって、下記の3つのページを参考にしています。
@hirose31 さんが「シェルスクリプトでハマった件→【募】ステキな回避方法」でお題を出されていて、それに回答してみました。 その内容はリンク先を見てもらうとして、回答の中で使ったbashのプロセス置換について書かれた記事をあまり見ないので、回答で使ったプロセス置換のことをエントリにしてみたいと思います。 最初に注意点ですが、プロセス置換の機能は、bashやzsh*1の機能でPOSIX互換の機能ではありません。そのため、使用時には、対応していないシェルでは使えませんし、bashで使う場合も /bin/sh ではなく /bin/bash を明示的に指定する必要があります。たとえば、プロセス置換を使ったスクリプト「script.sh」に対して"$ bash script.sh" というコマンドは成功しますが、"$ sh script.sh" というコマンドは失敗します。この辺りの違いは「/
こんにちは、初心者向け基本コマンドを紹介しているシェルスクリプト入門です。 最後で、ファイル名を一発で変える簡単なシェルスクリプトを書いてみましょう。 環境:Mac OSX El Capitan Terminal; bash / sh shell environment; シェルスクリプトとは シェルスクリプトとは、簡単に言うとUnixコマンドなどを並んで実行するだけです。 いつ何の条件で何の命令を実行するとか、ファイルコンテンツを読み込むとか、ログファイルを書き出すとかをする役割です。 基本設定 test.shファイルを作成します。 シェルスクリプトファイルは基本的に.shの拡張子で作成します。 実際のコードを書く前に最初の一行目は #!/bin/shを書き、システムにこれからシェルスクリプトを書きますようと知らせるものです。(#はhash、!はbangですから、#!をshebangと言
はじめに GoogleさんがShellスタイルガイドを共有していたので、いくつか気になった点をピックアップしました。 自分のShellスタイルはかなり我流なので、自省の意味も込めてコメントも併記します。 Googleスタイルガイドの元ネタ (Python/C++/Java/Rとかだけでなくdocumentガイドなど色々あります) https://github.com/google/styleguide Shellスタイルガイド (今回はこちら) http://google.github.io/styleguide/shell.xml 本当は人間がチェックするのではなくcpplintのためXML定義なのかもですが、気にしない気にしない。 (見たところcpplintはc++だけだと思ってます) commitフックでshell系のlint走らせろっていうのが今風なのかもしれませんが、キニシナイキ
シェルスクリプトは、Unix 系環境で仕事をするエンジニアなら誰もが一度は書くであろうにもかかわらず、書き方や特性を熟知している人が少ない言語です。この記事は、シェルスクリプトを書くときに罠を踏まないようにするために最低限あなたが気を付けるべき tips 集です。「たかがシェルスクリプト」とは思わないでください。生半可に書かれたシェルスクリプトはあなたの (チームの) 生産性をかえって低下させます。 Shebang に bash を明示しろ Bash でしか使えない機能のことを俗に Bashism と言います。Bashism はもちろん Bash 以外のシェルでは動きません。これに関するありがちな罠は、以下のように発生します。 Bash が /bin/sh として使われている環境でシェルスクリプトを書く。うっかり Bashism がシェルスクリプトに含まれていても、 /bin/sh は何も
時々、指定されたPATHに「/」が含まれている場合は自動的にディレクトリを作成してファイルを作成、コピーさせたいという事がある。 しかしtouchコマンドやcpでは自動でフォルダを作成することはできないので、通常であればその前にmkdirでディレクトリを作成しておく必要がある。 で、結構面倒だなと思って調べてみたところ、インストール時等にファイルを配置するために使われるinstallコマンドを利用することで、作成するファイルを配置するフォルダが無かったら自動で作成することができると知ったので、備忘で残しておく。 install -D /コピー元PATH /コピー先PATH install -m 644 -D /コピー元PATH /コピー先PATH # -mでModeを指定できる [root@BS-PUB-CENT7-01 ~]# ls -la ./path/to/test ls: ./pa
Bashでスクリプトを書く際によく自分が使っている小技や関数などです。 またBashでは他のプログラミング言語以上に$や:などの記号の使い方が独特でググラビリティが低いので、基本文法などもチートシートとしてまとめておきます。 基本文法 変数と配列 制御構文 while for-in if - elif - else if文のone-liner 文字列比較 文字列が等しい (=) 文字列が等しくない (!=) 空文字、文字列長が0 (-z) 空文字でない、文字列長が0でない (-n) 数値比較 数値が等しい (-eq) 数値が等しくない (-ne) 数値がより小さい (-lt) 数値がより大きい (-gt) ファイルの判定 存在する (-e) ファイルである (-f) ディレクトリである (-d) シンボリックリンクである (-L) 関数 便利なスニペット 実行スクリプトがあるディレクトリを
Shell Script Advent Calendarをご覧の皆様、初めまして。Piroといいます。普段はJavaScriptやRubyでのソフトウェア開発やFirefoxの法人向け技術サポートなどをしつつ、日経Linux誌でシス管系女子という連載マンガを描かせて頂いております。 Linux Advent Calendarの方にGUIアプリのスクショを定期的にSlackに流すシェルスクリプトの話でエントリーしたのですが、Shell Script Advent Calendar的にはそれをこっちを投稿した方が良かったかもと今更思いつつ、今日は別の話題です。 シェルスクリプト製Twitterクライアントには恐怖!小鳥男やtweet.sh(同名の別実装)などいくつか実装例がありますが、自分も2015年末頃からtweet.shという汎用のTwitterクライアントを開発しています。この記事ではt
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く