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 でページをデバッグする

推薦する

Nginx proxy_redirect の使用方法の詳細な説明

今日、Apache の nginx リバース プロキシを実行していたときに、ちょっとした問題に遭遇し...

Vueフィルターの詳細な説明

<本文> <div id="ルート"> <h2&...

Win10 への MySQL 5.7 のインストール MSI 版のチュートリアル(画像とテキスト付き)

主にインストール後に my.ini ファイルを確認するために、msi 形式でインストールしました。フ...

カルーセル効果を実現するための純粋なjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

MySQL で重複を削除するには、distinct または group by を使用する必要がありますか?

序文group by と distinctive のパフォーマンス比較について: インターネット上の...

小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現するためにCSSを使用する

小さな画像をクリックしたときに更新せずに大きな画像コードが表示されるようにLightboxを実現する...

親要素に対する CSS 子要素の配置の実装

解決親要素に position:relative を追加します。子要素に position:abso...

React を使って小さなプログラムを書くための Remax フレームワークのコンパイル プロセス分析 (推奨)

Remax は、実行時に構文制限のないソリューションを採用した React を使用して小規模なプロ...

Nginx タイムアウト設定の詳細な説明

最近、プロジェクトで nginx を使用し、バックエンドで Java を使用しました。バックエンドで...

表の最初の行と最初の列を固定し、適応型ウィンドウを実現するための CSS の例コード

今日のキャンパス採用筆記試験では、固定された最初の行と最初の列を実装し、幅をウィンドウの変更に適応さ...

Linux の操作とメンテナンスの基本システムディスク管理チュートリアル

1. ディスクパーティション: 2. fdiskパーティションディスクが2 TB未満の場合はfdis...

フロントエンド開発に必須:推奨されるブラウザ互換性テストツール 12 選

フロントエンド開発者にとって、さまざまな主要ブラウザのさまざまなバージョンでコードが適切に動作するこ...

Win7 の VMware 仮想マシンに Linux7.2 をインストールするインターネット アクセス構成チュートリアル

参考までに、win7システム上のVMware仮想マシンにlinux7.2インターネットアクセス構成を...

MySQL で最大接続数を正しく変更する 3 つの方法

MySQL データベースをインストールすると、デフォルトの MySQL データベースの最大接続数が ...