1. 程式人生 > >從新手到系統管理員(二):Linux新手學習Shell指令碼程式設計的五個例子

從新手到系統管理員(二):Linux新手學習Shell指令碼程式設計的五個例子

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處

Shell-Scripting-2

例子一:繪製特殊圖形

[code language=”bash”]
#!/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=i; s– ))
do
echo -n " "
done
for (( j=1; j=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, Tecmint.com is always there"
[/code]

你應該不會被上述例子中的“關鍵字”困擾了,很多都是你熟悉的,或者從它們的名字可以猜出它們的意思,如“max”設定某個變數的最大值,“for”是一個迴圈。

輸出結果:

[code language=”bash”]
[[email protected] ~]# chmod 755 Special_Pattern.sh
[[email protected] ~]# ./Special_Pattern.sh
Enter Number between (5 to 9) : 6
.
. .
. . .
. . . .
. . . . .
. . . . . .
. . . . . .
. . . . .
. . . .
. . .
. .
.

Whenever you need help, Tecmint.com is always there
[/code]

如果你有其它語言的程式設計基礎,那麼學習上面的指令碼對你來說應該很容易。即使你是計算機方面的新手,這個學習過程也不會太難。

你可以從這裡下載這個例子的程式碼。

例子二:五顏六色的指令碼

Linux終端也是支援五顏六色的,請看下面的指令碼:

[code language=”bash”]
#!/bin/bash

clear
echo -e "&#092;&#048;33[1m Hello World"
# bold effect
echo -e "&#092;&#048;33[5m Blink"
# blink effect
echo -e "&#092;&#048;33[0m Hello World"
# back to noraml

echo -e "&#092;&#048;33[31m Hello World"
# Red color
echo -e "&#092;&#048;33[32m Hello World"
# Green color
echo -e "&#092;&#048;33[33m Hello World"
# See remaing on screen
echo -e "&#092;&#048;33[34m Hello World"
echo -e "&#092;&#048;33[35m Hello World"
echo -e "&#092;&#048;33[36m Hello World"

echo -e -n "&#092;&#048;33[0m"
# back to noraml
echo -e "&#092;&#048;33[41m Hello World"
echo -e "&#092;&#048;33[42m Hello World"
echo -e "&#092;&#048;33[43m Hello World"
echo -e "&#092;&#048;33[44m Hello World"
echo -e "&#092;&#048;33[45m Hello World"
echo -e "&#092;&#048;33[46m Hello World"

echo -e "&#092;&#048;33[0m Hello World"
[/code]

輸出結果:

colorful_script

你可以對上面的列子舉一反三,把它用到你自己的指令碼中去。

你可以從這裡下載這個例子的程式碼。

例子三:加密檔案/目錄

下面的例子演示瞭如何加密一個份檔案或者資料夾。目前的這個版本的指令碼有一些侷限,例如你必須把它和你要加密的檔案/目錄放到同一個資料夾下面。另外,你可能需要安裝“pinentry-gui”。在Fedora下安裝“pinentry-gui”的命令是:

[code language=”bash”]
[[email protected] ~]# yum install pinentry-gui
[/code]

在Ubuntu/Debian下安裝“pinentry-gui”的命令是:

[code language=”bash”]
[[email protected] ~]# apt-get install pinentry-gui
[/code]

建立一個指令碼“Encrypt.sh”,將下面的程式碼複製進去。你也可以從這裡下載這個指令碼。

[code language=”bash”]
#!/bin/bash
echo "Welcome, I am ready to encrypt a file/folder for you"
echo "currently I have a limitation, Place me to the 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 sucessfully…"
echo "Now I will be removing the original file"
rm -rf $file
[/code]

輸出結果:

[code language=”bash”]
[[email protected] ~]# chmod 755 Encrypt.sh
[[email protected] ~]# ./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 _________________________________

Please re-enter this passphrase

Passphrase _________________________________

I have encrypted the file successfully…
Now I will be removing the original file
[/code]

程式碼說明:

gpg -c: 這個命令使用aka來加密檔案。 在你需要的時候,你需要對加密的檔案進行解密。這裡我們不給出具體的程式碼了,你可以自己嘗試著寫出來。提示:使用命令 gpg -d filename.gpg > filename 可以解密一份檔案。

例子四:檢視伺服器利用率

檢視伺服器的利用率是管理員的一份重要的日常工作。聰明的管理員是知道如何是這份任務自動化的。下面的這份指令碼會抓取伺服器的很多資訊,快快試試吧!

[code language=”bash”]
#!/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
[/code]

輸出結果:

[code language=”bash”]
[[email protected] ~]# chmod 755 Server-Health.sh
[[email protected] ~]# ./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 [email protected] 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
[/code]

你可以從這裡下載這個例子的程式碼。

例子五:檢視硬碟使用情況及傳送提示郵件

下面的這個例子展示了當硬碟的使用空間超出了預期設定的值時,如果通過指令碼來發送提示郵件。

[code language=”bash”]
MAX=95
[email protected]
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
[/code]

說明:將上述指令碼中的“USER”替換成你的使用者名稱。你可以通過命令“mail”來檢視你的郵件。

你可以從這裡下載這個例子的程式碼。