Linux スクリプトの基礎を詳しく紹介

Linux スクリプトの基礎を詳しく紹介

1. スクリプトvim環境

スクリプトでは、通常、スクリプト情報を表示する必要があります。この情報は、vimを設定することで自動的に表示されます。
/etc/vimrc このファイルは vim のメイン設定ファイルです。ファイルの内容はグローバルに有効です。 ~/.vimrc このファイルは vim のサブファイルです。ユーザーのホームディレクトリにある vim の設定ファイルを編集することでも制御できますが、現在のユーザーにのみ有効です。
vim ~/.vimrc 設定ファイルを編集する

構成情報の意味:

set nu は行番号を表示します
ts=2はTabキーがスペース2つに相当することを意味します
Tabキーをスペースキーに変換する
ai はインデントを示します。func は関数の型マークです。endfunc は関数の終了マークです。call は呼び出しを示します。append はステートメントの追加を示します (0 は最初の行を示し、追加された内容は "" で囲まれます)。
autocmd は、.sh または .script で終わる新しいファイルを作成するときに自動的に呼び出される関数 WESTOS() を設定します。
strftimeはキャプチャ時間を自動的に識別し、年/月/日の形式で出力することを意味します。
!/bin/bash マジックナンバー。スクリプトの実行時に最初に実行されるコマンド。通常はスクリプト内の他の指定された実行環境。

  nu ts=2 と ai を設定する
  
  autocmd BufNewFile *.sh,*.script 呼び出し SHELLTITLE()
   関数SHELLTITLE()
    append(0,"#####################################")を呼び出します
    append(1,"# Author: lee") を呼び出す
    append(2,"# バージョン: 1.0") を呼び出します
    append(3,"# Create_Time: ".strftime("%Y/%m/%d")) を呼び出します
    append(4,"# メール: lee@westos.org") を呼び出します
    append(5,"# 情報: ") を呼び出す
    append(6,"#") を呼び出す
    append(7,"#") を呼び出す
    append(8,"#####################################")を呼び出します
    append(9,"") を呼び出す
    append(10,"#!/bin/bash") を呼び出します
  終了関数

図に示すように:

スクリプト演習:
(1)ネットワークカードを入力するとネットワークカードのIPアドレスが表示され、空白の入力プロンプトが表示されるようにip_show.shスクリプトを作成します。

#!/bin/bash
[ -z "$1" ] && {
   echo "エラー: 次のスクリプトに従ってインターフェースを入力してください!!"
   出口
   }
ifconfig $1 | awk '/\<inet\>/{print $2}'

効果は以下のようになります。

(2)現在のホストの名前と現在のホストにログインしたユーザーのIPアドレスを表示するhost_messages.shを作成します。
ホスト名:
IPアドレス:
ユーザー名:

#!/bin/bash
  echo "ホスト名: `ホスト名`"
  echo "ipaddress: `ifconfig ens3 | awk '/\<inet\>/{print $2}'`"
  echo "ユーザー名: $USER"

!!!シングルクォートとバッククォートの違いに注意してください。シングルクォート''は弱い引用符であり、\ ` $を引用することはできません。バッククォート`は強い引用符であり、すべてを引用できます。

(3)ログをクリアするスクリプトを実行するclear_log.shを作成する

#!/bin/bash
[ "$USER" != "root" ] && {
  echo "$0 を root で実行してください !!!"
  出口
  }
[ ! -e "/var/log/messages" ] && {
  echo "ここにはログファイルがありません!!!"
  出口
}
> /var/log/メッセージ && {
  echo ログファイルがクリアされました!!!
  出口
}

2. シェルスクリプトで環境を定義する方法

環境レベル
エクスポート a=1
環境が閉じられると変数は消えます。
ユーザーレベル
vim ~/.bash_profile ユーザー環境変数設定ファイル
エクスポート a=1
ユーザー切り替え後は無効
システムレベル
vim /etc/profile メイン設定ファイル
エクスポート a=2
vim /etc/profile.d/westos.sh サブ設定ファイル
エクスポート b=3
この変数を設定すると、システム内のすべてのユーザーが

シェルコマンド export a=1 で指定された変数値を使用すると、2つが同じシェルで開かれないため、スクリプト内で認識されません。
したがって、現在の変更を有効にするには、変数設定ファイルsource ~/.bash_profileで必要な変数を編集することができます。
vim ~/.bash_profile ユーザー環境変数設定ファイル ユーザー環境変数設定ファイルは、設定されたユーザーに対してのみ有効です。ユーザーを切り替えた後は、シェルを開くとホームディレクトリの .bash_profile が読み込まれるため、変数は無効になります。
vim /etc/profile システムレベルの環境変数設定ファイル(通常はこの設定ファイルの情報を編集する必要はありません)
vim /etc/profile.d/westos.sh システムレベル環境変数カスタムサブ設定ファイル(カスタム名、元々存在しない)ソース
/etc/profile.d/westos.sh ファイルが有効になります。サブプロファイルで変数を設定すると、システム内のすべてのユーザーがそれを使用できるようになります。

3. シェルスクリプト内の翻訳された文字

1文字を翻訳する: \
一括翻訳文字: '' ""
'' 一重引用符は弱い引用符なので、\ ` $ のように引用符で囲むことはできません。
``バックシングルクォートは、すべての文字列を引用できる強力な引用符です。

4. スクリプト内の変数の配列

a=(1 2 3 4 5)
echo ${a[0]}は最初の要素を表示する
echo ${a[-1]}は最後の要素を表示する
echo ${a[@]:0:3}は最初の要素から始まり、合計3つの要素を表示します。
echo ${a[@]:2:3}は2番目の要素から始まり、3つの要素を表示します。
echo ${#a[@]}はすべての要素を表示します
echo ${#a[*]}はすべての要素を表示します
unset aは配列を削除します
unset a[0]は指定された要素を削除します

5. システムコマンドのエイリアス設定

alias xie='vim' # シェルの失敗をオフにする一時的な設定

vim ~/.bashrc #ユーザーレベルの設定ファイル
エイリアス xie='vim'
source ~/.bashrc #このファイルは現在のユーザーに対してのみ有効で、ユーザーを切り替えると無効になります

vim /etc/bashrc #システムレベル
エイリアス xie='vim'
source ~/.bashrc #このファイルはシステムのすべてのユーザーに適用されます

エイリアスを削除するには:
システム構成ファイルの内容を削除した後
unalias xie #現在の環境のエイリアスを削除する

6. スクリプトでパラメータを渡す

非対話型モード:
sh /mnt/test.sh ウェストス Linux Redhat
$0 は /mnt/test.sh # スクリプト自体
$1はwestosです #スクリプトの後に入力された最初の文字列
$2はLinuxです #2番目の文字列
$3はredhatです #3番目の文字列
$* は westos linux redhat です #スクリプト「westos linux redhat」の後に入力されたすべての文字
$@ は westos linux redhat # スクリプト "westos" "linux" "redhat" の後に入力されたすべての文字
$#は3です #入力された文字列の数

インタラクティブモード:
read -p は対話モードに入ります。WORD は変数を表します。

#!/bin/bash
read -p "単語を入力してください:" WORD
$WORDをエコーする

効果は以下のようになります。

-sは入力した単語を非表示にすることを意味します

#!/bin/bash
read -p "単語を入力してください:" -s WORD
$WORDをエコーする

入場時に隠れた効果が発生します。

図に示すように:

スクリプト演習:
新しいユーザーを作成し、そのユーザーがすでに存在する場合はそれを通知し、存在しない場合は新しいユーザーのパスワードの入力を求めるスクリプトを作成します。

  #!/bin/bash
  [ -z $1 ] && {
    echo "ユーザー名を入力してください: !!" 
    出口
    }
    id $1 &> /dev/null && {
    echo "$1 は終了です!!"
  }||{
    ユーザー追加 $1 &> /dev/null
    read -p "ユーザーのパスワードを入力してください: " -s PASS
    エコー " "
   echo $PASS |passwd --stdin $1 &> /dev/null && {
    echo "ユーザーの作成に成功しました!!"
      }
  }

効果は以下のようになります。

7. スクリプト内のループ機能

#!/bin/bash
エコー()
{
 [ "$WORD" = "終了" -o "$WORD" = "終了" ] && {
    エコーバイバイ 
    出口
  }
    read -p "単語を入力してください:" WORD
    $WORDをエコーする
    エコー
}
エコー

関数を使用すると、スクリプト アクションをループ内で実行できます。

効果は以下のようになります。

スクリプト演習:
ファイルの種類を検出できるループ スクリプトを作成します。ファイルが存在しない場合は、ファイルが存在しないと表示されます。ファイルが存在する場合は、ファイルの種類を出力します。 exitを入力すると、byeが出力されスクリプトが終了します。

#!/bin/bash
ファイル()
{
  [ $1 "$FILENAME" ] && {
  echo $FILENAME は "$2" です
  エコー ""
  チェック
  }
}
チェック()
{

  read -p "ファイル名を入力してください:" FILENAME
  [ "$FILENAME" = "exit" ] && {
  エコーバイバイ
  出口
  }
  ファイル "! -e" "見つかりません"
  FILE -L "リンクファイル"
  FILE -f "共通ファイル"
  FILE -d "ディレクトリ"
  FILE -S "ソケット"
  FILE -b "ブロックファイル"
  FILE -c "cahr ファイル"
  チェック
  }
チェック

効果は以下のようになります。

スクリプト演習 2:
ループでユーザーを作成するスクリプトを記述します。ユーザーが存在する場合、出力情報はユーザーがすでに存在するというものです。存在しない場合は、新しいユーザーが作成され、パスワードが入力されます。入力中はパスワードは非表示になり、ユーザーが作成されたことが表示されます。そして、アクティブに終了するまで、次のユーザーを作成するためにユーザー名を入力するように求められ続けます。

#!/bin/bash
ユーザーの作成()
{

  read -p "ユーザー名を入力してください: " USER
  エコー ""
  [ "$USER" = "終了" ] && {
  エコーバイバイ
  出口
  }
  
  id $USER &> /dev/null && {
  echo "$USER は終了しました!!"
  ユーザーの作成
}||{
  ユーザー追加 $USER  
  read -p "パスワードを入力してください:" -s PASS
  エコー ""
  echo $PASS |passwd --stdin $USER &> /dev/null && {
  エコー ""
  echo $USERが作成されました!!
  }
  
  }
  ユーザーの作成
}
ユーザーの作成

効果は以下のようになります。

Linux スクリプトの基礎の詳しい紹介はこれで終わりです。Linux スクリプトの基礎に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linuxサービスの監視と運用および保守
  • Linux カーネルプログラミングにおけるコンテナの of() 関数の紹介
  • VS2019 で Linux C++ プログラムを開発するための実装手順
  • Linux 上級学習マニュアル (パート 2)
  • Linux 上級学習マニュアル (パート 1)
  • 学習マニュアル - Linux の基礎
  • Linux ドライバ開発でよく使われる関数 copy_from_user open read write の詳細な説明

<<:  フィルターと固定間の競合の原因と解決策の詳細な説明

>>:  MySQL シリーズ 10 同時実行制御を実装するための MySQL トランザクション分離

推薦する

同じレベルの要素で Position:fixed と margin-top を一緒に使用する場合の CSS の問題

問題の説明CSS を使用して上部の固定効果を実現したいと思います。 margin-top と pos...

HTMLノードの追加と削除の簡単な例

<br />HTMLノードの追加と削除の簡単な例<input type="...

Centos7のシステム言語を簡体字中国語に変更する方法

例示するシステムを自分でインストールする場合は、通常、システム言語をカスタマイズできます。ただし、ク...

テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加によく使用される MySQL の SQL 文の概要

この記事では、テーブルの作成、フィールドの追加、フィールドの変更、インデックスの追加を行う一般的な ...

フロントエンドが習得すべき、複数列の等高レイアウトを実現するための CSS テクニック

1. はじめにページを作成しているときに、複数列のレイアウトに遭遇することがあります。各列の内容が異...

MySQL データベースの最適化: インデックスの実装原則と使用状況の分析

この記事では、例を使用して、MySQL データベースの最適化のためのインデックス実装の原則と使用方法...

CSS における z-index: 0 と z-index: auto の違い

最近、スタック コンテキストについて学習しています。学習の過程で、z-index が 0 の場合と ...

MySQL InnoDB ストレージ エンジンの詳細

序文MySQL では、InnoDB はストレージ エンジン レイヤーに属し、プラグインとしてデータベ...

Deepin で virtualenv をインストールして使用するチュートリアル

virtualenv は、分離された Python 仮想環境を作成するためのツールです。独立したディ...

JDBC を使用して Mysql データベースに接続する際に発生する可能性のある問題の概要

まず、いくつかの概念を明確にします。 JDBC: Javaデータベース接続、Oricalによって規定...

HTMLテキスト内のすべてのタグを置き換える方法

(?i) は大文字と小文字を区別しないことを意味します。大文字と小文字をすべて置き換えます。 htm...

設定ファイルを変更した後、操作を再開します

余計なことは言わないで、コードだけ見てみましょう〜 # docker-compose をダウン # ...

Win7 システムでの MySQL 5.7.11 の詳細なインストール チュートリアル

オペレーティング システム: Win7 64 ビット Ultimate Edition MySQL ...

CSS3 フィルター属性の使い方の紹介

1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...

Nginx のステータス監視とログ分析の詳細な説明

1. Nginx ステータス監視Nginx には、Nginx の全体的なアクセス ステータスを監視す...