シェルスクリプトで書かれたコード

Centos7は、今のソフトウェアはbashを使用している、bashのバージョンは、次のコマンドで見ることができます。

[root@localhost ~]# cat /etc/redhat-release     #查看系统的版本
CentOS Linux release 7.5.1804 (Core)     #我这里使用的是centos 7.5 1804
[root@localhost ~]# bash --version   #查看bash的版本
GNU bash, 版本 4.2.46(2)-release (x86_64-redhat-linux-gnu) #这一行就是bash版本
Copyright (C) 2011 Free Software Foundation, Inc.
许可证 GPLv3+: GNU GPL 许可证版本3或者更高 <http://gnu.org/licenses/gpl.html>

这是自由软件,您可以自由地更改和重新发布。
在法律允许的范围内没有担保.

システムおよびシェルの古いバージョンを使用して、本番環境でのサーバーの場合は約2歳のバージョンが露出より深刻なセキュリティ脆弱性の存在だったので、シェルの最新バージョンにアップグレードすることをお勧めします。

bashのソフトウェアは、一度ように重大な欠陥(破線シェルの脆弱性)、この脆弱性のおかげで、他の人がシステムの様々な機密情報へのアクセスを得るために、コンピュータのオペレーティングシステム全体を引き継ぐことができ、システムの変更とを破りました。誰のコンピュータシステムあなたは、bashのソフトウェアを使用している場合、あなたはすぐにパッチを適用する必要があります。システムの抜け穴があるかどうかを検出する方法は、次のとおりです。

#测试系统是否存在漏洞
[root@localhost ~]# env x='() {:;}; echo be careful' bash -c "echo this is a test"
this is a test

リターン何か、あなたはbashのをアップグレードする必要がありますが、単に学習とテストのために気にしない場合は、「これはテストです」上記の内容を返し、それは、通常の意味します。

[root@localhost ~]# env x='() {:;}; echo be careful' bash -c "echo this is a test"
be careful
this is a test

ヒント:何も出力は気をつけていない場合は、アップグレードする必要はありません。

次のようなアップグレード方法は次のとおりです。

[root@localhost ~]# rpm -qa bash    #升级前的bash版本
bash-4.2.46-30.el7.x86_64
[root@localhost ~]# yum -y update bash    #执行升级命令
[root@localhost ~]# rpm -qa bash  #升级后的bash版本
bash-4.2.46-31.el7.x86_64

シェルスクリプトで記述されたコード:

1、スクリプト行の先頭には、このような、#/ビン/ SH :!として、通訳の種類を使用することを示している .......#/ binに/ bashの!
2は、スクリプトのサフィックス名を調整、スクリプトはシェルであれば、それは「.SH 『であり、それはPythonスクリプトであれば、』の.py 『であり、もしスクリプトが』 .EXP」で期待しています。
#は、シェルを使用して、指定された後の最初の行に加えて、スクリプトを叱らない3、書かれたノートは、次のすべてが#あるコメントを示して、あなたは1本のラインとコードを共有することができ、また別の行に書き込むことができ、それは中国が表示されないことが最善ですコメントを記述しない場合は、あなたも理解していない自分自身を記述するためのスクリプトを見ることができる時間をかけて自分自身の呪いの対象となります。

シェルスクリプトの実行:

シェルスクリプトを実行すると、それは最初のシステム環境変数ENVを探し、環境変数はファイル(通常は/etc/profile,~/.bash_profile,~/.bashrc,/etc/bashrcロード順序など)、読み込みを指定します上記の環境変数ファイルの後に、シェルは、コンテンツのシェルスクリプトを実行し始めました

シェルスクリプトは、あなたがサブスクリプトシェルスクリプトが発生した場合(つまり、ネストされたスクリプト)を実行してコマンドの実装を超える左から右へ、各ラインのトップダウン、コマンドの実行と文、つまり、であり、コンテンツは、サブスクリプトの最初の実装である親スクリプト内の後続のコマンドとステートメントの実行を継続するためのスクリプトの完了後に親に戻ります。

シェルスクリプトは、通常、次の方法で実行することができます。

  • bashスクリプト名またはSHスクリプト名:スクリプトファイル自体は実行権限(すなわち、ファイルのパーミッションビットx属性 - 数)でない場合、これがあり、多くの場合、使用方法、またはスクリプトファイルのインタプリタの先頭を指定する必要がない場合に使用する方法。これは、使用する方法をお勧めします。
  • パス/スクリプト名または./script-name:スクリプトを実行するために、現在のパスに参照する(スクリプトが実行権限を必要とする)、実行可能ファイルへのスクリプトファイルに必要なアクセス権(すなわちXプラスファイル許可ビットを属性)、具体的な方法chmodの+ Xスクリプト名です。そして、あなたは直接スクリプトの絶対パスまたは相対パスでスクリプトを実行することができます。
  • ソース・スクリプト名または.script名:「」この方法は、一般的に読まれるべき、または指定されたスクリプトファイルシェル(例えばsan.sh)をロードするために、ソースまたは(ドット)を使用し、順次指定されたスクリプトファイルのシェルを実行しますsan.sh.のすべての文 現在で実行し、親のシェルスクリプトfather.shプロセスのこれらのステートメント(他のいくつかの新しいモデルは、サブスクリプトの実行のプロセスを開始します)。したがって、使用またはソース。「」San.sh自体は、現在の親のような変数のスクリプトまたは関数値とすることができるシェルが使用するスクリプトfather.shに渡された値を返します。これは、いくつかの他の方法との最大の違いです。
  • SH \ <スクリプト名や猫スクリプト名| SH:同じことがbashのに適用されますが、この使用方法は非常に一般的ではありませんが、時にはそれがまた驚きの動きの効果を持つことができ、例えば:サービスの場合を合理化するために、スタートからの起動を実現するためにないループを行いますこれは、bashの動作にダクトを経由して、コマンド文字列のすべてのスプライシングされた形態である、と。

結論:

SHとbashがスクリプトを実行しながら、。スクリプトの終了後、(機能を含む)スクリプト変数値が現在のシェルに残るように「」ソースまたはスクリプトによって、現在のシェル内のスクリプトの実装ので、実行ロードさ親シェルに戻った後に実行、実行するための新しいサブシェルを起動します。そのため、等の変数と関数の値が基準の需要がある場合は、シェルスクリプトの開発中に、予約または他のスクリプトのスクリプトや設定ファイルを実行することができない、最高使用。「」またはソースのスクリプトや設定ファイルをロードするには処理が完了した後、以下のスクリプトにそれらをロードした後、あなたは、このようなソースをロードすると、スクリプトや設定ファイルの変数と関数の内容を呼び出すことができます。

シェルで書かれたコード:

  • 最初の行は、シェル・スクリプトは、スクリプトインタプリタ(必須ではない)で指定します。
  • 通常、スクリプト(必須ではありません)の2行目の先頭で書かれたシェルスクリプトを加えたバージョン、著作権情報、の始まり。
  • 中国なしで可能な限りシェルスクリプト(だけでなく、そのコメント)では、
  • 名前付きシェルスクリプトは、拡張子は.sh必要があります。
  • シェルスクリプトは、固定されたパスに格納する必要があり、通常は「/サーバ/スクリプトは、」
    次は良い習慣で書かれたシェルスクリプトのコードは次のとおりです。
  • シンボルのペアが、その後、一度それを書く漏れを防止するために、コンテンツにシンボル増加をバックスペースしてみてください。これらのシンボルは、 "{}" "[]" 典型的.......
  • 両端の括弧[]であなたはスペースを入力するとき、ブラケットを残すことができ、その後、バックスペースキーの真ん中に内容を入力して、両端が少なくとも1つのスペースを持っていることを確認するので、それは最初のタイプを一組と言うことである、少なくとも1つのスペースを持っている必要がありますグリッド渡さブラケット、及びバックフレーム、二つの入力空間は、二重括弧[]と同じ表現です。
  • :フロー制御文では、フォーマットは1時間で終了した後、コンテンツを追加しなければならない、など非常に多くの言語、ある
    文の場合は、時間完了フォーマット:
    条件の内容があれば
    、その後
    、コンテンツ
    Fi回線
    ループのためのフォーマットが完了するまでの時間:
    以下のための
    ない
    コンテンツが
    行われ

しばらくしてケースと同様に他の文まで。

  • インデントによって文の、そのような場合は、上記のように、コードをより読みやすくします。
  • 従来の可変文字列が可変二重引用符と等号の前後のスペースなしの値であると定義されているため、参照が強い必要(観察された文字を参照する参照)、単一引用符「」、もしコマンドリファレンス、例えば、使用単一引用符 ``(このキーは以下に配置され、ESCキー):ユーザ名=「LV建趙」
  • スクリプトの単一引用符、二重引用符とバッククォートは英語の状態でサインインする必要があり、実際には、Linuxのすべての文字や記号は、英語の状態の看板の下でなければなりません、それは特別な注意が必要です。
    説明:良い習慣は、私たちは、不必要な多くの問題を避けるため、作業効率を向上することができます。

--------この記事の最後に、これまで、読んでくれてありがとう--------

おすすめ

転載: blog.51cto.com/14154700/2432361