天天看點

linux下shell程式設計基礎

shell中最基礎的東西像history,檔案/數字等測試,如何執行一個腳本等,這次主要是介紹一些稍微深入的内容。

比如test測試,if條件語句,for循環,while循環,case語句,自定義函數等,希望對大家有幫助,大家多提意見。。。。。

一.條件測試操作

1. test指令

linux下shell程式設計基礎

 用途:測試特定的表達式是否成立,當條件成立時,指令執行後的傳回值為0,否則為其他數值

linux下shell程式設計基礎

 格式:test 條件表達式

[ 條件表達式 ]

常見的測試類型 : 測試檔案狀态 字元串比較 整數值比較 邏輯測試

1) 測試檔案狀态

linux下shell程式設計基礎

 格式:[ 操作符 檔案或目錄 ]

c.常用的測試操作符

linux下shell程式設計基礎

 -d:測試是否為目錄(Directory)

linux下shell程式設計基礎

 -e:測試目錄或檔案是否存在(Exist)

linux下shell程式設計基礎

 -f:測試是否為檔案(File)

linux下shell程式設計基礎

 -r:測試目前使用者是否有權限讀取(Read)

linux下shell程式設計基礎

 -w:測試目前使用者是否有權限寫入(Write)

linux下shell程式設計基礎

 -x:測試目前使用者是否可執行(Excute)該檔案

linux下shell程式設計基礎

 -L:測試是否為符号連接配接(Link)檔案

[ -e /etc/sysconfig/ ] && echo "yes"

2) 整數值比較

 格式:[ 整數1 操作符 整數2 ]

常用的測試操作符

linux下shell程式設計基礎

 -eq:等于(Equal)

linux下shell程式設計基礎

 -ne:不等于(Not Equal)

linux下shell程式設計基礎

 -gt:大于(Greater Than)

linux下shell程式設計基礎

 -lt:小于(Lesser Than)

linux下shell程式設計基礎

 -le:小于或等于(Lesser or Equal)

linux下shell程式設計基礎

 -ge:大于或等于(Greater or Equal)

3) 字元串比較

linux下shell程式設計基礎

 格式:[ 字元串1 = 字元串2 ]

[ 字元串1 != 字元串2 ]

[ -z 字元串 ]

linux下shell程式設計基礎

 常用的測試操作符

linux下shell程式設計基礎

 =:字元串内容相同

linux下shell程式設計基礎

 !=:字元串内容不同,! 号表示相反的意思

linux下shell程式設計基礎

 -z:字元串内容為空

4) 邏輯測試

a) 格式:[ 表達式1 ] 操作符 [ 表達式2 ] ...

linux下shell程式設計基礎

 -a或&&:邏輯與,“而且”的意思

p 前後兩個表達式都成立時整個測試結果才為真,否則為假

linux下shell程式設計基礎

 -o或||:邏輯或,“或者”的意思

二.if條件語句

1.單分支:

如果/boot分區的空間使用超過80%,輸出報警資訊

#!/bin/bash

RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `

if [ $RATE -gt 80 ]

then

echo "Warning,DISK is full!"

fi

2. 雙分支

當“條件成立”、“條件不成立”時執行不同操作

linux下shell程式設計基礎

 例子:判斷sshd是否在運作,若已運作則輸出提示資訊,否則重新啟動sshd服務

service sshd status &> /dev/null

if [ $? -eq 0 ]

echo "mysqld service is running."

else

/etc/init.d/sshd restart

3. 多分支

三.for循環語句

根據變量的不同取值,重複執行一組指令操作

例子1:依次輸出3條文字資訊,包括一天中的“Morning”、“Noon”、“Evening”字串

for TM in "Morning" "Noon" "Evening"

do

echo "The $TM of the day."

done

例子2:

DIR="/opt"

LMT=100

ValidUsers=`grep "/bin/bash" /etc/passwd | cut -d ":" -f 1`

for UserName in $ValidUsers

Num=`find $DIR -user $UserName | wc -l`

if [ $Num -gt $LMT ] ; then

echo "$UserName have $Num files."

四.while循環語句

linux下shell程式設計基礎

 應用示例1:

linux下shell程式設計基礎

 批量添加20個系統使用者帳号, 使用者名依次為“stu1”、“stu2”、……、“stu20”

i=1

while [ $i -le 20 ]

useradd stu$i

echo "123456" | passwd --stdin stu$i &> /dev/null

i=`expr $i + 1`

linux下shell程式設計基礎

 應用示例2:删除剛建立的20個帳戶

userdel -r stu$i

五.case多重分支語句

根據變量的不同取值,分别執行不同的指令操作

echo -n "please inset some keys:"

read AA

case $AA in

[a-z]|[A-Z])

echo "they are letters"

;;

[0-9])

echo "they are number"

*)

echo "they are other words"

esac

六.until循環語句

until語句根據條件執行重複操作,與while循環正好相反

七.shift遷移語句

用于遷移位置變量,将 $1~$9 依次向左傳遞

linux下shell程式設計基礎

 例如,若目前腳本程式獲得的位置變量如下:

p $1=file1、$2=file2、$3=file3、$4=file4

linux下shell程式設計基礎

 則執行一次shift指令後,各位置變量為:

p $1=file2、$2=file3、$3=file4

linux下shell程式設計基礎

 再次執行shift指令後,各位置變量為:

p $1=file3、$2=file4

Result=0

while [ $# -gt 0 ]

Result=`expr $Result + $1`

shift

echo "The sum is : $Result"

八.循環控制語句

1. break語句:在for、while、until等循環語句中,用于跳出目前所在的循環體,執行循環體後的語句

2. continue:在for、while、until等循環語句中,用于跳過循環體内餘下的語句,重新判斷條件以便執行下一次循環

九.Shell函數應用

Shell函數概述

linux下shell程式設計基礎

 在編寫Shell腳本程式時,将一些需要重複使用的指令操作,定義為公共使用的語句塊,即可稱為函數

linux下shell程式設計基礎

 合理使用Shell函數,可以使腳本内容更加簡潔,增強程式的易讀性,提高執行效率

1. 定義新的函數,兩種方法:

方法一:

function 函數名 {

指令序列

}

方法二:

函數名() {

2. 例子

linux下shell程式設計基礎

 在腳本中定義一個加法函數,用于計算2個整數的和

linux下shell程式設計基礎

 調用該函數計算(12+34)、(56+78)的和

adder() {

echo `expr $1 + $2`

adder 12 34

adder 56 789

繼續閱讀