從新手到系統管理員(三):深入探索Linux Bash指令碼程式設計世界
本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處
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
[
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]
你可以從這裡下載這個例子的程式碼。