Shell編程入門入篇

一、Shell變量 主要有本地變量和環境變量。

1、本地變量  -- 在用戶現有運行的腳本中使用

1) 定義本地變量      格式: variable-name=value

例子:[root@jike1 /root]# LOCALTEST="test"

[root@jike1 /root]# echo $LOCALTEST            (注意:echo $LOCALTEST 和 echo ${LOCALTEST}的效果是一樣的)

(在變量名前加$, 可以取得此變量的值,使用echo命令可以顯示變量的值)

2) 顯示本地變量      格式: set

例子:[root@chinaitlab root]# set

3) 清除本地變量     格式:unset  variable-name

例如:[root@jike1 /root]# unset LOCALTEST

此時再執行echo $LOCALTEST將看不到變量LOCALTEST的輸出。

 

 

2、環境變量 -- 在所有的子進程中使用

1) 定義環境變量     格式: export  variable-name=value (與本地變量的定義相比,多了一個export關鍵字)

例子:[root@chinaitlab /root]# export DOMAIN="chinaitlab.com"

[root@ chinaitlab shell]# vi testenv.sh

#!/bin/bash                        #表示用bash來解析腳本

#testenv.sh

echo $DOMAIN

[root@chinaitlab shell]# chmod +x testenv.sh

[root@chinaitlab shell]# ./testenv.sh

chinaitlab.com

2) 顯示環境變量     格式: env     (本地變量的顯示使用set,環境變量的顯示使用env)

例子: [root@chinaitlab test]# env

3) 清除環境變量     格式:unset  variable-name     (用法與本地變量相同,都使用unset)

例子: [root@chinaitlab shell]# unset DOMAIN

此時再執行./testenv.sh將看不到變量DOMAIN的輸出。

3、其它變量

1) 位置變量     $0,$1,$2,$3……$9

2) 只讀變量  readonly variable

注意:只讀變量不能被清除和改變其值,所以要謹慎使用。

3) 特殊變量     $#,$?,

(表示當前進程的PID)…… 

二、運算符和表達式 

 

 

1、運算符是對計算機發的指令,運算符類型有: 

算術運算符(+、-、*、/) 

按位運算符(~、>、&、|、^) 

邏輯運算符(&&、||、 > 、= = 、>=) 

 

 

2、表達式是運算符和運算對象的組合體。 

1) $[]:可以接受不同基數的數字的表達式 

echo $[10+1]                            (輸出:11) 

echo "$[2+3],$HOME"            (輸出:5,/root) 

echo $[2>1]            (輸出:16,4) 

echo $[2>3],$[3>2]                (輸出:0,1 表達式爲false時輸出0,爲true時輸出1) 

2) 字符表達式:直接書寫,採用單引號,雙引號引起來。 

echo " $HOME,That is your root directory."     (輸出:/root,That is your root directory.) 

echo ' $HOME,That is your root directory. '     (輸出:$HOME,That is your root directory.) 

單引號和雙引號的區別在於:單引號是原樣顯示,雙引號則顯示出變量的值。 

3) test表達式 

三、控制結構 

1、if語句 

例:  #!/bin/bash 

#if.sh 

if [ "10" -lt "12" ]            #注意:if和[之間,[和"10"之間,"12"和]都有空格,如果不加空格,會出現語法錯誤 

then 

echo "Yes,10 is less than 12" 

fi 

2、case語句 

例:  #!/bin/bash 

#case.sh 

echo -n "Enter a start or stop:" 

read ANS 

case $ANS in 

start) 

echo "You select start" 

;; 

stop) 

echo "You select stop" 

;; 

*) 

echo "`basename $0`: You select is not between start and stop" >&2 

#注意:>和&2之間沒有空格,>&2 表示將顯示輸出到標準輸出(一般是屏幕)上 

exit; 

;; 

esac 

3、for循環語句 

格式:   for 變量名 in 列表 

do 

命令1 

命令2 

... ... 

done 

4、until循環語句 

格式:   until 條件 

do 

命令1 

命令2 

... ... 

done 

5、while循環語句 

格式:   while 命令 

do 

命令1 

break 

命令2 

continue 

命令3 

... ... 

done 

四、輸入輸出 

 

 

1、幾個重要的工具 

1) echo 

例:echo -n "Enter a number from 1 to 2:"    (-n 表示不換行,此時光標停留在行尾) 

2) read 

例:read ANS     (表示將用戶的輸入存放到變量ANS中) 

3) cat    (顯示文件內容) 

4) 管道( | )    (一個程序的輸出作爲另一個程序的輸入) 

例:ls -l | grep "d" 

5) 文件重定向( >和>> ) 

例:ls -l > /tmp/a.txt    (將輸出的結果重寫到a.txt這個文件中) 

ls -l >> /tmp/a.txt   (將輸出的結果追加到a.txt這個文件中,常用於記錄日誌) 

6) 標準輸入( $0 )、標準輸出( $1 )和標準錯誤( $2 ) 

採用文件描述符($0、$1、$2)來定義。 

2、實例:readme.sh 

#!/bin/bash 

#readname.sh 

echo -n "First Name: " 

read firstname 

echo -n "Last Name: " 

read lastname subname 

echo -e "Your First Name is :${firstname}\n "             #加了-e表示將\n解析爲轉義字符 

echo -e "Your Last Name is :${lastname}\n " 

echo -e "Your Subname is :${subname}\n " 

echo "Your First Name is :${firstname}\n " >>firstname.txt        #這行沒加-e,因此在輸出中會原樣顯示\n 

echo  "Your Last Name is :${lastname}\n " >lastname.txt 

echo  "Your Subname is :${subname}\n " >&1 

五、文本過濾 

 

 

1、正則表達式    (就是模式匹配) 

2、find    (查找文件) 

例:find ./ -name "*.txt" -print 

3、grep    (查找字符) 

例:grep "[5-8][6-9][0-3]" access_log 

4、awk    (把一系列數據分域,即分成列) 

例:awk '{print $1"\t"$4}' access_log 

5、sed    (對數據進行查找和替換) 

例:sed  -n 's/chinaitlab/hello/p' myfile.txt    (將myfile.txt文件中的chinaitlab替換成hello,並打印到屏幕上來,s表示替換,p表示打印。如果加上重定向符就可以將替換後的 內容輸出到一個文件中去。) 

6、sort    (排序) 

例:sort ip.txt 

7、uniq    (顯示這一列是唯一的還是不唯一的,可以唯一化) 

例:uniq ip.txt 

8、split    (可以對文件進行分割) 

例:split myfile.txt 

9、實例:kill_process.sh 

#!/bin/bash 

#kill_process.sh 

current_PID=

 

ps -aux|grep "/usr/sbin/sshd"|grep -v "grep"|awk '{print $2}'>/tmp/${current_PID}.txt

for pid in `cat /tmp/${current_PID}.txt`

do

{

echo "kill -9 $pid"

kill -9 $pid

}

done

rm -f /tmp/${current_PID}.txt

六、Shell函數

1、定義函數有兩種格式,分別爲:

函數名()

{

命令1

... ...

}

function 函數名()

{

... ...

}

2、實例:func.sh

#!/bin/bash

#func.sh

# Source function library.            # /etc/rc.d/init.d/functions中存放了大量已經寫好的函數

. /etc/rc.d/init.d/functions            # 引入/etc/rc.d/init.d/functions中的函數,相當於其它語言中的include

function hello ()

{

echo "Hello,$1 today is `date`"

}

echo "now going to the function hello"

hello chinaitlab

echo "back from the function"

原文:http://blog.csdn.net/mndscc/article/details/50057771

發佈了46 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章