shell腳本

今天我將shell腳本的基本編寫語法學習心得與大家一起分享,請大家多多指點

腳本的作用使得我們的任務能夠成批量自動完成,而不用我們再一個個的手動執行,腳本的編寫語言有很多中,比如cc++c#perlshell等等,今天我們主要學習的就是shell腳本的編寫,而腳本的編寫是遵從一定的語言法則,下面我們就重點說明一下shell腳本的幾種常用語言:ifforcasewhileuntil

 

腳本中經常使用的比較變量:

字符串比較:

==:如果兩個字符串相等,則爲是

!=:如果兩個字符串不想等,則爲是

-n:如果字符串的長度大於零,則爲是

-z:如果字符串的長度等於零,則爲是

數字的比較:

-eq:兩個數字相等。則爲是

-ge$1大於等於$2,則爲是

-le$1小於等於$2,則爲是

-ne:兩個數字不想等,則爲是

-gt$1大於$2,則爲是

-lt$1小於$2,則爲是

文件比較:

-d:對象存在且是目錄,則爲是

-f:對象存在且是普通文件,則爲是

-L:對象存在且是連接文件,則爲是

-r:對象存在且有可讀權限,則爲是

-w:對象存在且有可寫權限,則爲是

-x:對象存在且有執行權限,則爲是

-s:對象存在且不是空文件,則爲是

!:對測試條件的否定

邏輯關係:

-a:邏輯與,優先級大於邏輯或

-o:邏輯或,優先級最小

!:邏輯非,優先級最高

常用的執行腳本命令:

# bash [options] 腳本名

-x 查看腳本執行的詳細信息;常用

 

單條件判斷:if

if語句一般使用在判斷性執行環境中,語句格式爲:

如果條件是正確的,就執行命令;否則執行其他,退出

單分支if語句:簡單的if語句,如果條件判斷正確則執行,否則什麼也不做;此時只能判斷單一的一個正確條件,腳本功能比較單一,不能完成複雜任務

if 判斷條件; then

statement

fi

雙分支if語句:如果條件判斷正確,則執行一,否則執行二,然後退出;此時只能對一個條件進行判斷執行,功能比較單一

if 判斷條件; then

statement1

else

statement2

fi

多分支if語句:如果條件一判斷正確則執行一,否則判斷條件二,正確執行二,以此類推,如果條件都不正確,則執行最後一個,然後退出;此時腳本功能比較完善,能夠應對諸多可能發生的情況,可以完成比較複雜的任務

if 判斷條件一; then

stament1

elif 判斷條件二; then

stament2

elif 判斷條件三; then

stament3

...........

else

stament*

fi

實例:一、如果文件test爲空,則輸入內容this is test file

# touch test

# vim te.sh

#!/bin/bash

#

HANG=`wc -c test | cut -d' ' -f1`

if [ $HANG -eq 0 ]; then

echo this is test file > test

fi

執行並查看結果:

此時腳本只能在文件test存在時才能判斷,且只能對test爲空文件時做出動作

二、判斷文件test是否存在,如果不存在,就創建並輸入內容;否則輸出文件已存在

#!/bin/bash

#

CUNZAI=`ls test &> /dev/null`

ZHUANGT=`echo $?`

if [ $ZHUANGT -eq 0 ]; then

echo "file exise"

else

touch test

echo "this is test file" > test

fi

執行並查看結果

此時腳本執行之後會先判斷文件test是否存在,如果存在則輸出已經存在,如果不存在則先創建此文件,然後再輸入內容;此時的腳本已經初步具備判斷能力

三、判斷腳本後邊跟的參數,如果爲-s則顯示指定類型的用戶,如果爲-h則顯示腳本用法,否則顯示未知參數

#!/bin/bash

#

if [ $1 == '-d' ]; then

  Userdel -r $2

elif [ $1 == '-D' ];then

  Userdel -r $2  

Elif [ $1 == -a ]; then

  Useradd $2

  `Echo $2 | passwd --stdin $2 &> /dev/null`

Elif [ $1 == -A ]; then

Useradd $2

`Echo $2 | passwd --stdin $2`

else

  Echo unknow choice

  exit 8

fi

此腳本執行時判斷如果第一個參數爲-d,則刪除給出的用戶;如果是-D,則刪除給出的用戶;如果是-a-A選項,則創建新用戶$2,並將新創建用戶的密碼更改爲自己的用戶名;如果都不是,就告訴用戶錯誤選項,並退出;此時腳本可以匹配多個選項並對應做出不同的動作,此時腳本已經可以滿足基本的需求

 

簡單循環體:for

For 語句一般使用在簡單的循環環境中,需要給出明確的循環體,語法格式爲:

For 變量 in 列表;do

要做的動作

Done

腳本執行之後,變量會在列表中取值並做出動作,然後依次遍歷列表,遍歷列表之後自動退出;而列表的生成有不同的方法,如

數字的列表可以直接使用數字表示即可:{1..100} 從一到一百,也可以使用命令`seq 100`,或者1 1 100,定義開始數字,每次加多少,結束數字;

命令的列表:直接將命令結果引用即可,反引號;

計算50以內4的倍數的和;此時如果使用if語句則非常麻煩,極易出錯,而是用for循環即可解決此問題;先考慮生成列表,4的倍數就是能被4整除的數,也可理解爲兩者之差是4的數,所以這個列表可以寫成:`seq 0 4 50`,執行腳本可以寫爲:

#!/bin/bash

#

declare-i I=0。。。。。。。。。。。。。。。。。。。declare聲明變量

declare -i SUM=0

for I in `seq 0 4 50`; do

let SUM=$[$SUM+$I]。。。。。。。。。。Let計算

done

echo this sum is $SUM

此時的執行結果會算出50以內4倍數的和,並將其輸出到屏幕上;

 

另一種使用for循環語句的語法:

#!/bin/bash

#

declare -i SUM=0

for ((I=1;I<=100;I++))

do

let SUM=$[$SUM+$I]

done

 

多條件判斷:case

if判斷相似,同樣需要手工輸入判斷條件,只是條件可以更多;case常用語法是:

case 變量 in

條件一)

命令一

;;

條件二)

命令二

;;

.....

esac

此時如果變量滿足條件一,則執行一,以雙分號結束;滿足條件二,則執行命令二,以此類推;到esac則腳本結束

#!/bin/bash

#

case $1 in

-a|--add)

useradd $2

echo $2 | passwd --stdin $2

;;

-d|--del)

userdel $2

;;

-h|--help)

echo Userage: -a|--add -d|--del -h|--help

;;

*)

echo Userage: -a|--add -d|--del -h|--help

exit 2

;;

esac

 

 

正條件循環:while

while循環需要一定的進入條件,並不是直接進入循環,開始條件是:“如果命令執行狀態爲正確,則開始進入循環體,否則退出”;如

#!/bin/bash

#

declare -i SUM=0

read -p qing shu ru yi ge shu:  SR

while [ $SR -le 100 ]; do

let SUM+=$SR

let SR++

done

echo this sum is $SUM

 

非條件循環:until

until循環同樣需要一定的進入條件,開始條件和while剛好相反:“如果命令執行狀態爲錯誤,則開始進入循環體,否則退出”;如

#!/bin/bash

#

declare -i SUM=0

read -p qing shu ru yi ge shu:  SR

until [ $SR -gt 100 ]; do

let SUM+=$SR

let SR++

done

echo this sum is $SUM

 

 

Shell腳本學習尚淺,以後會有更多更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章