BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

皆さんこんにちは!この記事では、コマンドライン(CLI、コンソール、ターミナル、シェルとも呼ばれます)を詳しく見ていきます。

コマンドラインは、開発者として、そして一般的にコンピューターユーザーとして私たちが持っている最も便利で効率的なツールの1つです。しかし、それを使用することは、始めたときに少し圧倒的で複雑に感じるかもしれません。

この記事では、コマンドラインインターフェイスを構成する部分とその仕組みの基本を簡単に説明するように最善を尽くします。これにより、日常のタスクで使用できるようになります。

さあ行こう! =D

目次
  • コンソール、ターミナル、コマンドライン(CLI)、シェルの違い
    • コンソール
    • ターミナル
    • シェル
    • コマンドライン(CLI)
  • 端末の使用についても気にする必要があるのはなぜですか?
  • さまざまな種類のシェル
    • ちょっとした歴史-Posix
    • 実行しているシェルを確認するにはどうすればよいですか?
    • どのシェルが優れていますか?
      • カスタマイズに関するコメント
  • 使用する最も一般的で便利なコマンド
    • Gitコマンド
  • 最初のスクリプト
  • 切り上げ

コンソール、コマンドライン(CLI)、ターミナル、シェルの違い

始めるのに良い場所は、コマンドラインが何であるかを正確に知ることだと思います。

これを参照するとき、ターミナル、コンソール、コマンドライン、CLI、およびシェルという用語を聞いたことがあるかもしれません。人々はしばしばこれらの言葉を同じ意味で使用しますが、真実はそれらが実際には異なるものであるということです。

それぞれを区別することは、必ずしも重要な知識である必要はありませんが、物事を明確にするのに役立ちます。それでは、それぞれについて簡単に説明しましょう。

コンソール:

コンソールは物理デバイスです これにより、コンピューターと対話できます。

平易な英語では、それはあなたのコンピュータ画面、キーボード、そしてマウスです。ユーザーとして、あなたはを介してコンピュータと対話します コンソール。

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

ターミナル:

端末は、テキストの入力および出力環境です。 プログラムです ラッパーとして機能します コンピュータが処理するコマンドを入力できるようにします。

平易な英語でも、これはコンピュータが処理する実際のコマンドを入力する「ウィンドウ」です。

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

ターミナルは他のターミナルと同じようにプログラムであることに注意してください。また、他のプログラムと同様に、好きなようにインストールおよびアンインストールできます。コンピュータに多くの端末をインストールして、いつでも好きなときに実行することもできます。

すべてのオペレーティングシステムにはデフォルトの端末がインストールされていますが、選択できるオプションはたくさんあり、それぞれに独自の機能があります。

シェル:

シェルはプログラムです コマンドラインインタプリタとして機能します。 コマンドを処理します 結果を出力します 。ユーザーが入力したコマンドを解釈して処理します。

ターミナルと同じように、シェルはすべてのオペレーティングシステムにデフォルトで付属しているプログラムですが、ユーザーがインストールおよびアンインストールすることもできます。

シェルが異なれば、構文と特性も異なります。また、コンピュータに多数のシェルをインストールして、必要なときにそれぞれを実行することもできます。

ほとんどのLinuxおよびMacオペレーティングシステムでは、デフォルトのシェルはBashです。 Windowsでは、Powershellです。シェルの他の一般的な例は、ZshとFishです。

シェルはプログラミング言語としても機能します 、それらを使用してスクリプトを作成できるという意味で コンピュータに特定のタスクを実行させるため。スクリプトは、ファイルに保存して後でいつでも実行できる一連の命令(コマンド)にすぎません。

この記事の後半でスクリプトを見ていきます。今のところ、シェルはコンピュータがコマンドを「理解」して実行するために使用するプログラムであり、タスクのプログラムにも使用できることを覚えておいてください。

また、ターミナルはシェルが実行されるプログラムであることに注意してください。しかし、両方のプログラムは独立しています。つまり、任意の端末で任意のシェルを実行できます。その意味で、両方のプログラムに依存関係はありません。

コマンドラインまたはCLI(コマンドラインインターフェイス):

CLIは、コンピューターが処理するコマンドを入力するためのインターフェイスです。もう一度平易な英語で、それはあなたがコンピュータが処理するコマンドを入力するスペースです。

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

これは実質的に端末と同じであり、私の意見では、これらの用語は同じ意味で使用できます。

ここで言及する興味深い点の1つは、ほとんどのオペレーティングシステムには2つの異なるタイプのインターフェイスがあることです。

  • CLI 、コンピュータがタスクを実行するための入力としてコマンドを受け取ります。
  • もう1つはGUI (グラフィカルユーザーインターフェイス)。ユーザーは画面上のものを確認してクリックすると、コンピューターは対応するタスクを実行してこれらのイベントに応答します。

なぜターミナルの使用を気にする必要があるのですか?

ほとんどのオペレーティングシステムにはGUIが付属していると述べました。したがって、画面上で物事を確認し、クリックしてやりたいことを実行できる場合、なぜこの複雑なターミナル/ cli/シェルのことを学ぶ必要があるのか​​疑問に思うかもしれません。

最初の理由は、多くのタスクで、より効率的であるということです。 。すぐにいくつかの例を見ていきますが、GUIがさまざまなウィンドウの周りで何度もクリックする必要がある多くのタスクがあります。ただし、CLIでは、これらのタスクを1つのコマンドで実行できます。

この意味で、コマンドラインに慣れていると、時間を節約し、タスクをより迅速に実行できるようになります。

2つ目の理由は、コマンドを使用することで、簡単にタスクを自動化できることです。 。前述のように、シェルを使用してスクリプトを作成し、後で必要なときにいつでもそれらのスクリプトを実行できます。これは、何度も繰り返したくない反復的なタスクを処理するときに非常に役立ちます。

例を挙げると、新しいオンラインリポジトリを作成したり、クラウドプロバイダーに特定のインフラストラクチャを作成したり、画面の壁紙を1時間ごとに変更するなどの簡単なタスクを実行したりするスクリプトを作成できます。

>

スクリプトは、反復的なタスクで時間を節約するための優れた方法です。

3番目の理由は、CLIが唯一の方法になる場合があることです。 ここで、コンピューターと対話できるようになります。たとえば、クラウドプラットフォームサーバーと対話する必要がある場合を考えてみましょう。これらのほとんどの場合、GUIは使用できず、コマンドを実行するためのCLIのみが使用できます。

したがって、CLIに慣れていると、あらゆる場面でコンピューターを操作できるようになります。

最後の理由は、見た目がかっこよくて楽しいからです。映画のハッカーが自分のコンピューターの周りをクリックしているのを見ませんよね?;)

さまざまな種類のシェル

ターミナルで実行できる実際のコマンドに飛び込む前に、さまざまな種類のシェルを認識し、現在実行しているシェルを特定する方法を理解することが重要だと思います。

シェルが異なれば、構文や機能も異なるため、入力するコマンドを正確に知るには、まず、実行しているシェルを知る必要があります。

ちょっとした歴史– Posix

シェルの場合、 Posixと呼ばれる一般的な標準があります 。

Posixは、ECMAScriptがJavaScriptで機能するのと非常によく似た方法でシェルで機能します。これは、すべてのシェルが準拠する必要がある特定の特性と機能を規定する標準です。

この規格は1980年代に確立され、現在のほとんどのシェルはその規格に従って開発されました。そのため、ほとんどのシェルは同様の構文と同様の機能を共有しています。

実行しているシェルを知るにはどうすればよいですか?

現在実行しているシェルを知るには、ターミナルを開いてecho $0と入力するだけです。 。これにより、現在実行中のプログラム名(この場合は実際のシェル)が出力されます。

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

どのシェルが優れていますか?

ほとんどのシェルの間に多くの違いはありません。それらのほとんどは同じ標準に準拠しているため、ほとんどが同じように機能することがわかります。

ただし、知りたいと思うかもしれないいくつかのわずかな違いがあります:

  • 前述のように、バッシュ は最も広く使用されており、MacとLinuxにデフォルトでインストールされます。
  • Zsh Bashと非常によく似ていますが、Bashの後に作成され、いくつかの優れた改良が加えられています。その違いについて詳しく知りたい場合は、こちらのクールな記事をご覧ください。
  • は、オートコンプリートや構文の強調表示など、いくつかの優れた組み込み機能と構成を備えた、もう1つの一般的に使用されるシェルです。 Fishについてのことは、BashとZshがそうであるのに対し、それはPosixの苦情ではないということです。これは、BashとZshで実行できるコマンドの一部が、Fishとその逆では実行されないことを意味します。これにより、Fishスクリプトは、BashやZshと比較してほとんどのコンピューターとの互換性が低くなります。
  • Ashのような他のシェルもあります またはダッシュ (名前を付けると、すべてがさらに混乱します。私は知っています...)Posixシェルの簡略版です。つまり、Posixで必要な機能のみを提供し、他には何も提供しません。 BashとZshが機能を追加している間 Posixが必要とするものよりも。

シェルがより多くの機能を追加するという事実により、シェルはより簡単で使いやすくなりますが、スクリプトやコマンドの実行は遅くなります。

したがって、一般的な方法は、一般的な対話にはBashやZshなどのこの「拡張」シェルを使用し、スクリプトを実行するにはAshやDashなどの「ストリップ」シェルを使用することです。

後でスクリプトを作成するときに、特定のスクリプトを実行するシェルを定義する方法を説明します。

これらのシェル間のより詳細な比較に興味がある場合は、これを非常によく説明するビデオがあります:

シェルを推奨する必要がある場合は、bashが最も標準的で一般的に使用されているものであるため、bashをお勧めします。これは、知識をほとんどの環境に翻訳できることを意味します。

しかし、繰り返しになりますが、真実は、ほとんどのシェルの間に多くの違いはないということです。したがって、いずれの場合でも、いくつか試して、どれが一番好きかを確認できます。;)

カスタマイズに関するコメント

Fishには、オートコンプリートや構文の強調表示などの組み込み構成が付属していることを説明しました。これはFishに組み込まれていますが、BashまたはZshではこれらの機能を構成することもできます。

重要なのは、シェルはカスタマイズ可能であるということです。プログラムの動作、使用可能なコマンド、プロンプトに表示される情報などを編集できます。

ここではカスタマイズオプションの詳細については説明しませんが、コンピューターにシェルをインストールすると、システム上に特定のファイルが作成されることを知っています。後で、これらのファイルを編集してプログラムをカスタマイズできます。

また、シェルをより簡単にカスタマイズできるプラグインがオンラインで利用できます。それらをインストールするだけで、プラグインが提供する機能を利用できます。いくつかの例はOhMyZshとStarshipです。

これらのカスタマイズオプションは、ターミナルにも当てはまります。

したがって、選択できるシェルとターミナルのオプションがたくさんあるだけでなく、シェルとターミナルごとに多くの構成オプションもあります。

あなたが始めているなら、このすべての情報は少し圧倒されるかもしれません。ただし、利用できるオプションは多数あり、各オプションもカスタマイズできることを知っておいてください。それだけです。

使用する最も一般的で便利なコマンド

CLIの動作の基礎ができたので、日常のタスクに使用できる最も便利なコマンドについて詳しく見ていきましょう。

これらの例は、私の現在の構成(Linux OSではBash)に基づいていることに注意してください。ただし、ほとんどのコマンドは、とにかくほとんどの構成に適用する必要があります。

  • エコー 渡したパラメータが何であれ、ターミナルに出力します。
echo Hello freeCodeCamp! // Output: Hello freeCodeCamp!
  • pwd 印刷作業ディレクトリの略で、現在コンピュータにある「場所」またはディレクトリを印刷します。
pwd // Output: /home/German
  • ls 現在のディレクトリの内容が表示されます。現在のディレクトリに含まれるファイルと他のディレクトリの両方が表示されます。

たとえば、ここで私は最近取り組んでいるReactプロジェクトディレクトリにいます:

ls // Output:
node_modules  package.json  package-lock.json  public  README.md  src

このコマンドを渡すと、フラグまたはパラメーター-a また、隠しファイルまたは隠しディレクトリも表示されます。 .gitのように または.gitignore ファイル

ls -a // Output:
.   .env  .gitignore    package.json       public     src
..  .git  node_modules  package-lock.json  README.md
  • cd はディレクトリの変更の略で、現在のディレクトリから別のディレクトリに移動します。

ホームディレクトリにいる間、cd Desktopと入力できます デスクトップディレクトリに移動します。

1つのディレクトリに移動する場合、つまり現在のディレクトリを含むディレクトリに移動する場合は、cd ..と入力できます。

cdと入力した場合 単独で、ホームディレクトリに直接移動します。

  • mkdir make directoryの略で、新しいディレクトリを作成します。コマンドにディレクトリ名パラメータを渡す必要があります。

「Test」という名前の新しいディレクトリを作成する場合は、mkdir testと入力します。 。

  • rmdir Remove directoryの略で、まさにそれを行います。 mkdirと同じようにディレクトリ名パラメータが必要です :rmdir test

  • タッチ 現在のディレクトリに空のファイルを作成できます。パラメータとして、touch test.txtのようなファイル名を取ります 。

  • rm rmdirと同じように、ファイルを削除できます ディレクトリを削除できます。
    rm test.txt

  • cp ファイルまたはディレクトリをコピーできます。このコマンドは2つのパラメータを取ります。1つ目はコピーするファイルまたはディレクトリで、2つ目はコピーの宛先(ファイル/ディレクトリのコピー先)です。

同じディレクトリにtxtファイルのコピーを作成する場合は、次のように入力できます。

cp test.txt testCopy.txt

ディレクトリが変更されていないことを確認してください。「宛先」については、ファイルの新しい名前を入力します。

ファイルを別のディレクトリにコピーしたいが、同じファイル名を保持したい場合は、次のように入力できます。

cp test.txt ./testFolder/

また、フィールド名を変更して別のフォルダにコピーしたい場合は、もちろん次のように入力できます。

cp test.txt ./testFolder/testCopy.txt
  • mv はmoveの略で、ファイルまたはディレクトリをある場所から別の場所に移動できます。つまり、新しいディレクトリに作成し、前のディレクトリで削除します(切り取って貼り付ける場合と同じです)。

この場合も、このコマンドは、移動するファイルまたはディレクトリと宛先の2つのパラメータを使用します。

mv test.txt ./testFolder/

必要に応じて、同じコマンドでファイルの名前を変更することもできます。

mv test.txt ./testFolder/testCopy.txt
  • ターミナルから直接ファイルまたはパイプされたデータの先頭を表示できます。
head test.txt // Output:
this is the beginning of my test file
  • テール 同じように機能しますが、ファイルの終わりが表示されます。
tail test.txt // Output:

this is the end of my test file
  • -ヘルプ フラグはほとんどのコマンドで使用でき、指定されたコマンドの使用方法に関する情報を返します。
cd --help // output:
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.

現在のディレクトリをDIRに変更します。デフォルトのDIRは、HOMEシェル変数の値です。

変数CDPATHは、DIRを含むディレクトリの検索パスを定義します。 CDPATHの代替ディレクトリ名は、コロンで区切られています:

DIRが...で始まる場合、nullディレクトリ名は現在のディレクトリと同じです。 。

  • 同様に、 コマンドは、特定のコマンドに関する情報を返します。
    man cp // output:

    CP(1)                            User Commands                           CP(1)

    NAME
           cp - copy files and directories

    SYNOPSIS
           cp [OPTION]... [-T] SOURCE DEST
           cp [OPTION]... SOURCE... DIRECTORY
           cp [OPTION]... -t DIRECTORY SOURCE...

    DESCRIPTION
           Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.

           Mandatory  arguments  to  long  options are mandatory for short options
           too.

           -a, --archive
                  same as -dR --preserve=all

           --attributes-only
                  don't copy the file data, just the attributes
    ...

man bashと入力することもできます これにより、このシェルについて知っておくべきことすべてについての膨大なマニュアルが返されます。;)

  • コード デフォルトのコードエディタが開きます。コマンドを単独で入力すると、開いた最新のファイル/ディレクトリでエディタが開きます。

特定のファイルをパラメータとして渡すことで開くこともできます:code test.txt

または、新しいファイル名を渡して新しいファイルを開きます:code thisIsAJsFile.js

  • 編集 デフォルトのコマンドラインテキストエディタでテキストファイルを開きます(MacまたはLinuxを使用している場合は、NanoまたはVimのいずれかである可能性があります)。

ファイルを開いてもエディタを終了できない場合は、まずこのミームを見てください:

![vimExit](https://www.freecodecamp.org/news/content/images/2022/03/vimExit.png)

次に、:q!と入力します Enterキーを押します。

ほとんどのアクション(エディターの終了など)はキーボードショートカットを使用して行われるため、最初は誰もがCLIテキストエディターで苦労するため、ミームはおもしろいです。これらのエディターの使用はまったく別のトピックです。詳細に興味がある場合は、チュートリアルを探してください。;)

  • ctrl + c ターミナルが実行している現在のプロセスを終了できます。たとえば、npx create-react-appを使用してreactアプリを作成している場合 ある時点でビルドをキャンセルしたい場合は、 ctrl + cを押してください。 停止します。

  • ターミナルからのテキストのコピーは、 ctrl + shift + cで実行できます。 貼り付けはctrl+ shift + vで実行できます

  • クリア 以前のすべてのコンテンツから端末をクリアします。

  • 終了 ターミナルを閉じます(これはコマンドではありませんが、クールです) ctrl + alt + t 新しいターミナルが開きます。

  • 上下キーを押す 入力した前のコマンドをナビゲートできます。

  • タブを押す これまでに書いたテキストに基づいてオートコンプリートが取得されます。 タブを2回押す これまでに書いたテキストに基づいて提案が表示されます。

たとえば、edit testと書いた場合 および2回タブtestFolder/ test.txtを取得します 。 edit test.を書くと タブを押します 私のテキストはedit test.txtにオートコンプリートされます

Gitコマンド

ファイルシステムを回避したり、インストール/アンインストールしたりする以外に、Gitやオンラインリポジトリを操作することは、おそらく、開発者としてターミナルを使用する最も一般的なことです。

クリックするよりもターミナルから実行する方がはるかに効率的です。そこで最も便利なgitコマンドを見てみましょう。

  • git init 新しいローカルリポジトリが作成されます。
git init // output:
Initialized empty Git repository in /home/German/Desktop/testFolder/.git/
  • git add 1つ以上のファイルをステージングに追加します。 git add .と入力して、ステージングに追加する特定のファイルの詳細を指定するか、変更されたすべてのファイルを追加することができます。

  • git commit 変更をリポジトリにコミットします。コミットには常に-mを付ける必要があります フラグを立ててメッセージをコミットします。

git commit -m 'This is a test commit' // output:
[master (root-commit) 6101dfe] This is a test commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.js
  • gitステータス 現在どのブランチを使用しているか、コミットする変更があるかどうかを示します。
git status  // output:
On branch master
nothing to commit, working tree clean
  • gitクローン 現在のディレクトリにリポジトリのクローンを作成(コピー)できます。リモートリポジトリ(GitHub、GitLabなど)とローカルリポジトリ(コンピュータに保存されているリポジトリ)の両方のクローンを作成できることに注意してください。
git clone https://github.com/coccagerman/MazeGenerator.git // output:
Cloning into 'MazeGenerator'...
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 15 (delta 1), reused 11 (delta 0), pack-reused 0
Unpacking objects: 100% (15/15), done.
  • git remote add origin プロジェクトに使用するリモートリポジトリのURLの詳細を示すために使用されます。ある時点で変更したい場合は、コマンドgit remote set-url originを使用して変更できます。 。
git remote add origin https://github.com/coccagerman/testRepo.git

URLを取得するには、最初にリモートリポジトリを作成する必要があることに注意してください。後で、小さなスクリプトを使用してコマンドラインからこれを行う方法を説明します。;)

  • git remote -v 使用している現在のリモートリポジトリを一覧表示できます。
git remote -v // output:
origin	https://github.com/coccagerman/testRepo.git (fetch)
origin	https://github.com/coccagerman/testRepo.git (push)
  • git push コミットした変更をリモートリポジトリにアップロードします。
git push // output:
Counting objects: 2, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 266 bytes | 266.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0)
  • gitブランチ リポジトリで使用可能なすべてのブランチを一覧表示し、現在使用しているブランチを示します。新しいブランチを作成する場合は、git branch <branch name>のようにパラメーターとして新しいブランチ名を追加するだけです。 。
git branch // output:
* main
  • gitチェックアウト あるブランチから別のブランチに移動します。目的のブランチをパラメータとして使用します。
git checkout newBranch // output:
Switched to branch 'newBranch'
  • git pull リモートリポジトリからコードをプル(ダウンロード)し、ローカルリポジトリと結合します。これは、多くの開発者が同じコードベースで作業しているチームで作業する場合に特に便利です。この場合、各開発者は、他のすべての開発者によって行われた変更を含むコードベースで作業するために、リモートリポジトリから定期的にプルします。

リモートリポジトリに新しいコードがある場合、コマンドはプルで変更された実際のファイルを返します。そうでない場合は、Already up to dateを取得します 。

git pull // output:
Already up to date.
  • git diff 現在のブランチと別のブランチの違いを確認できます。
git diff newBranch // output:
diff --git a/newFileInNewBranch.js b/newFileInNewBranch.js
deleted file mode 100644
index e69de29..0000000

補足として、ブランチまたはリポジトリ間の違いを比較する場合、通常はMeldのようなビジュアルツールが使用されます。ターミナルで直接視覚化できないわけではありませんが、このツールはより明確な視覚化に最適です。

  • gitマージ 現在使用しているブランチを別のブランチとマージ(結合)します。変更は現在のブランチにのみ組み込まれ、他のブランチには組み込まれないことに注意してください。
git merge newBranch // output:
Updating f15cf51..3a3d62f
Fast-forward
 newFileInNewBranch.js | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 newFileInNewBranch.js
  • gitログ リポジトリで行った以前のすべてのコミットを一覧表示します。
git log // output:
commit 3a3d62fe7cea7c09403c048e971a5172459d0948 (HEAD -> main, tag: TestTag, origin/main, newBranch)
Author: German Cocca <german.cocca@avature.net>
Date:   Fri Apr 1 18:48:20 2022 -0300

    Added new file

commit f15cf515dd3ec398210108dce092debf26ff9e12
Author: German Cocca <german.cocca@avature.net>
    ...
  • -ヘルプ flagは、bashで機能するのとまったく同じ方法で、特定のコマンドに関する情報を表示します。
git diff --help // output:
GIT-DIFF(1)                       Git Manual                       GIT-DIFF(1)

NAME
       git-diff - Show changes between commits, commit and working tree, etc

SYNOPSIS
       git diff [options] [<commit>] [--] [<path>...]
       git diff [options] --cached [<commit>] [--] [<path>...]
       ...
最初のスクリプト

これで、コマンドラインの本当に楽しくて素晴らしい部分であるスクリプトを作成する準備が整いました。

前述したように、スクリプトは、いつでも実行できる一連のコマンドまたは命令にすぎません。コーディング方法を説明するために、1つのコマンドを実行してgithubリポジトリを作成できる簡単な例を使用します。;)

  • 最初に行うことは、.shを作成することです ファイル。どこにでも置けます。私は自分のnewGhRepo.shに電話しました 。

  • 次に、選択したテキスト/コードエディタで開きます。

  • 最初の行に、次のように記述します。#! /bin/sh

これはシバンと呼ばれます 、およびその機能は、このスクリプトを実行するシェルを宣言することです。

以前、一般的な対話に特定のシェルを使用し、スクリプトを実行するために別の特定のシェルを使用できると述べたのを覚えていますか?ええと、シバンはどのシェルがスクリプトを実行するかを指示する命令です。

すでに述べたように、スクリプトはより効率的であるため、「削除された」シェル(shシェルとも呼ばれます)を使用してスクリプトを実行しています(正直言って違いは気付かないかもしれませんが、これは個人的な好みです)。私のコンピューターでは、shシェルとしてダッシュがあります。

このスクリプトをbashで実行したい場合、シバンは#! /bin/bash

  • 次の行はrepoName=$1になります

ここでは、変数を宣言しています。 repoNameと呼ばれ、スクリプトが受け取る最初のパラメーターの値に割り当てます。

パラメータ スクリプト/コマンドの後に入力される文字のセットです。 cdと同じように コマンドの場合、ディレクトリを変更するには、ディレクトリパラメータを指定する必要があります(例:cd testFolder

スクリプト内のパラメーターを識別する方法は、ドル記号とそのパラメーターが予期される順序を使用することです。

複数のパラメーターを期待している場合は、次のように記述できます。

paramOne=$1
paramTwo=$2
paramThree=$3
...
  • したがって、スクリプトのパラメーターとしてリポジトリ名を期待しています。しかし、ユーザーが入力し忘れた場合はどうなりますか?そのための計画を立てる必要があるので、次に条件付きをコーディングします。 そのパラメータが受信されるまで、リポジトリ名の入力をユーザーに求め続けます。

私たちはこのようにそれを行うことができます:

while [ -z "$repoName" ]
do
   echo 'Provide a repository name'
   read -r -p $'Repository name:' repoName
done

ここで行っているのは:

  1. repoName変数が割り当てられていない場合(while [ -z "$repoName" ]
  2. このメッセージをコンソールに書き込みます(echo 'Provide a repository name'
  3. 次に、ユーザーが入力したものをすべて読み取り、その入力をrepoName変数に割り当てます(read -r -p $'Repository name:' repoName
  • リポジトリ名が設定されたので、次のようにローカルGitリポジトリを作成できます。
echo "# $repoName" >> README.md
git init
git add .
git commit -m "First commit"

これは、readmeファイルを作成し、リポジトリ名(echo "# $repoName" >> README.md)を使用して1行を書き込むことです。 )次に、gitリポジトリを初期化し、最初のコミットを行います。

  • 次に、リポジトリをgithubにアップロードします。そのために、次のコマンドでgithubAPIを利用します。

curl -u coccagerman https://api.github.com/user/repos -d '{"name": "'"$repoName"'", "private":false}'

カール サポートされている多くのプロトコルの1つを使用して、サーバーとの間でデータを転送するコマンドです。

次に、-uを使用します リポジトリを作成するユーザーを宣言するフラグ(-u coccagerman

次は、GitHub API(https://api.github.com/user/repos)によって提供されるエンドポイントです。 )

そして最後に、-dを使用しています このコマンドにパラメータを渡すフラグ。この場合、リポジトリ名を示しています(repoNameを使用しています) 変数)およびprivateの設定 falseのオプション 、レポを公開したいので。

APIには他にも多くの構成オプションが用意されているため、詳細についてはドキュメントを確認してください。

  • このコマンドを実行すると、GitHubからプライベートトークンの入力を求められます 認証用。

プライベートトークンをまだお持ちでない場合は、GitHubの[設定]>[開発者設定]>[パーソナルアクセストークン]で生成できます。

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]

  • かっこいい、もうすぐ終わりです!今必要なのはリモートURLです 新しく作成されたGitHubリポジトリの

これを取得するには、次のように、curlとGitHubAPIを再度使用します。

GIT_URL=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/coccagerman/"$repoName" | jq -r '.clone_url')

Here we're declaring a variable called GIT_URL and assigning it to whatever the following command returns.

The -H flag sets the header of our request.

Then we pass the GitHub API endpoint, which should contain our user name and repo name (https://api.github.com/repos/coccagerman/"$repoName" ).

Then we're piping the return value of our request. Piping just means passing the return value of a process as the input value of another process. We can do it with the | symbol like <process1> | <process2>

And finally we run the jq command, which is a tool for processing JSON inputs. Here we tell it to get the value of .clone_url which is where our remote git URL will be according to the data format provided by the GitHub API.

  • And as last step, we rename our master branch to main, add the remote origin we just obtained, and push our code to GitHub! =D
git branch -M main
git remote add origin $GIT_URL
git push -u origin main

Our full script should look something like this:

#! /bin/sh
repoName=$1

while [ -z "$repoName" ]
do
    echo 'Provide a repository name'
    read -r -p $'Repository name:' repoName
done

echo "# $repoName" >> README.md
git init
git add .
git commit -m "First commit"

curl -u <yourUserName> https://api.github.com/user/repos -d '{"name": "'"$repoName"'", "private":false}'

GIT_URL=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/<yourUserName>/"$repoName" | jq -r '.clone_url')

git branch -M main
git remote add origin $GIT_URL
git push -u origin main
  • Now it's time to test our script! To execute it there're two things we can do.

One option is to enter the shell name and pass the file as parameter, like:dash ../ger/code/projects/scripts/newGhRepo.sh

And the other is to make the file executable by running chmod u+x ../ger/code/projects/scripts/newGhRepo.sh

Then you can just execute the file directly by running ../ger/code/projects/scripts/newGhRepo.sh

以上です! We have our script up and running. Everytime we need a new repo we can just execute this script from whatever directory we're in.

But there's something a bit annoying about this. We need to remember the exact route of the script directory. Wouldn't it be cool to execute the script with a single command that it's always the same independently of what directory we're at?

In come bash aliases to solve our problem.

Aliases are a way bash provides for making names for exact commands we want to run.

To create a new alias, we need to edit the bash configuration files in our system. This files are normally located in the home directory. Aliases can be defined in different files (mainly .bashrc or .bash_aliases ).

I have a .bash_aliases file on my system, so let's edit that.

  • In our CLI we enter cd to go over home directory.

  • Then we can enter ls -a to list all files (includen hidden ones) and check if we have either a .bashrc or .bash_aliases file in our system.

  • We open the file with our text/code editor of choice.

  • And we write our new alias like this:
    alias newghrepo="dash /home/German/Desktop/ger/code/projects/scripts/newGhRepo.sh"

Here I'm declaring the alias name, the actual command I'm going to enter to run the script (newghrepo ).

And between quotes, define what that alias is going to do ("dash /home/German/Desktop/ger/code/projects/scripts/newGhRepo.sh"

See that I'm passing the absolute path of the script, so that this command works the same no matter what my current directory is.

If you don't know what the absolute path of your script is, go to the script directory on your terminal and enter readlink -f newGhRepo.sh 。 That should return the full path for you.;)

  • After we're done editing, we save our file, restart our terminal, and voilà! Now we can run our script by just entering newghrepo , no matter in what directory we currently are. Much quicker than opening the browser and clicking around to create our repo! =D

I hope this gives you a little taste of the kind of optimizations that are possible with scripting. It certainly requires a bit more work the first time you write, test, and set up the script. But after that, you'll never have to perform that task manually again.;)

Round up

The terminal can feel like an intimidating and intricate place when you're starting out. But it's certainly worth it to put time and effort into learning the ins and outs of it. The efficiency benefits are too good to pass up!

If you're interested in learning more about the terminal and Bash, Zach Gollwitzer has an awesome crash course series on youtube.
He has also great tutorials on other topics such as Node and Javascript, so I recommend that you follow him.;)

As always, I hope you enjoyed the article and learned something new. If you want, you can also follow me on linkedin or twitter.

Cheers and see you in the next one! =D

初心者向けのコマンドライン–プロのように端末を使用する方法[フルハンドブック]


  1. Linuxでwatchコマンドを使用する方法と例

    Linuxのwatchコマンドは1つのことを行います。コマンドを繰り返し、結果を繰り返し出力して、変更を監視できるようにします。使用方法は次のとおりです。 watchコマンド構文 watchコマンドの構文は次のとおりです。 watch OPTIONS COMMAND 注: オプション 以下の表のオプションのリストである必要があります。これにより、ウォッチのデフォルトの動作が変更されます。 コマンド コマンド 監視するコマンドです 繰り返し実行する必要があります。これは、出力を監視します 見る 中断されるまで実行されます(したがって、 CTRL+Cを押して終了します ) オプション 時

  2. macOS でターミナル コマンドラインを使用する方法

    Windows にコマンド プロンプト アプリケーションがあるのと同じように、macOS には、コマンドの実行や OS の変更に使用できるターミナルがあります。ターミナルは、システム設定を変更したり、ファイルやアプリを開いたり、タスクを実行したりするために使用できる macOS 専用のコマンドライン アプリケーションです。 Apple によって開発されたターミナルは、アップデートごとにデフォルトの macOS アプリとしてプリロードされています。ターミナル アプリは Mac のユーティリティ フォルダにあります。 つまり、ターミナルは Mac のコマンド プロンプトです。 Mac でコマ