웹사이트 검색

Linux 초보자가 쉘 프로그래밍을 배울 수 있는 5가지 쉘 스크립트 - 2부


무언가를 배우려면 실패할 것이라는 두려움 없이 그것을 해야 합니다. 나는 실용성을 믿으며 스크립팅 언어의 실제 세계로 여러분과 동행할 것입니다.

이 기사는 첫 번째 기사 Linux 셸 및 기본 셸 스크립팅 이해 – 1부의 확장으로, 여기서는 스크립팅에 대해 소개했으며 계속해서 이 기사에서 여러분을 실망시키지 않을 것입니다.

스크립트 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

Colorl.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: password라고도 불리는 패스키를 사용하여 파일을 암호화합니다. 이러한 학습 과정에서 실제 학습 과정이 그렇게 쉬울 수 있다고는 결코 생각하지 못했을 것입니다. 그렇다면 파일을 암호화한 후에 무엇이 필요할까요? 확실히! 파일을 해독하는 중입니다. 그리고 저는 여러분이 복호화 스크립트를 직접 작성하기를 바랍니다. 여러분을 중간에 두는 것이 아니니 걱정하지 마십시오. 단지 여러분이 이 글에서 뭔가를 얻기를 바랍니다.

참고: gpg -d filename.gpg > filename은 암호 해독 스크립트에서 구현해야 하는 항목입니다. 성공하면 댓글로 스크립트를 게시할 수 있고, 그렇지 않은 경우 나에게 대신 작성해 달라고 요청할 수 있습니다.

Encrypt.sh 다운로드

스크립트 4: 서버 활용도 확인

서버 활용도를 확인하는 것은 관리자의 중요한 업무 중 하나이며, 좋은 관리자는 일상 업무를 자동화하는 방법을 아는 사람입니다. 다음은 서버에 대한 많은 정보를 제공하는 스크립트입니다. 직접 확인해 보세요.

#!/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 파티션의 디스크 사용량이 허용된 최대값보다 클 때 이메일을 받는 것은 어떻습니까? 이 스크립트는 거의 수정하지 않고도 웹 관리자를 위한 생명을 구하는 스크립트입니다.

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'를 삭제하세요. 'mail' 명령어를 사용하여 메일을 확인할 수 있습니다.

Check-Disk-Space.sh 다운로드

스크립트 작성 및 프로그래밍은 경계를 넘어 필요에 따라 모든 것을 구현할 수 있습니다. 지금은 이것이 전부입니다. 다음 기사에서는 다양한 스크립팅 방법을 소개하겠습니다. 그때까지 시원하고 지켜봐 주시고, 즐기세요.