ウェブサイト検索

Linux 初心者がシェル プログラミングを学ぶための 5 つのシェル スクリプト - パート II


何かを学ぶには、失敗を恐れずにそれを行う必要があります。私は実用性を信じているので、皆さんをスクリプト言語の実践的な世界に連れて行っていきます。

この記事は、最初の記事「Linux シェルと基本的なシェル スクリプトについて理解する – パート I」の拡張版であり、そこではスクリプトの概要を説明し、この記事でも読者の失望を招くことはありません。

スクリプト 1: 特別なパターンを描画する

#!/bin/bash
MAX_NO=0
echo -n "Enter Number between (5 to 9) : "
read MAX_NO
if ! [ $MAX_NO -ge 5 -a $MAX_NO -le 9 ] ; then
   echo "WTF... I ask to enter number between 5 and 9, Try Again"
   exit 1
fi
clear
for (( i=1; i<=MAX_NO; i++ )) do     for (( s=MAX_NO; s>=i; s-- ))
    do
       echo -n " "
    done
    for (( j=1; j<=i;  j++ ))     do      echo -n " ."      done     echo "" done ###### Second stage ###################### for (( i=MAX_NO; i>=1; i-- ))
do
    for (( s=i; s<=MAX_NO; s++ ))
    do
       echo -n " "
    done
    for (( j=1; j<=i;  j++ ))
    do
     echo -n " ."
    done
    echo ""
done
echo -e "\n\n\t\t\t Whenever you need help, linux-console.net is always there"

上記の「キーワード」のほとんどはあなたも知っているものであり、そのほとんどは一目瞭然です。たとえば、MAX は変数の最大値を設定します。for はループであり、ループが指定された入力値に対して有効になるまで、ループ内のすべてのものが繰り返し実行されます。

サンプル出力
[root@tecmint ~]# chmod 755 Special_Pattern.sh
[root@tecmint ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
       .
      . .
     . . .
    . . . .
   . . . . .
  . . . . . .
  . . . . . .
   . . . . .
    . . . .
     . . .
      . .
       .

                         Whenever you need help, linux-console.net is always there

プログラミング言語に少しでも慣れていれば、上記のスクリプトを学ぶのは難しくありません。たとえ計算、プログラミング、Linux に慣れていないとしても、それほど難しくありません。

Special_Pattern.sh をダウンロード

スクリプト 2: カラフルなスクリプトの作成

Linux は無色で退屈だ、と誰が言ったでしょうか。以下のコードを任意の [ドット] sh に保存し、実行可能にして実行してください。それがどうだったかを私に伝えるのを忘れないでください。何が達成できるかを考えて、それをどこかに実装してください。

#!/bin/bash
clear 
echo -e "33[1m Hello World"
bold effect
echo -e "33[5m Blink"
blink effect
echo -e "33[0m Hello World"
back to normal
echo -e "33[31m Hello World"
Red color
echo -e "33[32m Hello World"
Green color
echo -e "33[33m Hello World"
See remaining on screen
echo -e "33[34m Hello World"
echo -e "33[35m Hello World"
echo -e "33[36m Hello World"
echo -e -n "33[0m"
back to normal
echo -e "33[41m Hello World"
echo -e "33[42m Hello World"
echo -e "33[43m Hello World"
echo -e "33[44m Hello World"
echo -e "33[45m Hello World"
echo -e "33[46m Hello World"
echo -e "33[0m Hello World"

: 今はカラーコードについて気にする必要はありません。あなたにとって重要なものは、徐々にあなたの舌に現れるでしょう。

警告: お使いの端末には点滅機能がない可能性があります。

サンプル出力
[root@tecmint ~]# chmod 755 Colorfull.sh
[root@tecmint ~]# ./Colorfull.sh

Hello World
Blink
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World

カラフル.sh をダウンロード

スクリプト 3: ファイル/ディレクトリの暗号化

このスクリプトはファイルを暗号化します (覚えていますか?ディレクトリ/ドライバー/…。Linuxではすべてがファイルとして扱われます) >)。上記のスクリプトの現在の制限は、TAB を使用した名前の自動補完をサポートしていないことです。また、スクリプトと暗号化するファイルを同じフォルダーに配置する必要があります。必要に応じて、yum または apt パッケージを使用して「pinentry-gui 」をインストールする必要がある場合があります。

[root@midstage ~]# yum install pinentry-gui
[root@midstage ~]# apt-get install pinentry-gui

Encrypt.sh」というファイルを作成し、次のスクリプトを配置し、実行可能にして、図のように実行します。

#!/bin/bash
echo "Welcome, I am ready to encrypt a file/folder for you"
echo "currently I have a limitation, Place me to thh same folder, where a file to be 
encrypted is present"
echo "Enter the Exact File Name with extension"
read file;
gpg -c $file
echo "I have encrypted the file successfully..."
echo "Now I will be removing the original file"
rm -rf $file

サンプル出力

[root@tecmint ~]# chmod 755 Encrypt.sh
[root@tecmint ~]# ./Encrypt.sh

Welcome, I am ready to encrypt a file/folder for you
currently I have a limitation, Place me to the same folder, where a file to be

encrypted is present
Enter the Exact File Name with extension

package.xml

                                                   ┌─────────────────────────────────────────────────────┐
                                                   │ Enter passphrase                                    │
                                                   │                                                     │
                                                   │                                                     │
                                                   │ Passphrase *******_________________________________ │
                                                   │                                                     │
                                                   │       <OK>                             <Cancel>     │
                                                   └─────────────────────────────────────────────────────┘

Please re-enter this passphrase

                                                   ┌─────────────────────────────────────────────────────┐
                                                   │ Please re-enter this passphrase                     │
                                                   │                                                     │
                                                   │ Passphrase ********________________________________ │
                                                   │                                                     │
                                                   │       <OK>                             <Cancel>     │
                                                   └─────────────────────────────────────────────────────┘

I have encrypted the file successfully...
Now I will be removing the original file
</pre>

gpg -c : パスキー、別名パスワードを使用してファイルを暗号化します。この学習プロセスでは、実際の学習プロセスがこれほど簡単になるとは思ってもみなかったでしょう。ファイルを暗号化した後は何が必要でしょうか?明らかに!ファイルを復号化しています。そして、学習者や読者であるあなたには、復号化スクリプトを自分で書いてほしいと思っています。心配しないでください。私はあなたを途中に置いているわけではありません。この記事から何かを得てほしいだけです。

: gpg -d filename.gpg > filename は、復号化スクリプトに実装する必要があるものです。成功した場合はスクリプトをコメントに投稿できますが、失敗した場合は私に書いてもらうよう依頼してください。

暗号化.shをダウンロード

スクリプト 4: サーバー使用率の確認

サーバーの使用状況を確認することは管理者の重要なタスクの 1 つであり、優れた管理者は日常のタスクを自動化する方法を知っている管理者です。以下は、サーバーに関する多くの情報を提供するスクリプトです。自分で確認してください。

#!/bin/bash
    date;
    echo "uptime:"
    uptime
    echo "Currently connected:"
    w
    echo "--------------------"
    echo "Last logins:"
    last -a |head -3
    echo "--------------------"
    echo "Disk and memory usage:"
    df -h | xargs | awk '{print "Free/total disk: " $11 " / " $9}'
    free -m | xargs | awk '{print "Free/total memory: " $17 " / " $8 " MB"}'
    echo "--------------------"
    start_log=`head -1 /var/log/messages |cut -c 1-12`
    oom=`grep -ci kill /var/log/messages`
    echo -n "OOM errors since $start_log :" $oom
    echo ""
    echo "--------------------"
    echo "Utilization and most expensive processes:"
    top -b |head -3
    echo
	top -b |head -10 |tail -4
    echo "--------------------"
    echo "Open TCP ports:"
    nmap -p- -T4 127.0.0.1
    echo "--------------------"
    echo "Current connections:"
    ss -s
    echo "--------------------"
    echo "processes:"
    ps auxf --width=200
    echo "--------------------"
    echo "vmstat:"
    vmstat 1 5
サンプル出力
[root@tecmint ~]# chmod 755 Server-Health.sh
[root@tecmint ~]# ./Server-Health.sh

Tue Jul 16 22:01:06 IST 2013
uptime:
 22:01:06 up 174 days,  4:42,  1 user,  load average: 0.36, 0.25, 0.18
Currently connected:
 22:01:06 up 174 days,  4:42,  1 user,  load average: 0.36, 0.25, 0.18
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
tecmint   pts/0    116.72.134.162   21:48    0.00s  0.03s  0.03s sshd: tecmint [priv]
--------------------
Last logins:
tecmint   pts/0        Tue Jul 16 21:48   still logged in    116.72.134.162
tecmint   pts/0        Tue Jul 16 21:24 - 21:43  (00:19)     116.72.134.162
--------------------
Disk and memory usage:
Free/total disk: 292G / 457G
Free/total memory: 3510 / 3838 MB
--------------------
OOM errors since Jul 14 03:37 : 0
--------------------
Utilization and most expensive processes:
top - 22:01:07 up 174 days,  4:42,  1 user,  load average: 0.36, 0.25, 0.18
Tasks: 149 total,   1 running, 148 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.1%us,  0.0%sy,  0.0%ni, 99.3%id,  0.6%wa,  0.0%hi,  0.0%si,  0.0%st

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    1 root      20   0  3788 1128  932 S  0.0  0.0   0:32.94 init
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd
    3 root      RT   0     0    0    0 S  0.0  0.0   0:14.07 migration/0

: ターミナル自体に出力を与えるスクリプトを提供しましたが、将来の参照のために出力をファイルに取得してみてはいかがでしょうか。リダイレクト演算子を使用して実装します。

  1. >‘ : リダイレクト演算子によりファイルが作成され、ファイルが存在する場合は内容が上書きされます。
  2. >>‘ : >> を使用すると、情報を置き換えるのではなく、追加することになります。
  3. >>」は「>」と比較して安全です

Server-Health.sh をダウンロード

スクリプト 5: ディスク容量をチェックして電子メール アラートを送信する

パーティション PART のディスク使用量が許容最大値を超えた場合に電子メールを受信する方法はどうでしょうか。これは、Web 管理者向けの救命スクリプトであり、ほとんど変更を加えません。

MAX=95
[email 
PART=sda1
USE=`df -h |grep $PART | awk '{ print $5 }' | cut -d'%' -f1`
if [ $USE -gt $MAX ]; then
  echo "Percent used: $USE" | mail -s "Running out of disk space" $EMAIL
fi

: ユーザー名の「USER」を削除してください。 「メール」コマンドを使用してメールを確認できます。

Check-Disk-Space.sh をダウンロード

スクリプトの作成とプログラミングは限界を超えており、必要に応じてあらゆるものを実装できます。今のところはここまでです。次回の記事では、いくつかの異なるスクリプトを紹介する予定です。それまでは冷静になって楽しんでください。