《shell編程入門(mén)資料》由會(huì)員分享,可在線閱讀,更多相關(guān)《shell編程入門(mén)資料(25頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。,單擊此處添加文本,第二級(jí),第三級(jí),第四級(jí),第五級(jí),單擊此處添加標(biāo)題,Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。,Copyright 2011 by ShenZhen Zyeeda Information Technology Co.,Ltd。,單擊此處添加標(biāo)題,單擊此處添加文本,第二級(jí),第三級(jí),第四級(jí),第五級(jí),單擊此處添加標(biāo)題,shell編程入門(mén)資料,目錄,課程大綱,shell
2、編程語(yǔ)法,shell腳本調(diào)試,shell應(yīng)用實(shí)例,一個(gè)簡(jiǎn)單的shell程序,第一個(gè)簡(jiǎn)單的shell程序,$cat example,#!/bin/sh,#This is to show what a example looks like.,echo Our first example,echo#This inserts an empty line in output.,echo We are currently in the following directory.,/bin/pwd,echo,echo This directory contains the following files,/b
3、in/ls,一個(gè)簡(jiǎn)單的shell程序,shell結(jié)構(gòu),1.#!指定執(zhí)行腳本的shell,2.#注釋行,3.命令和控制結(jié)構(gòu),創(chuàng)建shell程序的步驟:,第一步:創(chuàng)建一個(gè)包含命令行和控制結(jié)構(gòu)的文件。,第二步:修改這個(gè)文件的權(quán)限使它可以執(zhí)行。使用chmod u+x,第三步:執(zhí)行./example(也可以使用sh example執(zhí)行),Shell變量,Shell變量,變量:是shell傳遞數(shù)據(jù)的一種方法,用來(lái)代表每個(gè)取值的符號(hào)名。,Shell有兩類(lèi)變量:臨時(shí)變量和永久變量,臨時(shí)變量,是shell程序內(nèi)部定義的,其使用范圍僅限于定義它的程序,對(duì)其他程序不可見(jiàn)。包括:用戶(hù)自定義變量、位置變量。永久變量是環(huán)
4、境變量,其值不隨shell腳本的執(zhí)行結(jié)束而消失。,永久變量,echo$PATH 查看環(huán)境變量,echo$LANG 查看語(yǔ)言環(huán)境 空為英文,用戶(hù)自定義變量,用戶(hù)自定義變量,用戶(hù)定義的變量由字母或下劃線開(kāi)頭,由字母、數(shù)字或下劃線組成,并且大小寫(xiě)字母意義不同。變量名長(zhǎng)度沒(méi)有限制。,在使用變量值時(shí),要在變量名前加上前綴$,設(shè)置變量:習(xí)慣上用大寫(xiě)字母來(lái)命名變量。變量只能以字母表中的字符開(kāi)頭,不能用數(shù)字。,變量賦值:賦值號(hào)“=”兩邊應(yīng)沒(méi)有空格。,定義時(shí)賦值,如NUM=1,將一個(gè)命令的執(zhí)行結(jié)果賦值給變量,如:TIME=date,將一個(gè)變量賦值給另一個(gè)變量,如:A=$B,使用echo命令查看變量值。如:ech
5、o$A,設(shè)置和使用變量,使用單引號(hào)和雙引號(hào)的區(qū)別,ABC=time is$DATE 這里會(huì)打印時(shí)間,ABC=time is$DATE 這里會(huì)把$DATE打印出來(lái),set 可以查看系統(tǒng)里面已經(jīng)設(shè)置的變量,unset NAME 可以刪除一個(gè)變量,位置變量和特殊變量,Shell解釋執(zhí)行用戶(hù)命令時(shí),將命令行的第一個(gè)部分作為命令名,其他部分作為參數(shù)。由出現(xiàn)在命令行上的位置確定的參數(shù)稱(chēng)為位置參數(shù),。例如:,ls-l file1 file2 file3,$0 這個(gè)程序的文件名,$n 這個(gè)程序的第N個(gè)參數(shù)值,特殊變量,$*這個(gè)程序的所有參數(shù),$#這個(gè)程序參數(shù)的個(gè)數(shù),$這個(gè)程序的PID,$!執(zhí)行上一個(gè)后臺(tái)命令的
6、PID,$?執(zhí)行上一個(gè)命令的返回值 如果為0 說(shuō)明上個(gè)命令執(zhí)行成功,文件備份例子,請(qǐng)看例子,#!/bin/sh,#backup files by date,DATE=/bin/date+%Y%m%d,/bin/tar-cf/backup/$1.$DATE.tar$1 /dev/null 2/backup/$1.bak.log,/bin/gzip/backup/$1.$DATE.tar,if$?-eq 0,then,echo$1$DATE backup successfully /backup/$1.bak.log,else,echo ERROR:failure$1$DATE backup!/b
7、ackup/$1.bak.log,fi,shell命令,read命令:從鍵盤(pán)讀入數(shù)據(jù),賦給變量,舉例:#!/bin/sh,read first second,echo the first parameter is$first,echo the second parameter is$second,調(diào)試執(zhí)行 sh-x read 100 200,expr 命令,expr 命令,shell變量的算術(shù)運(yùn)算 對(duì)整數(shù)型變量進(jìn)行運(yùn)算,expr 3+5 請(qǐng)注意中間是有空格的,乘法注意啦 expr 3*10,復(fù)雜運(yùn)算:expr expr 5+7/$var4,將結(jié)果賦值:var5=expr$var1/$var2,
8、例如:,#!/bin/bash,a=6,b=4,value1=expr$a-$b,echo the value is$value1,變量測(cè)試語(yǔ)句,變量測(cè)試語(yǔ)句:用于測(cè)試變量是否相等、是否為空、文件類(lèi)型等,格式:test 測(cè)試條件,測(cè)試范圍:整數(shù)、字符串、文件,test str1=str2 測(cè)試是否相等,test str1!=str2,不相等,test-e file 是否存在,test-f file 是否為文件,test-d file 是否為目錄,test int1-gt int2 int1是否大于等于int2,apache是否啟動(dòng),例子 web服務(wù)器是否啟動(dòng),如果沒(méi)有則啟動(dòng),輸入 pgrep
9、httpd 什么信息都沒(méi)有 說(shuō)明apache沒(méi)有啟動(dòng),啟動(dòng):/etc/rc.d/init.d/httpd start,關(guān)閉:pkill httpd,主要腳本,web=/usr/bin/pgrep httpd,if$web=,then,/etc/rc.d/init.d/httpd start,fi,流程控制語(yǔ)句,if else語(yǔ)句,if,-d$file_name,then,echo,is de,elif -f$file_name,then,echo,is file,else,echo,exit 0,#正常退出,fi,-a:邏輯與 -o:邏輯或,for循環(huán),看看就知道,for DAY in sun
10、day monday tuesday,do,echo the day is:$DAY,done,awk 命令應(yīng)用,awk-F 域分隔符 命令 分段提取,不叫F 默認(rèn)為空格,如 awk-F:,$3=0 print$1/etc/passwd,awk-F:,length($2)=0 print$1/etc/shadow,踢出用戶(hù),#!/bin/sh,#The script to kill logined user.,username=$1,/bin/ps aux|/bin/grep$username|/bin/awk print$2 /tmp/temp.pid,killid=cat/tmp/temp
11、.pid,for PID in$killid,do,/bin/kill-9$PID 2/dev/null,done,select 循環(huán)語(yǔ)句,case控制語(yǔ)句,select var in Linux Unix Windows,do,break,done,echo You have selected$var,read op,case$op in,C),echo,;,D),echo,;,*),echo invalide selection,esac,while 語(yǔ)句,while -d/etc,do,ls-ld/etc,break,done,例子:1-10 每個(gè)數(shù)的平方,num=1,while$num
12、-le 10,do SUM=expr$num*$num,echo$SUM,num=expr$num+1,done,批量添加用戶(hù),添加用戶(hù),echo 123456|/usr/bin/passwd-stdin shedon 把密碼123456 導(dǎo)入 shedon用戶(hù),echo please input username:,read name,echo please input number:,read num,n=1,while$n-le$num,do/uer/sbin/useradd$name$n,n=expr$n+1,done,刪除用戶(hù)/usr/sbin/userdel-r$name$sum,
13、until 語(yǔ)句,until 語(yǔ)句,判斷是否可執(zhí)行 肯定是假咯,until -x/etc/inittab,do,/bin/ls-l/etc/inittab,exit 0,done,break 和 continue 跟java里面差不多,|邏輯或,.|.,shift指定,shift指定 每執(zhí)行一次參數(shù)向前移一位,eg:累加求和,if$#-le 0,then,echo Not enough parameters,exit 0,fi,sum=0,while$#-gt 0,do,sum=expr$sum+$1,shift,done,echo$sum,函數(shù)應(yīng)用,函數(shù)應(yīng)用 使可讀性更強(qiáng),函數(shù)中的變量均為全
14、局變量,沒(méi)有局部變量,HELP(),echo Usage:sh function$1$2$3,if$#-ne 3,then,HELP,else,echo,fi,調(diào)試,調(diào)試,sh-x script,這將執(zhí)行該腳本并顯示所有變量的值,sh-n script,不執(zhí)行腳本只是檢查語(yǔ)法的模式,將返回所有語(yǔ)法錯(cuò)誤 如果什么都沒(méi)有 則說(shuō)明格式?jīng)]問(wèn)題,執(zhí)行腳本應(yīng)有權(quán)限,su-test 切換到test 用戶(hù),chmod o-rx/script 將script其他人去掉rx權(quán)限,sh 腳本,必須,1.對(duì)腳本有r權(quán)限 2.對(duì)腳本所在目錄有rx權(quán)限,逐行讀取 再比較,for file in/bin/cat/tmp/setuid.check,do,/bin/grep$file/backup/setuid.list /dev/null,if$?!=0,then,echo$file isnt in list,fi,done,地址:,深圳市羅湖區(qū)深南東路2105號(hào)中建大廈701室,電話:,+86-0755-26966586,傳真:,+86-0755-26966586-802,網(wǎng)站:,郵編:,518001,THANKS,