1. 程式人生 > >從新手到系統管理員(三):深入探索Linux Bash指令碼程式設計世界

從新手到系統管理員(三):深入探索Linux Bash指令碼程式設計世界

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

Shell-Scripting-Part-3

bash關鍵字

[code language=”bash”]
! esac select { }
c fi then [[
do for until ]]
done function while elif
if time else in
[/code]

與其它語言不同,bash允許將關鍵字用於變數的命名,雖然這樣會降低指令碼的可讀性。為了保持指令碼的可讀性,程式設計師們應該避免這樣子做。

命令在指令碼中的執行方式是$(命令)。為了保證命令可以正確被執行,你或許應該包含命令的絕對路徑,如$(/bin/date)

你可以通過“whereis”來查詢一個命令的絕對路徑,如 whereis date

[code language=”bash”]
[[email protected] /]# whereis date
date: /bin/date /usr/share/man/man1/date.1.gz
[/code]

切換目錄

這個指令碼的作用是從當前目錄向上切換N層。

[code language=”bash”]
#! /bin/bash
LEVEL=$1
for ((i = 1; i <= LEVEL; i++))
do
CDIR=../$CDIR
done
cd $CDIR
echo "You are in: "$PWD
exec /bin/bash
[/code]

將上面的程式碼儲存成“up.sh”,並賦予可執行的許可權(chmod 755 up.sh)。

./up.sh 2 從當前目錄向上切換2層。
./up.sh 4 從當前目錄向上切換4層。

輸出結果:

[code language=”bash”]
[[email protected] /]# chmod 755 up
[

[email protected] /]# ./up.sh 2
You are in: /

[[email protected] /]# ./up.sh 4
You are in: /

[[email protected] /]#
[/code]

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

隨機生成目錄或檔案

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

echo "Hello $USER";
echo "$(uptime)" >> "$(date)".txt
echo "Your File is being saved to $(pwd)"
[/code]

這個指令碼看起來簡單,但其背後包含的東西並不簡單。
echo:列印包含在其後的引號中的任何東西。
$:引導一個變數。
>>:重定向符號。

上面的指令碼將update的輸出結果儲存到一個檔案中,這個檔案的名稱是以當前的系統時間命名的。

輸出結果:

[code language=”bash”]
[[email protected] /]# ./randomfile.sh
Hello server
Your File is being saved to /home/server/Desktop
[/code]

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

收集網路資訊

這個指令碼可以收集網路伺服器的資訊。因為這個指令碼的行數比較多,這裡就不列出來了。你可以從後面的連結中下載整個指令碼。

注意:或許在執行這個指令碼的時候,你需要安裝lsb-core包。你可以使用apt(Ubuntu或者Debian)或者yum(Fedora)來安裝。

輸出結果:

[code language=”bash”]
[[email protected] /]# ./collectnetworkinfo.sh

The Network Configuration Info Written To network.20-07-13.info.txt.
Please email this file to [email protected]_provider.com. ktop
[/code]

你可以更改指令碼中的郵件,以便將結果傳送到你的郵箱。

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

將大寫字母轉換成小寫字母

這個指令碼可以將一個檔案中的大寫字母全部轉換成小寫,並儲存到檔案“small.txt”中。

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

echo -n "Enter File Name : "
read fileName

if [ ! -f $fileName ]; then
echo "Filename $fileName does not exists"
exit 1
fi

tr ‘[A-Z]’ ‘[a-z]’ < $fileName >> small.txt
[/code]

輸出結果:

[code language=”bash”]
[[email protected] /]# ./convertlowercase.sh
Enter File Name : a.txt

Initial File:
A
B
C
D
E
F
G
H
I
J
K

[/code]

檔案“small.txt”中包含的輸出結果:

[code language=”bash”]
a
b
c
d
e
f
g
h
i
j
k

[/code]

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

簡易計算器

[code language=”bash”]
#! /bin/bash
clear
sum=0
i="y"

echo " Enter one no."
read n1
echo "Enter second no."
read n2
while [ $i = "y" ]
do
echo "1.Addition"
echo "2.Subtraction"
echo "3.Multiplication"
echo "4.Division"
echo "Enter your choice"
read ch
case $ch in
1)sum=`expr $n1 + $n2`
echo "Sum ="$sum;;
2)sum=`expr $n1 – $n2`
echo "Sub = "$sum;;
3)sum=`expr $n1 \* $n2`
echo "Mul = "$sum;;
4)sum=`expr $n1 / $n2`
echo "Div = "$sum;;
*)echo "Invalid choice";;
esac
echo "Do u want to continue (y/n)) ?"
read i
if [ $i != "y" ]
then
exit
fi
done
[/code]

輸出結果:

[code language=”bash”]
[[email protected] /]# ./simplecalc.sh

Enter one no.
12
Enter second no.
14
1.Addition
2.Subtraction
3.Multiplication
4.Division
Enter your choice
1
Sum =26
Do u want to continue (y/n)) ?
y
1.Addition
2.Subtraction
3.Multiplication
4.Division
Enter your choice
3
mul = 14812
Do u want to continue (y/n)) ?
n
[/code]

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