【シェルスクリプトアプリケーション】

目次

シェルスクリプトアプリケーションの基本入門

1.シェルスクリプト

1. シェルスクリプトの役割とシェルインタプリタの役割

2. スクリプトの基本構造と実行方法

3. 文字をパイプし、基本的な入出力を再形成する

2. 環境変数の基本的な使い方

1. 変数の種類

2. カスタム変数を構成する

3. 変数代入の一般的な記号

4. 整数変数演算子

5. 特殊変数

シェルスクリプトアプリケーションの基本操作 

1. 状態テスト

1. テスト判定

2. 比較演算子

3. 文字列の比較

4. ロジックテスト

2. 判断があれば

1. if判定の種類

2. 判定の場合は単一分岐

3. 二分岐判定

4. 多分岐if判定

シェルスクリプトの適用

1. ループの基本的な使い方

1.forループ

2. while ランダムループ

ケースコントロールサービスの 2 つの基本的なアプリケーション

1. caseの構文形式

2. vsftpd サービスを制御するスクリプトを作成するユースケース


シェルスクリプトアプリケーションの基本入門


1.シェルスクリプト

1. シェルスクリプトの役割とシェルインタプリタの役割

1) シェルスクリプトの役割

自動運用・保守利用

代わりにスクリプトを使用して繰り返し操作をバッチ処理する

2) シェルインタープリタの役割

Linux システムでデフォルトで使用される bash コマンド インタープリタ

ユーザー入力コマンドを受け取り、それを CPU に送信して判断して実行する役割を果たします。

2. スクリプトの基本構造と実行方法

1) スクリプトの構造

[root@centos01 ~]# vim test.sh

スクリプトサフィックスファイル *.sh

#!/bin/bash

声明

#電子メール:[email protected]

スクリプトの説明とスクリプトを作成するための連絡先情報

スクリプト実行コマンド

2) スクリプトの実行方法

[root@centos01 ~]# sh test.sh

shコマンドを使用して実行する

[root@centos01 ~]# ./test.sh

現在の場所でスクリプトを実行する

[root@centos01 ~]# ソース ./test.sh

スクリプトを実行するソースコマンド

3. 文字をパイプし、基本的な入出力を再形成する

1) 基本的な入出力

標準入力: ユーザーが入力したデータの受信または読み取り<

標準出力: データを画面またはファイルに表示 >、追加 >

エラー出力: エラー出力は画面上または特定のファイルに表示できます。2> エラー出力

混合出力: 正しいか間違っているかに関係なくファイルに出力します。&>

2) パイプ文字|

前のコマンドの実行結果を、次のコマンドで処理されるオブジェクトに変換します。

2. 環境変数の基本的な使い方

1. 変数の種類

1) カスタム変数

管理者は手動で作成し、必要に応じて定義します。

2) 環境変数

システムの使用状況を維持する

システムを自動的に作成するため、管理者は必要ありません

3) 位置変数

コマンドラインを使用して、プログラムパラメータをスクリプトに渡します。

4) 事前定義された変数

bash の事前定義された特殊変数

ユーザーは変更できません

2. カスタム変数を構成する

1) 変数を作成します。変数名は変数値が 10 です。

[root@centos01 ~]# a=10

2) 変数値を表示する 2 つの方法

[root@centos01 ~]# echo $a

[root@centos01 ~]# expr $a

3. 変数代入の一般的な記号

1) 二重引用符。$ 記号を使用して他の変数値を引用できるようにします。

[root@centos01 ~]# test="$ab $bb"

[root@centos01 ~]# echo $test

ベネト6.0

2) 一重引用符、他の変数値を引用することは禁止されています

[root@centos01 ~]# test='$ab $bb'

[root@centos01 ~]# echo $test

$ab $bb

3) 逆に、コマンドの実行結果を抽出するコマンド置換

[root@centos01 ~]# aa=`netstat -anptu | grep 22`

[root@centos01 ~]# echo $aa

4) read は、入力内容を特定の変数名に割り当てます。

[root@centos01 ~]# read -p "特定のディレクトリを入力してください:" insert

特定のディレクトリを入力してください:/boot

[root@centos01 ~]# echo $insert

/ブート

5) サブシェルが適用できるグローバル環境変数を定義する

[root@centos01 ~]# エクスポート a=100

[root@centos01 ~]# echo $a

4. 整数変数演算子

1) 作成した演算子

+:加算

-: 減算

\*:乗算

/:分割

%: モジュロ (剰余) 演算

2) コンピューティングの基本的な応用

[root@centos01 ~]# a=100

[root@centos01 ~]# b=200

[root@centos01 ~]# expr $a + $b

300

[root@centos01 ~]#expr 1 + 1

[root@centos01 ~]#echo $[1+1]

[root@centos01 ~]#echo “scale=2;1.25*1.25”|bc

[root@centos01 ~]#free

[root@centos01 ~]#vim mom.sh

#!/bin/bash

mt=$(free | awk 'NR==2{print $2}')

mu=$(free | awk 'NR==2{print $3}')

muu=$(expr $mu \* 100 / $mt)

echo $muu

または

echo "scale=2; $mu/$mt*100" |bc

[root@centos ~]# 無料 | awk 'NR==2{print int($3/$2*100)"%"}'

3) 中括弧は記号を区別するために使用されます

[root@centos01 ~]# echo ${ab}0.10.1

ベネ0.10.1

5. 特殊変数

1) 環境変数

システム構築

2) 位置変数

9 つの位置 $n を指定します (n は 1 ~ 9 を表します)

3) 事前定義された変数

$#: コマンドラインの位置パラメータ

$*: すべての位置パラメータ

$?: 記録されたスクリプト実行ステータス 0 は成功を示し、0 以外はエラーを示します

$0: スクリプトを実行する処理プログラム名

[root@centos ~]# vim bak.sh

#!/bin/bash



mkdir /backup

tar zcf /backup/file_all-$(date +%F).tar.gz $* &>/dev/null

echo "共备份了$#个文件"

echo "成功执行了$0脚本"

echo "备份的文件为:$*"

または

[ $? -eq 0] && echo "$0 スクリプトが正常に実行されました"

[root@centos ~]# chmod +x bak.sh

[root@centos ~]# ./bak.sh /etc/passwd /etc/group

 再構築キャッシュをクリアする

 yum clean all && yum makecache fast

挂载光盘

#!/bin/bash

#用户自动构建yum仓库脚本



#挂载光盘

mount /dev/cdrom /mnt

#创建仓库文件

cd  /etc/yum.repos.d/

mkdir bak

mv *.repo bak

#创建yum文件

echo “[yum]

name=yum

baseurl=file:///mnt

enabled=1

gpgcheck=0” > local.repo

#  清除重建缓存

 yum clean all && yum makecache fast

統合されたファイル内容のバッチ処理 --- 非対話型

vi pass.txt



123456

#useradd user1

#passwd  --stdin  user1 < pass.txt

或者

#echo  “123456” | passwd  --stdin  user1

&> または 2>&1、&>一部の構文はサポートされていません

vim /etc/init.d/network

マウント ディスクプロンプト情報がブラック ホールにリダイレクトされる

#!/bin/bash

#用户自动构建yum仓库脚本



echo  “挂载光盘…..”

mount /dev/cdrom /mnt  &> /dev/null

echo “创建仓库文件…..”

cd  /etc/yum.repos.d/

mkdir bak

mv *.repo bak

#创建yun文件

echo “[yum]

name=yum

baseurl=file:///mnt

enabled=1

gpgcheck=0” > local.repo

echo  “清除重建缓存…..”

 yum clean all    &> /dev/null  && yum makecache fast   &> /dev/null

echo  “yum创建成功….”

#cd /ブート | ls –l

#cd /ブート ; ls –l

#ls /etc | トイレ -l

#find ./ -name “*.sh” | xargs ls -l xargs 強制受信

#猫123

11 22 33

ああ、bb、cc

#awk   ' {print $2}'first.sh

#awk '  {print $2}'123

#awk   ' {print $2,$1,$3}'123

#df

#df |grep “/$”| awk '{print $5}'

#df |grep “/$”| awk '{print $5}'| awk –F '%' '{print $1}'

または

#df | awk –F'[ %]+' '/\/$/{print $(NF-1)}'

#x=18

#expr 3 + $x

変数

#!/bin/bash

#用户自动构建yum仓库脚本



x=”/mnt”



echo  “挂载光盘…..”

mount /dev/cdrom  $x &> /dev/null

echo “创建仓库文件…..”

cd  /etc/yum.repos.d/

mkdir bak

mv *.repo bak

#创建yun文件

echo “[yum]

name=yum

baseurl=file://$x

enabled=1

gpgcheck=0” > local.repo

echo  “清除重建缓存…..”

 yum clean all    &> /dev/null  && yum makecache fast   &> /dev/null

echo  “yum创建成功….”

rpm –qi $(rpm –qf $(どの mkdir))

可変出力

#名前=張三

#エコー $name

#エコー ${名前}

#エコー $意図

#エコー ${名前}ニーハオ

read -p "あなたの名前を入力してください: " name

$name をエコーする

変数

#!/bin/bash

#用户自动构建yum仓库脚本

read  -p “输入你的挂载点位置:” x



echo  “挂载光盘…..”

mkdir $x

mount /dev/cdrom  $x &> /dev/null

echo “创建仓库文件…..”

cd  /etc/yum.repos.d/

mkdir bak

mv *.repo bak

#创建yun文件

echo “[yum]

name=yum

baseurl=file://$x

enabled=1

gpgcheck=0” > local.repo

echo  “清除重建缓存…..”

 yum clean all    &> /dev/null  && yum makecache fast   &> /dev/null

echo  “yum创建成功….”

ユーザーインターフェース

 #!/bin/bash

echo “centos….

kernel….”

read –p “localhost login:”user

if [  $user   = “root”]

then

echo “欢迎登陆”

else

       echo “拜拜”

fi

シェルスクリプトアプリケーションの基本操作 


1. 状態テスト

1. テスト判定

1) 結果のタイプを決定する

本物

偽物

2) 判断文法

[root@centos01 ~]# test -d /boot && echo "YES"

テスト ブート ディレクトリには YES と表示されます

[root@centos01 ~]# [ -d /boot ] && echo "はい"

テスト ブート ディレクトリには YES と表示されます

3) 一般的なテストオプション

-d テストディレクトリ

-f テストファイル

-w 書き込み権限をテストします

-r 読み取り権限をテストします

-x 実行権限をテストします

-eはファイルディレクトリが存在するかどうかをテストします

[root@centos ~]# vim cd.sh

#!/bin/bash

[ -d /cd ] || mkdir /cd

[ -d /cd/パッケージ ] || /dev/cdrom /cd &> /dev/null をマウントします

2. 比較演算子

1) 一般的な比較演算子

gt は次より大きいです

未満です

geは以上です

leは以下です

eq は次と等しい

ne は次の値に等しくない

[root@centos ~]# vim num.sh

#!/bin/bash

read -p "数字を入力してください:" num

[ $(expr $num % 2) -eq 0 ] && echo "$num は偶数です" || echo "$num は基数です"

[root@centos ~]# sh num.sh

数字を入力してください: 123

123 は基数です

2) 比較演算子の基本的な使い方

[root@centos01 ~]# [ 10 -gt 5 ] && echo "YES"

5 より大きい 10 は「はい」と表示されます

[root@centos01 ~]# abc=`歴史 | トイレ -l`

[root@centos01 ~]# [ $abc -gt 100 ] && echo "はい"

履歴コマンドライン番号を抽出し、100 と比較し、100 より大きい場合は「yes」を表示します。

3. 文字列の比較

1) 文字列比較演算子

=: 文字列の内容が同じかどうか

!=: 文字列の内容が異なるかどうか

-z: 文字列が空かどうかを確認します

2) 文字列比較の適用、文字列には二重引用符を使用する必要があります

[root@centos01 ~]# [ "aaa" = "aaa" ] && echo "はい"

すべての aaa 文字が aaa 文字と等しいかどうかを判断します

[root@centos01 ~]# [ $LANG != "en.US" ] && echo "中国語はサポートされていません!!"

LANG 変数が en と等しくありません。US ディスプレイは中国語をサポートしていません

4. ロジックテスト

1) 論理テストの一般的な演算子

&&: And or を -a で表現すると、2 つの結果が true の場合に表示されます。

||: または、-o を使用して、2 つの判定結果が 1 つの条件を満たすだけで true として表示されることを示します。

!: いいえ、2 つの判定結果が成立しない場合は true です。

[root@centos ~]# vim cj.sh

#!/bin/bash

read -p "テストスコアを入力してください:" num

[ $num -ge 60 -a $num -le 100 ] && echo "試験に合格しました"  

または

[ $num -ge 60 ] &&  [  $num -le 100 ] && echo "試験に合格しました"

2) ロジックテストは簡単に使用できます

[root@centos01 ~]# [ -d /etc ] && [ -d /boot ] && echo "これはディレクトリです!!"

両方の結果が true の場合、表示されるのはディレクトリです。

[root@centos01 ~]# [ -d /etc ] || [ -d /ssss ] && echo "これはディレクトリです!!"

2 つの結果のうちの 1 つが true の場合、それはディレクトリとして表示されます。

2. 判断があれば

1. if判定の種類

1) 単一分岐

コマンドシーケンスを実行するための条件が満たされている

2)二分岐

条件が満たされたときに最初のコマンド シーケンスを実行します

条件が満たされない場合は、2 番目のコマンド シーケンスを実行します。

3) 複数の支店

条件が満たされたときに最初のコマンド シーケンスを実行します

条件が最初の条件を満たさず、2 番目の条件が満たされた場合、2 番目のコマンド シーケンスが実行されます。

2 番目の条件が満たされない場合は、最後の条件が実行され、デフォルトのコマンド シーケンスが実行されます。

2. 判定の場合は単一分岐

1) 一点if判定コマンド構造

if  [ 条件 ]

それから

コマンドシーケンスを実行する

フィ

2) ディレクトリが存在するかどうかを確認し、存在しない場合は自動的に作成され、存在する場合はスクリプトの実行を停止します。

#!/bin/bash

マウント = "/mnt/テスト"

もし [ !-d $マウント]

それから

        mkdir -p $mount

フィ

3) ディスク容量をテストする

[root@centos01 ~]# export aa=`df -Th | grep "/$" | awk '{print $5}' |awk –F “%” '{pring $1}'`

ディスクスペースを抽出する

[root@centos01 ~]# cat fdisk.sh

#!/bin/bash

if [ $aa -eq 73 ]

それから

echo "ディスクがいっぱいなのでデータを保存できません!!!"

フィ

[root@centos01 ~]#

データを保存できないことをユーザーに知らせるため、抽出されたディスク容量は 73G になります。

[root@centos ~]# vim ディスク.sh

#!/bin/bash

du=$(df | grep "/$" | awk '{print $5}' | awk -F'%' '{print $1}')

if [ $du -gt 3 ]

それから

          echo "超過を使用します"

フィ

3. 二分岐判定

1) 複数分岐コマンド構造

if  [ 条件 ]

それから

コマンドシーケンス 1 を実行します

それ以外

コマンドシーケンス 2 を実行します

フィ

1. httpd サービスが開始されているかどうか。

[root@centos ~]# vim httpd.sh

#!/bin/bash

netstat -lnpt | grep -q :80

もし[$? -eq0]

それから

       echo "Web サイト サービスが実行中です"

それ以外

       echo "サービスが終了しました。開始してください"

       systemctl httpd を開始します

フィ

[root@centos ~]# bash httpd.sh

2.バインドパッケージがインストールされているかどうかを確認します

[root@centos ~]# vim binding.sh

#!/bin/bash

rpm -q バインド &> /dev/null

もし[$? -eq0]

それから

        echo "パッケージはインストールされました"

それ以外

        echo "パッケージがインストールされていません。インストールしてください。"

        yum -y インストールバインド &> /dev/null

        [ $? -eq 0 ] && echo "ソフトウェアのインストールが成功しました"

フィ

[root@centos ~]# bash binding.sh

2) ホストが通信しているかどうかを確認します。

[root@centos01 ~]# cat ./ping.sh

#!/bin/bash

read -p "指定された IP アドレスを入力してください:" ping

ping -c 3 -i 0.2 -W 3 $ping &> /dev/null

もし[$? -eq0]

それから

echo "ホストは $ping UP です!!!!"

それ以外

echo "ホストは $ping DOWN です!!!!"

フィ

または

[root@centos ~]# vim ping.sh

#!/bin/bash

ping -c 3 -i 0.2 -W 3 $1 &> /dev/null

もし[$? -eq0]

それから

        エコー「ホスト $1 は起動しています」

それ以外

        エコー「ホスト $1 がダウンしています」

フィ

[root@centos ~]# chmod +x ping.sh

[root@centos ~]# ./ping.sh

[root@centos ~]# ./ping.sh 192.168.200.1

4. 多分岐if判定

1) 多分岐 if 判定の文法構造

 if 【条件判断】

それから

コマンドシーケンス 1 を実行します

エリフ[条件付き判断]

それから

     コマンドシーケンス 2 を実行します

それ以外

コマンドシーケンス 3 を実行します

2) マルチブランチ テスト スクリプトを作成する

スコアが適格であるかどうかを判断するための通常のステートメント - 抜け穴があります

#!/bin/bash

read -p "テストスコアの範囲を 1 ~ 100 点を入力してください:" test

if [ $test -ge 85 ] && [ $test -le 100 ]

それから

echo "$test ポイント、あなたは素晴らしく、試験で良い成績を収めました!!!"

elif [ $test -ge 70 ] && [ $test -le 84 ]

それから

echo "$test ポイント、試験に合格するには引き続き努力する必要があります!!!"

それ以外

        echo "$test ポイント、もう一度勉強する必要があります!!!"

フィ

 または

#!/bin/bash

read -p "テストスコアの範囲を 1 ~ 100 点を入力してください:" test

if [ $test -ge 0 -a $test -le 100 ]

それから

        if [ $test -ge 85 -a $test -le 100 ]

        それから

                echo "$test ポイント、あなたは素晴らしく、試験で良い成績を収めました!!!"

        elif [ $test -ge 70 -a $test -le 84 ]

        それから

                echo "$test ポイント、試験に合格するには引き続き努力する必要があります!!!"

        それ以外

                 echo "$test ポイント、もう一度勉強する必要があります!!!"

        フィ

それ以外

                echo 「スコアが間違っているので判定できません」

フィ

 最初はグー、じゃんけん

[root@centos ~]# vim games.sh

#!/bin/bash

echo 「これは (じゃんけん 1 ペーパー 2) の小さなゲームです。リラックスしてください:」

pc=$(expr $RANDOM % 3)

read -p "選択肢を入力してください:" user

if [ $pc -eq 0 -a $user -eq 2 ] || [ $pc -eq 1 -a $user -eq 0 ] || [ $pc -eq 2 -a $user -eq 1 ]

それから

        echo 「コンピューターの優勝おめでとうございます」

elif [ $pc -eq $user ]

それから

        エコー「描く」

それ以外

        エコー「負けた、また来い」

フィ

~      

 または

#!/bin/bash

echo 「これは (じゃんけん 1 ペーパー 2) の小さなゲームです。リラックスしてください:」

真実ながら

する

        pc=$(expr $RANDOM % 3)

        read -p "選択肢を入力してください:" user

        if [ $pc -eq 0 -a $user -eq 2 ] || [ $pc -eq 1 -a $user -eq 0 ] || [ $pc -eq 2 -a $user -eq 1 ]

        それから

                echo 「コンピューターの優勝おめでとうございます」

        elif [ $pc -eq $user ]

        それから

                エコー「描く」

        それ以外

                エコー「負けた、また来い」

        フィ

終わり

シェルスクリプトの適用


1. ループの基本的な使い方

1.forループ

1) for ループの文法構造

値リスト内の変数名の場合

する

コマンドシーケンス

終わり

2) forリストの定義

[root@centos01 ~]# 猫のユーザー名.txt

ボブ

トム

アリス

3) for ループを作成してユーザーをバッチで作成し、パスワードを 123456 に設定します。

#!/bin/bash

$(cat user.txt) の名前用

する

        ユーザー追加 $name

        エコー「123456」 | passwd --stdin $name

終わり

4) ユーザーを一括削​​除する

#!/bin/bash

$(cat user.txt) の名前用

する

       

ユーザーデル -r $name

終わり

5) for ループを使用して、ユーザーがアクセスしたいホストに ping を送信します。

#!/bin/bash

$(cat p.txt) の IP の場合

する

        ping -c 3 -i 0.2 -W 3 $ip &> /dev/null

        もし[$? -eq0]

        それから

                エコー「ホスト $ip は起動しています」

        それ以外

                エコー「ホスト$ipがダウンしています」

        フィ

終わり

[root@centos ~]# for i in {10..1};do echo $i;sleep 1;done

ラウンドロビンのルール

#!/bin/bash

{1..9} の私にとって

する

        {1..9} の j について

        する

                エコー $i $j

        終わり

終わり

九九

#!/bin/bash

{1..9} の私にとって

する

        for ((j=1;j<=$i;j++))

        する

                echo -n "${j}x${i}=$(($i*$j)) "

        終わり

        エコー

終わり

2. while ランダムループ

1) whileのコマンド構造

while [条件]

する

コマンドシーケンス

終わり

2) パスワードを 123456 に設定して、ランダムに 20 個のアカウントを作成します。

[root@centos01 ~]# cat aaa.sh

#!/bin/bash

i=1

while [ $i -le 20 ]

する

        userdel -r stu$i

        #useradd stu$i

        #エコー "123456" | passwd --stdin stu$i       

 させて++

終わり

試合時間

数字を推測してください

#!/bin/bash

echo 「これは製品の価格 (1 ~ 1000) を推測する小さなゲームです、推測してください」

pc=$(expr $RANDOM % 1000 + 1)

cs=0

真実ながら

する

        read -p "推定価格を入力してください:" int

        cs++ にしましょう

        if [ $int -gt $pc ]

        それから

                エコー「値段が高す​​ぎる」

        elif [ $int -eq $pc ]

        それから

                echo 「推測が正しかったことをおめでとうございます」

                echo "合計 $cs 回を推測しました"

                出口

        それ以外

                エコー「価格が安すぎる」

        フィ

終わり

ケースコントロールサービスの 2 つの基本的なアプリケーション

1. caseの構文形式

case 変数の値

モード1)

;;

モード2)

;;

*)

デフォルトのコマンドシーケンス

イーサック

2. vsftpd サービスを制御するスクリプトを作成するユースケース

[root@centos01 ~]# cat ./vsftpd.sh

#!/bin/bash

#chkconfig:35 80 21

#説明:vsftpd サーバー

ケース「$1」

始める)

echo "vsftpd サービスを開始しています [OK]"

;;

停止)

echo "vsftpd サービスを停止します [OK]"

;;

再起動)

echo "vsftpd サービスを再起動しています [OK]"

;;

*)

echo "使用法:$0{開始|停止|再起動}"

イーサック

[root@centos01 ~]#

例:

[root@centos ~]# vim /etc/init.d/file

 #!/bin/bash

ケース1ドル入り

作成する)

        /tmp/{1..100}.txt をタッチします

;;

消去)

        rm -rf /tmp/{1..100}.txt

;;

リスト)

        ls -l /tmp/{1..100}.txt

;;

*)

        echo "用法:$0{作成|削除|リスト}"

イーサック

:

#!/bin/bash

read -p "文字を入力してください:" str

$str の場合

[a-zA-Z])

        エコー「手紙」

;;

[0-9])

        エコー「数字」

;;

*)

        エコー「特殊記号」

イーサック

おすすめ

転載: blog.csdn.net/2302_77750172/article/details/131688585