Linux での一般的なシェル スクリプト コマンドと関連知識

Linux での一般的なシェル スクリプト コマンドと関連知識

1. 覚えておくべきポイント

1. 変数タイプ

シェルを実行すると、次の 3 つの変数が同時に存在します。

1) ローカル変数

ローカル変数はスクリプトまたはコマンドで定義され、現在のシェル インスタンスでのみ有効です。他のシェルによって起動されたプログラムはローカル変数にアクセスできません。

2) 環境変数

シェルによって起動されるプログラムも含め、すべてのプログラムは環境変数にアクセスでき、一部のプログラムでは正常な動作を保証するために環境変数が必要です。シェル スクリプトでは、必要に応じて環境変数を定義することもできます。

3) シェル変数

シェル変数は、シェル プログラムによって設定される特殊な変数です。シェル変数には環境変数とローカル変数があります。これらの変数はシェルの正常な動作を保証します。

2. シェル変数の説明

$$
シェル自体のPID(プロセスID)
$!
シェルによって最後に実行されたバックグラウンド プロセスの PID
$?
最後に実行されたコマンドの終了コード(戻り値)
$-
Set コマンドを使用して設定されたフラグのリスト
$*
すべてのパラメータのリスト。 「$*」が「」で囲まれている場合、すべてのパラメータは「$1 $2 ... $n」の形式で出力されます。
$@
すべてのパラメータのリスト。 「$@」が「」括弧で囲まれている場合、すべてのパラメータは「$1」「$2」…「$n」の形式で出力されます。
$#
シェルに追加されたパラメータの数
$0
シェル自体のファイル名
$1~$n
シェルにパラメータ値を追加します。 $1 は最初のパラメータ、$2 は 2 番目のパラメータ、というように続きます。

3. シングルクォート、ダブルクォート、バッククォートの違い

変数の値をシングルクォート' 'で囲むと、シングルクォート内の内容が出力されます。内容に変数やコマンド(コマンドは引用符で囲む必要があります)が含まれていても、そのまま出力されます。
変数の値を二重引用符 " " で囲むと、二重引用符内の変数名とコマンドがそのまま出力されるのではなく、出力時に内部の変数とコマンドが最初に解析されます。

バッククォート ` ` (esc キーの下) を使用すると、コマンド置換は、シェルが最初にコマンドを実行し、出力を一時的に保存してから、適切な場所に出力できることを意味します。変数は次のように指定できます。

4. シェルのエスケープ文字

\\ バックスラッシュ
\a アラームが鳴る
\b バックスペース(Deleteキー)
\f ページ送り(FF)、現在の位置を次のページの先頭に移動します
\n 改行
\r 入力
\t 水平タブ文字(タブキー)
\v 垂直タブ文字

5. 算術演算子の一覧

演算子の説明例
+ 加算 `expr $a + $b` の結果は 30 になります。
- 減算 `expr $a - $b` の結果は 10 です。
\* 乗算 `expr $a \* $b` の結果は 200 になります。
/ 割り算 `expr $b / $a` の結果は 2 になります。
% `expr $b % $a` の余りは 0 です。
= 割り当て a=$b は変数 b の値を a に割り当てます。
== は等しいです。 2 つの数値を比較し、同じ場合は true を返します。 [ $a == $b ] は false を返します。
!= 等しくありません。 2 つの数値を比較し、異なる場合は true を返します。 [ $a != $b ] は true を返します。

6. 関係演算子

関係演算子は、文字列値が数値でない限り、文字列ではなく数値のみをサポートします。

演算子の説明例
-eq は 2 つの数値が等しいかどうかをチェックし、等しい場合は true を返します。 [ $a -eq $b ] は true を返します。
-ne は 2 つの数値が等しいかどうかをチェックし、等しくない場合は true を返します。 [ $a -ne $b ] は true を返します。
-gt は、左側の数値が右側の数値より大きいかどうかをチェックし、大きい場合は true を返します。 [ $a -gt $b ] は false を返します。
-lt 左側の数値が右側の数値より小さいかどうかを確認し、小さい場合は true を返します。 [ $a -lt $b ] は true を返します。
-ge は、左側の数値が右側の数値以上であるかどうかをチェックし、等しい場合は true を返します。 [ $a -ge $b ] は false を返します。
-le は、左側の数値が右側の数値以下かどうかをチェックし、そうである場合は true を返します。 [ $a -le $b ] は true を返します。

7. ブール演算子のリスト

演算子の説明例
! 演算ではありません。式が true の場合は false を返し、そうでない場合は true を返します。 [ ! false ] は true を返します。
-o OR 演算。1 つの式が true の場合に true を返します。 [ $a -lt 20 -o $b -gt 100 ] は true を返します。
-a AND 演算。両方の式が true の場合にのみ true を返します。 [ $a -lt 20 -a $b -gt 100 ] は false を返します。

8. ファイルテスト演算子のリスト

演算子の説明例
-b file ファイルがブロックデバイスファイルであるかどうかを確認し、そうである場合は true を返します。 [ -b $file ] は false を返します。
-c file ファイルがキャラクタデバイスファイルであるかどうかを確認し、そうである場合は true を返します。 [ -b $file ] は false を返します。
-d file ファイルがディレクトリであるかどうかを確認し、ディレクトリである場合は true を返します。 [ -d $file ] は false を返します。
-f file は、ファイルが通常のファイル (ディレクトリでもデバイス ファイルでもない) であるかどうかを確認し、そうである場合は true を返します。 [ -f $file ] は true を返します。
-g file ファイルに SGID ビットが設定されているかどうかを確認し、設定されている場合は true を返します。 [ -g $file ] は false を返します。
-k file ファイルにスティッキー ビットが設定されているかどうかを確認し、設定されている場合は true を返します。 [ -k $file ] は false を返します。
-p file ファイルが名前付きパイプであるかどうかを確認し、そうである場合は true を返します。 [ -p $file ] は false を返します。
-u file ファイルに SUID ビットが設定されているかどうかを確認し、設定されている場合は true を返します。 [ -u $file ] は false を返します。
-r file ファイルが読み取り可能かどうかを確認し、読み取り可能な場合は true を返します。 [ -r $file ] は true を返します。
-w file ファイルが書き込み可能かどうかを確認し、書き込み可能な場合は true を返します。 [ -w $file ] は true を返します。
-x file ファイルが実行可能かどうかを確認し、実行可能な場合は true を返します。 [ -x $file ] は true を返します。
-s ファイルは、ファイルが空かどうか (ファイル サイズが 0 より大きいかどうか) をチェックし、空でない場合は true を返します。 [ -s $file ] は true を返します。
-e file ファイル (ディレクトリを含む) が存在するかどうかを確認し、存在する場合は true を返します。 [ -e $file ] は true を返します。

2. よく使われるスクリプトコマンドの例

例が長すぎるので、1つだけ挙げます。

1. nginxのログをnginx.logに保存し、2020年4月23日のアクセスIP数をカウントし、降順で並び替えます。

例: 192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

cat nginx.log | grep 2020/04/23 | awk -F "-" '{print $1}'|sort|uniq -c | sort -r | awk '{print $1,$2}'

2. nginxログをnginx.logに保存し、2020年4月23日20:00から23:00までの重複IPアクセス数をカウントします。

例: 192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

cat nginx.log | grep 23/Apr/2020:2[0-3] | awk '{print $1}' | sort | uniq | wc -l

3. nginxログをnginx.logに保存し、3回以上アクセスしたIPアドレスをカウントするスクリプトを作成します。

例: 192.168.1.20 - - [21/Apr/2020:14:27:49 +0800] "GET /1/index.php HTTP/1.1" 404 490 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0"

cat nginx.log | awk '{print $1}'| sort | uniq -c | awk '{if ($1 >3) print $0}' | sort -r | awk '{print $1,$2}'

awk データフィールド変数
$0はテキストの行全体を表します
$1はテキストの最初のデータフィールドを表します
$2はテキストの2番目のデータフィールドを表します
$nはテキスト内のn番目のデータフィールドを表します

4. netstatコマンドの結果をnetstat.txtに書き、ローカルマシンのポート3306に接続を確立し、確立状態にあるすべてのIPを表示し、接続数に応じて降順で並べ替えます。

例: tcp 0 0 172.16.56.200:41856 172.16.34.144:3306 ESTABLISHED

cat netstat.txt | grep ESTABLISHED | grep 3306 | awk '{print $5}' | awk -F ":" '{print $1}' | sort | uniq -c | sort -hr | awk '{print $1,$2}'

5. ネットワークセグメント内の使用済みまたは未使用のIPアドレスをカウントする

#!/bin/bash
`seq 0 255` の IP の場合
 する
 ping -c 1 -i 0 192.168.2.$ip
[ $? -eq 0 ]の場合
それから
 エコー "192.168.2.$ip" >> /root/up.txt
それ以外
 echo "192.168.2.$ip" >> /root/down.txt
フィ
終わり

6. ファイル内の行数を読み取り、ループで行ごとに読み取ります。

例: cat http

百度

シティハウス

詳しくはこちら

vim の http.sh

cat /data/script/http | 行を読み取りながら
する
  カール$line 
終わり
日付=`日付 "+%Y-%m-%d-%H-%M-%S"`
echo "成功$日付" >> /data/script/http.txt

Linux でよく使われるシェル スクリプト コマンドと関連知識に関するこの記事はこれで終わりです。Linux での関連シェル スクリプト コマンドの詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux シェル スクリプトでローカル IP アドレスを取得する方法
  • Linux でシェル スクリプトの先頭に固定フォーマットを設定する方法
  • Linuxはシェルスクリプトを使用して履歴ログファイルを定期的に削除します

<<:  マウスがカード上に移動したときにフローティング効果を実現する CSS の使用例

>>:  Firebug ツールを使用して iPad でページをデバッグする

推薦する

Docker 大規模プロジェクトのコンテナ化変革

仮想化とコンテナ化は、クラウドベースのプロジェクトでは避けられない 2 つの問題です。仮想化は純粋な...

タブバーのいくつかの実装方法(推奨)

タブ: カテゴリ + 説明タグバー: カテゴリ => ユーザーに現在地と目的地を知らせる1. ...

ユーザーエクスペリエンスの構築

<br />おそらく、あなたは会社に入社したばかりで、その会社が「ユーザビリティ」に関す...

HTMLでカスタムタグを使用する方法

カスタム タグは XML ファイルと HTML ファイルで自由に使用できますが、いくつか注意すべき点...

Mac ノードの削除と再インストールのケーススタディ

Macノードの削除と再インストール消去 ノード -v sudo npm アンインストール npm -...

MySQL 最適化ソリューション リファレンス

最適化によって発生する可能性のある問題最適化は必ずしも単純な環境で実行されるわけではなく、実稼働環境...

プライベートレジストリ内の画像を照会または取得する方法

Dockerはプライベートレジストリ内のイメージを照会または取得するために、 docker 検索 1...

Nginx ソースコードのコンパイルとインストールのプロセス記録

rpm パッケージのインストールは比較的簡単なので、ここでは説明しません。ほとんどのオープンソース ...

表面的なウェブデザイン

<br />私はいつもYahooのウェブデザインが素晴らしいと信じてきました。しかし、こ...

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インライ...

Linux で履歴コマンドを表示および実行する方法

履歴コマンドを表示し、指定されたコマンドを実行します owen@owen:~/owen/softwa...

CentOS 8 / RHEL 8 に VirtualBox 6.0 をインストールするための詳細なチュートリアル

VirtualBox は、技術者が異なる種類の複数の仮想マシン (VM) を同時に実行できるようにす...

MySQL の複合インデックスはどのように機能しますか?

目次背景複合インデックスを理解する左端一致原則フィールド順序の影響複合インデックスは単一のインデック...

VueでTypescriptの設定手順を使用する

目次1. TypeScriptが古いVueプロジェクトに導入されるVue+Typescript プロ...