シェルスクリプトでできることを踏まえた上で、次は実際にシェルスクリプトを書いていくための基本文法について解説していきます。 シバン. 「企業で働いてるけど、副業でキャリアを広げていきたいな……」, 新しい働き方が加速するいまこそ、キャリアの選択肢を広げるフリーランス・複業・副業向けお仕事マッチングサービス『Workship』をのぞいてみませんか?, 登録から案件獲得まで、いっさいお金はかかりません。詳細は以下ページをご覧ください!, 元パティシエのプログラマ。趣味を兼ねた副業でツールやアプリの開発、プログラミング記事の解説等に携わっています。シフォンケーキが得意。生き方系ブログ「ikikata-collection.com」稀に書きます。 シェルスクリプト(Bash)の基本文法. 本題とは別の、右側にある「最新の記事」がちょっと大きく目立つので目障りのような気もします。それに、文字が重なっていて、とても見づらいので改善してほしいと感じました。, make, have, get, letはいままでははっきりと理解できていなかったのですが、今回のコアイメージを見ることで、ある程度理解できるようになりました。, 初めて拝見させていただいたのですが、とても分かりやすいです! Oracle® Database SQL言語リファレンス 11 g リリース2 (11.2) B56299-08: 索引: 次 英語の第5文型とはSVOCで、call O C・name O C・keep O C・think O C・elect O Cなどの動詞の後ろに目的語と目的格補語を置き、目的語=補語の関係が成り立っています。ここでは、英文の形と第5文型の見分け方について例文と練習問題を用いて分かりやすく解説しています。 ?本来の意味とは…/トリックオアトリートで学ぶ英語のニュアンス, 場所を表す at と in の違い(at school / in the school / at the school / in school), 分詞構文とは何者なの?分詞構文の意味や書き換えをイメージでわかりやすく解説しました!, 第41章 SVO to do(want 人 to do, tell 人 to do など). The CMake Discourse Forum is a place to ask for help with CMake. 易混淆動詞 延伸學習: 如何活用文法?用生活情境學文法 [小複習] 在主動用法中,make, have, let三個使役動詞後必須加原型動詞(原V); 特別的是Get 後面加的是不定詞(to +原V)。 [貼心小提醒1.] 各 select_expr は、取得するカラムを示します。 少なくとも 1 つの select_expr が存在する必要があります。. CMake FAQ Page; CMake Wiki Page; Kitware Source. 一つの疑問で、”Let me know” という口語でよく使うと思うのですがなぜそのようになるのですか?, ご質問の “Let me know.” ですが、こちらは「教えてください」という意味でよく使われる表現ですね。命令文なので (You) let me know. 「使役構文のニュアンスの違いは何ですか?」ー日本語では同じ「~させる」という訳になる使役構文ですが、状況によって使うべき動詞は異なります。ここでは「彼にパソコンの確認をさせた」という例文を元に make, have, get, let のニュアンスの違いを解説します。, makeの目的語(こねられるほう)から見ると「強制的に」というニュアンスが出てきます。, haveは何かを直接持っている場合だけでなく、主語が関係している場の上にある(支配下にある)場合も使われます。, 新たな力を加えたりせずそのまま自由にさせたり、何かをしたがっているなら許可してさせてあげたりするのが let です。, 例文:I made him check my computer.((強制的に)彼にパソコンの確認をさせた), makeを使った使役構文は「人に命令して何かをやらせる」ことであり、言われたほうは断ることができません。, 例文に出てくる人間関係としては、たとえば、He(彼)はI(私)の夫であるような場合が考えられます。, 例文:I had him check my computer.((当然やるべきこととして)彼にパソコンの確認をしてもらった), haveを使った使役構文は「確認を行うことが当然と見なされる」ような場合に使われます。, たとえば、職務上当然とされるような業務依頼などで、He(彼)はI(私)の秘書であるような場合が考えられます。, このようにhaveはお金に対する対価として何かをやってもらうときによく使われます。, いずれにせよ、makeほどではありませんが、haveは依頼する側が少しだけ力をもっている感じがあります。, このような力関係を抜きにして中立的に述べたい場合は、”He checked my computer for me.” と表現します。, 例文:I got him to check my computer.((説得などの結果)彼にパソコンの確認をしてもらった), ただし、getには説得などの働きかけをした結果として、確認してもらえるようになったニュアンスが含まれます。getに含まれる「過程」が反映されるわけです。, またgetはhaveに比べて動きを含んでいる分だけ、話し言葉で使われやすいのが特徴です。, 例文:I let him check my computer.((確認したがっている)彼にパソコンの確認をさせてあげた), He(彼)は何らかの理由で私のパソコンの確認をしたがっています。そこへ私が許可を出して(制限を外して)、彼に確認させてあげるイメージになります。, イラストでは「同じモデルのパソコンの購入を検討している彼にletで許可を出す」パターンを題材に挙げましたが、それ以外に「業務上メンテナンスする必要があり、パソコンに触る許可を求めている彼にletで許可を出す」というパターンもあり得ます。, 基本的な英単語のコアイメージをつかむことはとても大切!一日一つ基本英単語のコアイメージを学んでいける『英会話エクスプレス6ヶ月コース』で、無理なく英語のイメージを貯金していきましょう。詳細は amazon / 楽天市場 にてご確認ください。, 1980年生まれ。徳島県出身。東京大学理学部数学科卒。中学高校時代から同級生に「先生よりもわかりやすい」とよく言われていました。2012年から英語と日本語の研究をしています。TOEIC 835点(2014年3月受験)。専門は認知言語学。このサイトと著者についての詳細はこちら。, 外国人が普通に話す使役構文は、日本人には難しく感じます。その理由として、どの単語を使っても「~させる」で訳され、本来のコアなイメージが頭に浮かばないからだと思います。この記事でmakeとletは理解できましたが、haveとgetはぼんやりした感じでした。しかし、例文とその説明は大変参考になりました。, それぞれの使役動詞が持つニュアンスの違いが理解できました。個人的には、「get」には結果に至るまでの過程が含まれている、また、動きを含んでいるため「have」に比べて話し言葉で使われやすいという部分が興味深く、勉強になりました。ほかの文章でも「get」の持つこういった意味合いを意識的に捉えるようにしたいと思いました。, make, have, getの使役表現の違いは分かりやすかったが、letの例文の訳で、((確認したがっている)彼にパソコンの確認をさせてあげた)とあったが、「許可」という部分を入れたほうが、letのニュアンスがより出て分かりやすいのではないかと思った。, 「使役構文におけるmake, have, get, letの違い」は頭が混乱する部分ですよね。とてもわかりやすく説明されていると思いました。コアイメージのイラストは、いいですね。さらに、状況設定があったので、よりわかりやすかったように思います。, 使役動詞4つを同時に比較できたので、それぞれの違いがクリアになりました。特にgetやhaveのコアーメージはよく知らなかったので勉強になりました。なるほど、こういうイメージでネイティブは使い分けているんですね~。, 始めは理解できない難しい内容だと思っていましたが、記事を読むと、イメージすることができたため、理解ができるようになりました。なるほどと納得できる分かり易い記事だと思います。 The Kitware Source is a quarterly newsletter for developers designed to deliver detailed technical articles, information on recent releases and upcoming changes … Over the weekend, Disney released an eight-ingredient recipe to help theme-park fans make its famous churros at home. ョン機能に対するOracleのサポート, 以前の規格に対するOracleの準æ‹, キャラクタ・セットのサポート, 正規表現の演算子の多言語拡張, Oracleの正規表現におけるPerlによる拡張機能. シバン(shebang)とは、シェルスクリプトの1行目に記述する文字列です。 と you が省略されているわけですが、「知りたがっている私に対して、あなたが許可を出して知らせてあげてください」という感じになります。つまり、裁量権をもっているあなたに対して「許可」を求めているニュアンスであり、間接的に「教えてください」とお願いしているわけですね。, 比較:Could you tell me the way to the station?(その駅までの道を教えて頂けますか?), tell me も「教えてください」とお願いする表現ですが、こちらは直接的に「教えて」とお願いしています。そのままだとストレート過ぎるので、Could you のような過去形を使って遠回しにするのが一般的です。, ただ、それでも、(you) tell me と (you) let me know を比較すると、教える行為をリクエストしている tell me のほうがストレートな表現ということになります。, 新たな力を加えたりせずそのまま自由にさせたり、何かをしたがっているなら許可してさせてあげたりする, getには説得などの働きかけをした結果として、確認してもらえるようになったニュアンスが含まれます, He(彼)は何らかの理由で私のパソコンの確認をしたがっています。そこへ私が許可を出して(制限を外して)、彼に確認させてあげるイメージ, あの有名なTrick or Treatの日本語訳は意訳だった! create文はまず、「何」を作成するのかの指定をcreateの後に記述します。 ここでは、テーブルを作成するので、 CREATE TABLE としました。 (twitter: @sig_Left(faable01)), Workship MAGAZINE(ワークシップマガジン)は、日本最大級のフリーランス向けウェブメディアです。エンジニア、デザイナー、マーケターなどデジタル系専門職のフリーランスにとって役立ち、刺激になる情報をお届け。 海外最新情報やフリーランスノウハウ&ツール、著名人インタビューなど、さまざまなコンテンツを発信中です。, シェルスクリプト(Bash)入門。できること、基礎文法、業務自動化の方法を解説【事例あり】, ユーザ名が”sig”でも、”guest”でもないときに【Who are you?】を出力する処理, パイプを経由して、標準出力(hoge.logの文書)がgrepコマンドの標準入力へ渡る。, grep ERRORにより、hoge.logの文書のうち、”ERROR”が登場する行だけが標準出力される。, パイプを経由して、標準出力(”ERROR”が登場するすべての行)がtailコマンドの標準入力へ渡る。, tail -n 1 により、”ERROR”が登場するすべての行のうち、もっとも最後の行だけが標準出力される。, 最後はパイプを利用していないので、標準出力がコマンドラインの画面そのものになり、画面上に結果が表示される。, パイプを経由して、標準出力(hoge.logの内容)が、while条件句のreadコマンドの標準入力へ渡る。, while read lineで、hoge.logの1行目を変数$lineにセットする。, doneに処理が到達したら、再度whileの条件句のread lineで2行目を変数$lineにセットする。, 3行目、4行目、5行目…と処理を繰り返し、最終行の処理を終えた時点でループを終了する。. 「シェル」や「シェルスクリプト」という用語を聞いたことはありますか? 「シェル」とは、CLI上で動作してOSを操作できるソフトウェアのこと。そのシェルを組み合わせて記述する、簡単なプログラムを「シェルスクリプト」と言います。, この記事では、「シェル」についての前提知識をご紹介した上で、入門者向けにシェルスクリプト(Bash)のできることや基礎文法、実際のコードについて解説していきます。, シェルとは、CLI(Command Line Interface)という黒い画面上で動作するソフトウェアのひとつです。「コマンド」と呼ばれる命令文を利用してOSを操作できます。, シェルにはさまざまな種類があり、もっとも標準的なのは「Bash(Bourne-Again Shell)」です。Bash以外に代表的なシェルは、以下のようなものが挙げられます。, この他にもさまざまな種類のシェルが存在しますが、大まかな文法はどのシェルも共通です。そのため、ひとつのシェルについて学習すれば、違うシェルの扱いも容易になります。, 今回は、シェルの中でもっとも代表的な「Bash」のシェルスクリプトについて解説していきます。, シェルスクリプトとは、if文/while文/パイプなどの制御構文と、コマンドを組み合わせて動作する簡単なプログラムのことです。, 一般的に拡張子「.sh」のファイルとして保存され、一度つくれば何度でも再実行できます。, ファイル移動やコピペ、ログの記録/抽出など、PCでできる基本的な操作はシェルスクリプトで肩代わりできます。, とくにUNIX系のOSであれば、Baahのシェルスクリプトが標準で入っていることがほとんどなので、LinuxやmacOS上の操作をするときに便利です。, シェルスクリプトの「パイプ」という機能をつかえば、複数の異なるコマンドを連携させることが可能です。, たとえば「grep」というコマンドは、文書内から特定の文字列が含まれる箇所をすべて抽出してくれます。このgrepコマンドが抽出した結果のうち、ラスト3つ分の結果のみを抽出したいというときはどうすればよいでしょうか。, 答えは「tailコマンドと組み合せる」です。tailコマンドは、入力された文書について、指定した行数分を末尾から読み取ってくれます。そのため、パイプを使ってgrepコマンドとtailコマンドを組み合せると、「文書中から特定の文字列が発見されたラスト3か所を取得する」という処理を実現できます。, このようにシェルスクリプトのパイプを利用すれば、ひとつのコマンドでは実現できない複雑なタスクをこなせるようになるのです。, シェルスクリプトで組み合せられるのは、コマンドだけではありません。JavaやRuby、Goなどの言語で実装されたツールやソフトを組み合せて、さらなる業務自動化を図ることもできます。, 組み合せることのできるツール/ソフトに制限はありません。Gitのような開発に欠かせないCLIツールから、Google ChromeのようなGUIアプリまで、さまざまなツールやソフトをシェルスクリプト内で連携させられます。もちろん、自作ツールとの連携も可能です。, このように、シェルスクリプトによってさまざまなツールを組み合せれば、さらなる業務自動化/効率化を実現できます。, シェルスクリプトでできることを踏まえた上で、次は実際にシェルスクリプトを書いていくための基本文法について解説していきます。, シバン(shebang)とは、シェルスクリプトの1行目に記述する文字列です。シバンによって実行するシェルの種類を指定できます。, 前述のしたとおり、シェルにはBashやCsh、Zshなどさまざまな種類があります。そのため、シバンを用いて「このシェルスクリプトをどのシェルで動かすのか」を明示的に指定しないと、思わぬ挙動をしてしまう可能性があるのです。, なおBashに指定せず、デフォルトに設定されているシェルを利用する場合は、以下のようにシバンを書きます。, シバンを書いてしまえば、それ以降はシェルスクリプトの処理そのものの記述を自由に書けます。, ここでは文字列を出力する「echo」コマンドを使って、【Hello world.】をコマンドラインに表示するBashのシェルスクリプトを作成してみましょう。, 保存をしたら、hello.shに「実行権限」を付与します。実行権限がないと、ファイル名だけでシェルスクリプトの実行を行えません。, 実行権限の付与には、chmodコマンドを使います。コマンドラインから以下を入力して、hello.shを実行可能ファイルにしましょう。, 実行権限の付与が完了したら、hello.shをファイル単独で実行できるようになります。実際に、以下をコマンドラインで入力してEnterを押してみましょう。, 【Hello world.】がコマンドライン上に表示されましたね。このようにシェルスクリプトは「1行目にシバンでシェルの種類を指定」「2行目以降に処理の本文を記述」という構成で書いていきます。, なおシェルスクリプト実行時に、最初の「./」がないとエラーが出るので注意してください。(「hello.sh」が実行可能ファイルではなく、コマンドと認識されてしまうため), 一般的なプログラミング言語と同じで、シェルスクリプトにも変数があります。Bashのシェルスクリプトで変数を使用したい場合は、以下のように書いてください。(以降の解説では1行目のシバンを省略します), また変数展開を使えば、文字列中に変数の中身を出力できます。たとえば、変数$str(中身は’hello’という文字列)を使って【hello world.】という文字列を表示したい場合は、以下のように書きましょう。, 変数展開を許可する文字列の範囲をダブルクォーテーションで囲むことで、「記述した変数」が「変数にセットされた値」に置き換えられるのです。, なお、このときダブルクォーテーションではなくシングルクォーテーションだと、変数展開は許可されず【$str world.】と表示されます。, 文字列中に変数を展開するだけではなく、コマンドの実行結果を文字列中で展開したいときもありますよね。そのようなときに役立つのがコマンド置換です。, このdateコマンドを利用して【今日の日付は2020-06-27です】と表示させたい場合は、コマンド置換を利用して以下のように書きましょう。, このように「 ドルマーク + 括弧( $() ) 」もしくは「バッククォーテーション( “ )」で囲まれた範囲は、コマンドとして解釈/実行された結果の文字列に置き換えられます。, 「もし~なら、~する」という、特定の条件に当てはまったときのみ処理を実行する文のことをif文と呼びます。, たとえば、「組み込み変数$USERが”sig”のときだけ、【Hi.】と出力する処理」を実装したいときは、以下のように書きましょう。, このように以下の4パーツで、「もし~なら、~する」という処理の実装が可能です。各パーツの意味合いや書き方も、下にまとめています。, 上記シェルスクリプトの場合、ユーザ名が”sig”なら【Hi.】と表示されますが、ユーザ名が”sig”以外なら、なにも表示されないようになっています。, 結論から述べると「elif句」と「else句」を利用することで実現できます。以下のように記述をしてみてください。, なお、上記のシェルスクリプトでは「イコール記号( = )」で文字列の比較を行っていましたが、比較する値が数値の場合は使うべき演算子が変わるので注意してください。, 数値の場合の演算子にはいくつか記法があります。そのなかでも、最も移植性が高い記法は以下のとおりです。, パイプを使えば「コマンドの実行結果」を「異なるコマンドの入力」として渡し、複雑なタスクを処理できるようになります。, これらをパイプで以下のように組み合せると、「hoge.logの中で”ERROR”が登場した最後の行」を取得できます。, なぜこのシェルスクリプトが「hoge.logの中で”ERROR”が登場した最後の行」を取得する処理になるのでしょうか。それを理解するためには、「標準入力」と「標準出力」の理解が欠かせません。, 標準入力/標準出力は、プログラミング言語全般において「暗黙的な入出力」を示します。シェルスクリプト中で利用するコマンドにおいては、以下の役割を果たします。, このように標準入出力は、キーボードやコマンドラインの画面といった一般的な入出力のみならず、パイプを利用した情報の受け渡しにも対応しています。, これを踏まえた上で、「cat hoge.log | grep ERROR | tail -n 1」の処理の流れを追いかけてみましょう。, このようにパイプを利用することで、あるコマンドの実行結果を、次に実行するコマンドの入力情報として渡せます。, while文を使えば、指定した条件を満たす間は処理をループすることが可能です。たとえば、カウントアップしながら「現在のカウントはnです」と表示するループ処理は、次のように書きます。, これを実行すると、while [ 条件句 ] で指定したとおり、変数$iが10未満の間は「現在のカウントはnです」とカウントアップをできます。, このときwhile [ 条件句 ] で利用している角括弧は、if文と同じくtestコマンドの省略記法です。そのため、-lt や -gt など比較の種類に応じてさまざまなオプションを利用できます。, またwhileの右隣には、testコマンド以外のコマンドを記述することも可能です。とくに「while + readコマンド」の組み合わせはよく使われるので、次でご紹介します。, 以下のようにwhileとreadコマンドをパイプで組み合せると、文書を読み取り、1行ごとに処理を実行できます。, このシェルスクリプトを実行すると、hoge.logの最終行まで1行ずつ「内容:xxxxxxx(その行の内容)」と文字列が出力されていきます。このときの処理の流れは以下のとおりです。, このようにwhile文とreadコマンドを組み合せれば、標準入力に渡された文書を1行ずつ処理できるようになります。, なおreadの前に実行するコマンドは、catコマンド以外でも「結果を標準出力するコマンド」なら大丈夫です。, たとえば、連番の数字を出力するseqコマンドを、以下のように「while文 + readコマンド」に渡すこともできます。, このように「標準入出力」「while文」「readコマンド」を組み合せることで、さまざまなコマンドの実行結果を1行ずつ処理できるようになります。ぜひ覚えておいてくださいね。, ここまでに紹介してきた基本文法を踏まえて、タスク自動化/効率化を実際にBashのシェルスクリプトで実装してみましょう。, 業務自動化と聞くと難しそうに思えるかもしれませんが、安心してください。タスク自動化のコツは、簡単な定型作業から少しずつ自動化/効率化を施していくことです。はじめから難しいことに取り組む必要はありません。, ここでは業務中によくある作業の例として、以下の3つのタスクをシェルスクリプトで自動化してみます。, 業務をしているとき、「No.01」「No.02」「No.03」……のように、連続する番号のディレクトリを作成したい場面があると思います。手作業でも出来るものの、数が多くなるとかなりの時間を取られてしまいますよね。, 「seqコマンド」「while文 + readコマンド」「mkdirコマンド」の3つを使って、No.01~No.20の連番ディレクトリを作成するシェルをつくってみましょう。, とすることで、No.01~No.20のディレクトリを作成できます。(mkdirはディレクトリ作成のコマンドです), またseqの「wオプション」を利用すれば、自力でif文を利用した0埋めをせずとも、自動的に上位桁の0埋めをしてくれます。そのため上記シェルスクリプトを、以下のように短縮することが可能です。, シェルスクリプトは、コマンドのオプションを利用することで短縮できる場合があります。コマンド利用時には、有用なオプションがあるかどうかを知っていると、より短時間で処理を実装できる場合も。便利なオプションがないかを、ときどき確認しておくとよいでしょう。, ファイルの一括バックアップも、Bashのシェルスクリプトを使えば簡単に自動化できます。たとえば、以下の要件を満たすシェルスクリプトを実装してみましょう。, これをシェルスクリプトとして保存して実行すると、.logファイルを”bk年月日_時分秒”形式のディレクトリに、一括でバックアップできます。, なんらかのシステムのログを、リアルタイムで監視したいとき役に立つのが「tailコマンド」です。tailコマンドは「fオプション」を利用することで、監視中のファイルに書き込まれていく内容をリアルタイムで取得できます。, またBashのシェルスクリプトを使えば、特定の文字列が出現したときのみ、コマンドラインに新規行を表示することも可能です。, たとえば、「特定のファイルを監視して、”ERROR”が登場したらその行をリアルタイムで表示するシェルスクリプト」を実装するなら次のように書きます。, このように「tail -f」と「grep –line-buffered」を組み合せることで、リアルタイムのログ監視/抽出ができます。, 今回はシェルスクリプトでできることと、その中でもっとも代表的な「Bash」のシェルスクリプトの基礎文法について紹介しました。, 簡単なタスクでも、ひとつずつ自動化していくことで、1日の業務に余裕を持たせることができます。シェルスクリプトを使って、まず単純な作業から着実に自動化/効率化していきましょう。, PowerShell入門。できることや基礎文法、業務自動化の方法を解説【事例あり】, 「フリーランスとして働いているけど、もっと大きな仕事にかかわりたいな……」