GNU/Linux >> Linux の 問題 >  >> Linux

Bashスクリプト(I)

これは、GnuBashスクリプトに焦点を当てたシリーズの最初の記事です。これはbashプログラミングの完全なコースではありませんが、最後に1つまたは2つのことを学ぶ必要があります。つまり、あなたの生活を楽にするのに役立つ便利なものです。

怠惰は成功の鍵です

command1、command2、command3、最後にcommand4を実行する必要がある場合があります。しばらくして、そのコマンドシーケンスを繰り返す必要があります。しかし、私は非常に頭が良いので、上向き矢印キーを使用してコマンド履歴を調べたので、もう一度書き直す必要はありません。

それから、しばらくしてまたやらなくてはいけないのですが、今後何度かやらなくてはいけないことはわかっています。たとえば、毎日、コンピュータを起動し、DebianベースのLinuxにログオンして、パッケージのアップグレードを確認します。

# apt-get update
(...)
# apt-get upgrade
(...)
# apt-get dist-upgrade

毎回52文字を入力する代わりに、次のようなスクリプトに入力できます。

#!/bin/bash
#this is not a Hello world
apt-get update
apt-get upgrade
apt-get dist-upgrade

このスクリプトを「up.sh」として保存し、ログインした翌朝、。 /up.shを実行するだけです。 。 44回のキーストロークを節約したのと同じように、怠惰になっているのでしょうか。

いいえ、そうではありません。「そのまま」実行しようとすると、美しい許可拒否エラーが発生します。 。これは、実行権限を設定するように指示したことがないためです:

# chmod +x up.sh

後で、もっと怠惰になる方法を紹介します。

最後の行のコマンドに加えて、最初の2行に数字(#)があることに気づきました。最初の行はshebangと呼ばれ、スクリプトでコマンドを実行するためにどのインタープリターを使用するかをシステムに通知します。

2つ目は単なるコメントであり、どこにでも置くことができます。その記号の後ろにあるものは無視されます。例:

# this is a comment
command1 # this also is a comment. Should explain what that command do
#command2. # This was command... but as was commented out, bash would ignore it

スクリプトの機能とその理由を覚えておくために、(少なくとも私にとっては)少なくとも2、3のコメントを追加することが重要です。また、大きなスクリプトでは、ブロック、セクション、またはスクリプトの一部を説明するコメントを追加します。コメントは、数か月、数週間、さらには数日後にスクリプトに戻るときに役立ちます。

もっと怠惰になる

システムにログオンするたびに入力する必要はありません。コンピューターにそのスクリプトを実行させることができます。 「./up.sh」という行を追加できます 」は次のいずれかの場所にあります:

  • .bashrc 。これにより、ログイン以外のシェル(つまり、xtermなどのデスクトップに含まれるターミナル)を起動するたびにスクリプトが実行されます
  • .bash_profile これはログインシェル用です。たとえば、コンソールでユーザーとパスワードを入力したり、システムにログインしたりする場合などです。
  • .xinitrc .bashrcと似ていますが、グラフィカルセッション用です。おそらく、独自のツールを備えた最新のdestkopを使用して、アプリケーションを自動起動し、それらを使用しています。
  • crontabファイルのエントリであるため、定期的に実行されます。

変数

ユーザー入力、コマンドラインからのパラメータなどの値を格納するための「何か」が必要です。この「何か」は変数です。ちなみに、あなたはすでに変数が何であるかを知っていると思います。

変数を宣言するには、次のことができます

  • 変数名に値を割り当てます。例: x =1
  • 読み取りコマンドを使用してユーザーに値を入力します: read x
  • コマンドラインからのパラメータ。すぐにこれに戻ります
  • 後で見る変数を定義する他の方法があります

変数を「呼び出す」には、ドル記号の後に変数名を入力します。たとえば、画面に$ x変数の値を出力する場合:

echo "x value: $x"
echo "Type y vaue:"
read y
echo "You typed: $y"

コマンドラインパラメータは、番号付きの変数に保存されます。たとえば、最初の引数を使用して、$1変数を呼び出します。 2回目は、$2に電話します。等々。変数$0は、スクリプトファイル名を格納します。私の最初のnot-a-hello-worldの例では、$0の値は「up.sh」です。

配列

配列は同じ方法で定義されますが、値は丸括弧で囲まれています。このように:

array=(uno dos tres)

インデックスを角かっこで囲んで、後で配列に値を追加できます。

array[3]=cuatro

配列名には中括弧、要素位置には角括弧(0から始まる)を使用して配列要素を「呼び出す」ことができます:

$ echo ${array[0]}
uno

中括弧を使用しない場合、bashはリテラル[要素位置]を出力します。例:

$ echo $array[0]
uno[0]

次のように、インデックスとして@を使用してすべての配列を呼び出すことができます。

$ echo ${array[@]}
uno dos tres cuatro

最後に、次のように、ハッシュ記号(コメント用に前に説明したものと同じ)を使用して配列の要素数を取得できます。

echo ${#array[@]}
4

配列や、連想配列などの他の配列タイプでできることは他にもたくさんあります。しかし、今日はこれで十分です。

お楽しみに

これまでのところ、「 woaaah 「。この記事にはスクリーンショットが1つもありません。しかし、このシリーズの終わりに向けた私の意図は、おそらく3つ以上の記事で、何か便利なことをするためのツールを提供することです。あなたがbashスクリプトの第一人者になるかどうかはわかりませんが、試すことができます😉

次の記事では、いくつかの制御構造、パイプライン、およびリダイレクトについて説明します。その間、bashのマンページを確認できますが、少なくとも私には少し混乱します


Linux
  1. Bash のリストに変数が存在するかどうかを確認する

  2. grep を bash の変数に渡す

  3. bash - 大文字と小文字を区別しない変数のマッチング

  1. Bash動的(変数)変数名?

  2. Bashシェルスクリプトで文字列を比較する方法

  3. bash の変数を持つエイリアス

  1. Bash宣言ステートメント:構文と例

  2. Bashエクスポート変数

  3. bashで読み取り専用変数を削除するには?