編寫shell管理腳本_第1頁(yè)
編寫shell管理腳本_第2頁(yè)
編寫shell管理腳本_第3頁(yè)
編寫shell管理腳本_第4頁(yè)
編寫shell管理腳本_第5頁(yè)
已閱讀5頁(yè),還剩153頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

編寫shell管理腳本:

shell的作用:

Shell是一個(gè)特殊的應(yīng)用程序,它介于操作系統(tǒng)內(nèi)核與用戶之間,負(fù)責(zé)接收用戶輸入的操作

指令并進(jìn)行解釋,將需要執(zhí)行的操作傳遞給內(nèi)核執(zhí)行。

Shell程序有很多種,windows里的cmd.exe也是shell的一種。

在linux/unix操作系統(tǒng)中,能夠使用的shell程序有很多種,常見(jiàn)的shell如下:

Bsh:早期的unixshell程序,實(shí)現(xiàn)了最基本的命令解釋其功能。

Csh:使用C語(yǔ)言的語(yǔ)法風(fēng)格,更加適合為用戶提供命令交互操作。

Ksh:結(jié)合了bsh和csh兩者的功能優(yōu)勢(shì)。

Bash;是bsh的升級(jí)替代品,目前大多數(shù)linux默認(rèn)的shell程序。

Zsh:更多的基于交互式操作系統(tǒng)考慮設(shè)計(jì)。

Shell環(huán)境的切換:

通過(guò)配置文件/etc/shells可以了解系統(tǒng)所支持的shell程序的路徑。

查看當(dāng)前l(fā)inux系統(tǒng)中能夠使用的shell程序的列表:

[root@localhost~]#cat/etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh

[root@localhost

有一部分shell程序?qū)嶋H上是其他shell程序的符號(hào)鏈接文件:

[root@test~]#Is-I/bin/*sh

-rwxr-xr-x.1rootroot938832Jul182013/bin/bash

Irwxrwxrwx.1rootroot4Jun2422:11/bin/csh->tcsh(tcsh是csh的兼容升級(jí)版本)

-rwxr-xr-x.1rootroot109672Oct172012/bin/dash

Irwxrwxrwx.1rootroot4Jun2422:05/bin/sh->bash

-rwxr-xr-x.1rootroot387328Feb222013/bin/tcsh

[root@test

1.臨時(shí)切換到新的shell環(huán)境:

直接輸入其他shell程序的名稱即可切換到新的shell環(huán)境,返回原來(lái)的shell可執(zhí)行exit

命令:

[root@testtcsh

[root@test~]#

查看當(dāng)前用戶所用的shell:

[root@enscript]#echo$SHELL

/bin/bash

[root@enscript]#

[root@test^]#echo$0(并不是所有shell都支持)

tcsh

[root@test~]#

[root@testexit

exit

[root@test~]#echo$0

-bash

[root@test~]#

2.更改用戶自己的登陸shell:

用戶登錄shell信息記錄在/etc/passwd文件中。用戶可以用chsh命令進(jìn)行修改:

[root@localhostgrep"root"/etc/passwd

root:x:Q:0:root:/root:/bin/bash

operators:11:0:operator:/root:/sbin/nologin

[root@localhost~]#

普通用戶更改自己的shell方法:

使用dwzhang用戶登錄,更改自己的shell為tcsh:

[dwzhang@test~]$echo$0

-bash

[dwzhang@test~]$chsh

Changingshellfordwzhang.

Password:

Newshell[/bin/bash]:/bin/tcsh

Shellchanged.

[dwzhang@test~]$echo$0

-bash

[dwzhang@test~]$grepdwzhang/etc/passwd

dwzhang:x:500:500::/home/dwzhang:/bin/tcsh

[dwzhang@test~]$

重新連接:

[dwzhang@test~]$echo$0

-tcsh

[dwzhang@test~]$

管理員root賬戶更改shell:

管理員直接vi編輯/etc/passwd,直接更改用戶shell.

用命令usermod進(jìn)行更改:

[root@localhost~]#usermod-s/bin/bashdwzhangl

bash問(wèn)題:

考試題:如何查看centoslinux系統(tǒng)默認(rèn)的shell?

[root@testecho$SHELL

/bin/bash

[root@test

查看shell版本:

[root@testbash-version

shell程序在運(yùn)維工作中的作用地位?

shell腳本很擅長(zhǎng)處理純文本類型的數(shù)據(jù),而linux中幾乎所有的配置文件,日志文件都是純

文本類型的文件。貼近系統(tǒng)層的操作,shell是最佳。

shell腳本語(yǔ)言的種類:

在unix和linux中主要有兩大類shell:

bourneshell(包括sh,ksh,bash)

cshell(包括csh,tcsh)

bash是最常用的,也是linux默認(rèn)的shell解釋器。

常用的開(kāi)發(fā)腳本語(yǔ)言:

php:網(wǎng)頁(yè)程序,主要用來(lái)做web程序。

perl:強(qiáng)大,語(yǔ)法復(fù)雜。

python:新興的語(yǔ)言,語(yǔ)法簡(jiǎn)潔。

sh和bash的區(qū)別:

sh是bash的軟鏈接:

[root@testIs-I/bin/sh

Irwxrwxrwx.1rootroot4Jun2422:05/bin/sh->bash

[root@test

Bash的常用功能:

1.命令歷史

(1)使用歷史命令

可用方向鍵上來(lái)使用執(zhí)行過(guò)的命令。

⑵查看或修改歷史命令列表

命令history默認(rèn)情況下可以為用戶保存最多1000條歷史命令,若要更改需修改/etc/profile

文件中的“HISTSIZE=1000”實(shí)現(xiàn)。

[root@localhostvi/etc/profile

HISTSIZE=1000

[root@localhost

為特定用戶調(diào)整歷史用戶命令:

[dwzhang@test~]$vi.bash_profile

exportHISTSIZE=20(添加這一行)

[dwzhang@test~]$history|wc-I

76

重新登錄:

[dwzhang@test~]$history|wc-I

20

[dwzhang@test~]$

清除歷史命令:

[root@localhost~]#history-c

2.命令別名:

查看系統(tǒng)已設(shè)置的別名:

[root@localhost~]#alias

aliascp='cp-i'

aliasl.='ls-d.*-color=auto'

aliasll='ls-I-color=auto'

aliasls='ls-color=auto'

aliasmv='mv-i'

aliasrm='rm-i'

aliaswhich='alias|/usr/bin/which-tty-only-read-alias-show-dot-show-tilde'

[root@localhost^]#

設(shè)置別名命令:(重啟后失效)(長(zhǎng)期更改應(yīng)更改文件.bashrc)

基本形式:alias別名實(shí)際命令’

取消設(shè)置別名:

命令unalias

Unalias別名名稱

[root@localhostunaliasrm

取消當(dāng)前系統(tǒng)所有設(shè)置的命令別名:

[root@localhostunalias-a

標(biāo)準(zhǔn)輸出重定向:

是將命令輸出結(jié)果定向(保存)到指定的文件中,而不是直接顯示在顯示器的屏幕上。

輸出重定向使用符號(hào):

符號(hào)>:如果指定的文件不存在,則會(huì)建立新文件,結(jié)果保存到該文件中。

如果該文件存在,則清空文件內(nèi)容并保存結(jié)果到該文件。

[root@localhostidzhangl>idzhangl.txt

[root@localhostIs

anaconda-ks.cfgidzhangl.txtinstall.loginstall.log.syslog公共的模板視頻圖片

文檔下載音樂(lè)桌面

[root@localhostcatidzhangl.txt

uid=500(zhangl)gid=500(zhangl)組=500(zhangl)

[root@localhost~]#

符號(hào)”:可以將結(jié)果追加到指定文件末尾進(jìn)行保存,而不覆蓋文件的原有內(nèi)容。如果想把多

個(gè)命令輸出結(jié)果保存在一個(gè)文件中,可以使用此命令。

[root@localhostidzhang2?idzhangl.txt

[root@localhostcatidzhangl.txt

uid=500(zhangl)gid=500(zhangl)組=500(zhangl)

uid=501(zhang2)gid=501(zhang2)組=501(zhang2)

[root@localhost~]#

標(biāo)準(zhǔn)輸入重定向:

是將命令中接收輸入的途徑由默認(rèn)的鍵盤更改為指定的文件。

使用輸入重定向?qū)⑹挂恍┙换ナ讲僮鬟^(guò)程可以通過(guò)讀取文件來(lái)完成。

比如為用戶設(shè)置密碼的過(guò)程需要交互,比如安裝vmwaretools等。

為用戶設(shè)置密碼,結(jié)合-stdin命令和〈重定向符,則可自動(dòng)讀取文件設(shè)置密碼。省略啦交互

的過(guò)程。

[root@localhostvipw.txt

[root@localhostcatpw.txt

lqaz2wsx!@

[root@localhostpasswd-stdinzhang3<pw.txt

passwd:未知的用戶名稱'zhang3'o

[root@localhostuseraddzhang3

[root@localhostpasswd-stdinzhang3<pw.txt

標(biāo)準(zhǔn)錯(cuò)誤重定向:

就是將執(zhí)行命令過(guò)程中出現(xiàn)的錯(cuò)誤信息(如選項(xiàng)參數(shù)錯(cuò)誤等)重新定向保存到指定文件,而

不是直接顯示在屏幕上。

使用操作符2>o其中2是錯(cuò)誤文件的編號(hào)。2>>:不覆蓋舊的文件。

[root@localhost~]#helpIs

bash:help:nohelptopicsmatch'Is'.Try'helphelp'or'man-kIs1or'infoIs'.

[root@localhosthelpIs2>err.txt

[root@localhost~]#caterr.txt

bash:help:nohelptopicsmatch'Is'.Try'helphelp'or'man-kIs'or'infoIs'.

[root@localhost~]#

在實(shí)際應(yīng)用中,錯(cuò)誤重定向主要是提供以下用途:

1.在調(diào)試程序時(shí),收集錯(cuò)誤信息。

2.使用shell腳本程序時(shí),將錯(cuò)誤重定向到指定文件中。

當(dāng)命令執(zhí)行結(jié)果中同時(shí)包含標(biāo)準(zhǔn)輸出(正常執(zhí)行)和錯(cuò)誤輸出的內(nèi)容時(shí),可以同時(shí)用〉,2>

將信息分別重定向到不同的文件。也可以用&>操作符將兩種輸出內(nèi)容重定向到同一個(gè)文件

中。

管道操作:

在bash環(huán)境中,管道操作作為不同命令之間的協(xié)同工作提供了一種機(jī)制。位于管道“|”左

側(cè)的命令輸出結(jié)果,將作為右側(cè)命令的輸入,同一行命令中可以依次使用多個(gè)管道。

輸入/輸出重定向、管道

程序的默認(rèn)輸入設(shè)備,叫標(biāo)準(zhǔn)輸入,stdin,鍵盤01

程序的默認(rèn)輸出設(shè)備,叫標(biāo)準(zhǔn)輸出,stdout,minitor顯示器。2

程序的默認(rèn)錯(cuò)誤信息輸出設(shè)備,標(biāo)準(zhǔn)錯(cuò)誤輸出,stderr,minitor。3

輸出重定向:

>,大于號(hào)表示。

COMMAND>FILE,覆蓋輸出,沖掉原來(lái)的內(nèi)容。

[root@localhostIs/>/tmp/test.out

[root@localhostIs/tmp/test.out

/tmp/test.out

[root@localhost~]#

[root@localhostpwd>aa

[root@localhostcataa

/root

[root@localhost

可以用命令關(guān)掉輸出重定向這個(gè)功能:

命令:set-C(關(guān)閉輸出重定向。set+C開(kāi)啟,>|強(qiáng)行覆蓋,-C無(wú)效,大C)

[root@localhostset-C

[root@localhostset+C

[root@localhost^]#ls/>|aa(強(qiáng)行覆蓋)

COMMAND?FILE,追加輸出。

>>,兩個(gè)大于號(hào)。

[root@localhostcataa

/root

[root@localhost~]#Is/?aa

[root@localhostcataa

/root

bin

boot

dev..............................

[root@localhost

/dev/null的意義

數(shù)據(jù)黑洞,送進(jìn)去的數(shù)據(jù)丟棄,把不想要的輸出信息丟棄到/dev/null中。這里單個(gè)大于號(hào)

或追加輸出都無(wú)所謂了。

[root@localhostdate

FriSep1211:12:01CST2014

[root@localhost~]#date>/dev/null《丟棄輸出內(nèi)容,只想看命令是否成功)

[root@localhost^]#echo$?(查看輸入是否成功)

0

[root@localhost

輸入重定向:

<,小于號(hào)。

COMMAND<FILE

是將命令中接收輸入的途徑由默認(rèn)的鍵盤更改為指定的文件。

使用輸入重定向?qū)⑹挂恍┙换ナ讲僮鬟^(guò)程可以通過(guò)讀取文件來(lái)完成。

比如為用戶設(shè)置密碼的過(guò)程需要交互,比如安裝vmwaretools等。

為用戶設(shè)置密碼,結(jié)合-stdin命令和〈重定向符,則可自動(dòng)讀取文件設(shè)置密碼。省略啦交互

的過(guò)程。

[root@localhost~]#vipw.txt

[root@localhost~]#catpw.txt

lqaz2wsx!@

[root@localhostpasswd-stdinzhang3<pw.txt

passwd:未知的用戶名稱'zhang3'c

[root@localhostuseraddzhang3

[root@localhostpasswd-stdinzhang3<pw.txt

??兩個(gè)小于號(hào):

COMMAND?,文件結(jié)尾標(biāo)示符,(出現(xiàn)此標(biāo)示即結(jié)束)

例子:把hellozhang

helloda

hellowei一次寫入文件中。

方法1:一行一行追加

[root@localhost~]#echo"hellozhang',>testl

[root@localhost~]#echo"helloda"?testl

[root@localhost~]#echo"hellowei"?testl

[root@localhost~]#cattestl

hellozhang

helloda

hellowei

[root@localhost^]#

方法2:利用?e和\n下一行功能

[root@localhostecho-e"hellozhang\nhelloda\nhellowei">test2

[root@localhost~]#cattest2

hellozhang

helloda

hellowei

[root@localhost~]#

方法3:用<<兩個(gè)小于號(hào)

[root@localhost~]#cat?test3?eof(輸入eof結(jié)束)

>hellozhang

>helloda

>hellowei

>eof(遇到eof結(jié)束)

[root@localhostcattest3

hellozhang

helloda

hellowei

[root@localhost~]#

<<用在腳本中:

[root@localhost~]#vimtest4.sh

#!/bin/bash

cat?eof

whatdoyouwanttoeat?

l.shaoji

2.longxia

3.dazhaxie

eof

[root@localhostbashtest4.sh

whatdoyouwanttoeat?

l.shaoji

2.longxia

3.dazhaxie

[root@localhost

錯(cuò)誤輸出:

就算重定向一個(gè)命令,如果命令是錯(cuò)誤的,也是沒(méi)有重定向。

例子:

[root@localhostIls/etc>testl

-bash:Ils:commandnotfound

[root@localhost^]#

2>:

把錯(cuò)誤信息追加到文件:

[root@localhostIls/etc2>testl

[root@localhostcattestl

-bash:Ils:commandnotfound

[root@localhost~]#

正確或錯(cuò)誤都重定向:

COMMAND>FILE2>&1

COMMAND>FILE12>FILE2(把對(duì)的輸出到FILE1文件中,錯(cuò)誤輸入到FILE2中)

COMMAND&>FILE(無(wú)論對(duì)錯(cuò)都輸出到文件中)

管道:

把第一個(gè)命令結(jié)果送給第二個(gè)命令。

COMMAND1|COMMAND2|......................

[root@localhostecho"welcomezhangdawei"

welcomezhangdawei

[root@localhost^]#echo"welcomezhangdawei"|tr'a-z''A-Z'(用大寫字母顯示)

WELCOMEZHANGDAWEI

[root@localhost~]#echo"welcomezhangdawei"|cut-d''-f2(只顯示第二個(gè)字符)

zhangdawei

[root@localhost~]#echo"welcomezhangdawei"|cut-d''-fl

welcome

[root@localhostREC='echo"welcomezhangdawei"|cut-d''-fl'

[root@localhost~]#echo$REC

welcome

[root@localhost~]#

顯示/etc下文件大寫顯示:

[root@localhostIs/etc|tr'a-z''A-Z*|less

[root@localhostlog]#pwd

/var/log

[root@localhostlog]#

[root@localhostlog]#file'Is/var/log'

anaconda.ifcfg.log:ASCIItext

anaconda.log:ASCIIEnglishtext

[root@localhostlog]#file'Is/var/log'|tr-d'1(tr-d',刪除空格字符)

anaconda.ifcfg.log:ASCIItext

anaconda.log:ASCIIEnglishtext

[root@localhostlog]#file'Is/var/log'|sort(排序)

anaconda.ifcfg.log:ASCIItext

anaconda.log:ASCIIEnglishtext

[root@localhostlog]#file'Is/var/log'|cut-d:-f2(顯示第二個(gè)字符)

ASCIItext

ASCIIEnglishtext

[root@localhostlog]#file'Is/var/log'|cut-d:-f2|tr-d11|sort-u(sort-u去掉重復(fù)的選項(xiàng))

ASCIIC++programtext,withverylonglines

ASCIIEnglishtext

想顯示命令并且保存一份命令結(jié)果:

tee命令

COMMAND|teefile|COMMAND

[root@localhostlog]#Is/etc|teetest51查看/etc并把結(jié)果保存到test5文件中)

Shell變量應(yīng)用:

用于保存系統(tǒng)和用戶需要特定參數(shù),而且這些參數(shù)可以根據(jù)用戶的設(shè)定或系統(tǒng)環(huán)境的變化而

相應(yīng)變化。

常見(jiàn)的shell變量類型:用戶自定義變量(本地變量),環(huán)境變量(全局變量),預(yù)定義變量,

位置變量。

用戶自定義變量:

是由系統(tǒng)用戶自己定義的變量,只在用戶自己的shell環(huán)境中有效,又稱為本地變量。

1.定義新的變量

格式:變量名=變量值

新建一個(gè)名為“DAY”的變量,初始內(nèi)容設(shè)置為"Sunday"

[root@localhost~]#DAY=Sunday

[root@localhost~]#

2.查看和引用變量的值

通過(guò)在變量名前加“$”,可以引用一個(gè)變量的內(nèi)容。需要在終端中輸出變量?jī)?nèi)容,可以

使用echo命令。

查看變量DAY的內(nèi)容,比較使用$和不使用的區(qū)別:

[root@localhost~]#DAY=Sunday

[root@localhost~]#echoDAY(錯(cuò)誤用法,直接顯示輸入字符)

DAY

[root@localhost~]#echo$DAY(弓I用DAY變量的內(nèi)容)

Sunday

[root@localhost

當(dāng)變量名稱和緊跟著其后的其他字符相渾濁時(shí),需要加{}大括號(hào),將變量名包圍起來(lái)。

[root@localhost~]#DAY=Sunday

[root@localhost~]#echo$DAYmoring(錯(cuò)誤用法,顯示空行)

[root@localhostecho${DAY}moring(正確引用DAY變量的內(nèi)容)

Sundaymoring

[root@localhost~]#

[root@testjintian=wensday

[root@test~]#echo$jintian

wensday

[root@testechojintianshi${jintian}(注意$要放在中括號(hào)外面${jintian})

jintianshiwensday

[root@test~]#

這種變量的方式是直接定義變量?jī)?nèi)容,內(nèi)容一般為簡(jiǎn)單連續(xù)的數(shù)字,字符串,路徑名等。

3.為變量賦值的常用方法:

上面說(shuō)的在=號(hào)后面直接指定變量?jī)?nèi)容是為變量賦值的基本方法,除此之外,比較常用

的幾種變量賦值操作包括:雙引號(hào),單引號(hào),反撇號(hào),read命令。

雙引號(hào)(”〃)

使用雙引號(hào)時(shí),可以再雙引號(hào)的范圍內(nèi)使用$符號(hào)來(lái)引用其他變量的值。

確認(rèn)變量DAY的內(nèi)容,并使用雙引號(hào)為TODAY變量值"todayis$DAY":

[root@localhostecho$DAY

Sunday

[root@localhosttoday="todayis$DAY"

[root@localhost~]#echo$today

todayisSunday

[root@localhost~]#

這種變量的方式是通過(guò)雙引號(hào)定義變量,特點(diǎn)是輸出變量時(shí)引號(hào)里的變量會(huì)經(jīng)過(guò)解析后輸

出的變量?jī)?nèi)容,不是把引號(hào)內(nèi)容輸出,適合于字符串中附帶有變量的內(nèi)容。

單引號(hào)(“)

使用單引號(hào)時(shí),將不可以在單引號(hào)范圍內(nèi)引用其他變量的值,$將會(huì)被當(dāng)成普通字符。

確認(rèn)變量的內(nèi)容DAY,并使用單引號(hào)為today變量賦值弋。dayis$DAY"

[root@localhost~]#echo$DAY

Sunday

[root@localhosttoday='todayis$DAY'

[root@localhost~]#echo$today

todayis$DAY

[root@localhost^]#

這種變量的方式是通過(guò)單引號(hào)定義變量,特點(diǎn)是單引號(hào)里面是什么就輸出什么,比較適合

定義顯示純字符串。

例子:

[root@test3=

[root@testb='192.168?l.2'

[root@testc=,,"

[root@testecho$a

[root@test~]#echo$b

[root@test~]#echo$c

[root@test~]#

[root@testa=-$a

[root@testb='-$a'

[root@testc=H-$a"

[root@test**]#echo"a=$a"

3=-

[root@test~]#echo,,b=$b"

b=-$a

[root@test~]#echo"c=${c}"

c=--

[root@test~]#

對(duì)于不連續(xù)的字符串定義要用雙引號(hào),否則系統(tǒng)提示沒(méi)有這個(gè)命令:

[root@testa="bcd"

[root@testecho$a

bed

[root@test~]#d=fdg

-bash:d:commandnotfound

[root@test

反撇號(hào)(,、)

使用反撇號(hào)時(shí),可以將執(zhí)行的特定命令的輸出結(jié)果賦給變量,反撇號(hào)內(nèi)包含的字串必須是能

夠執(zhí)行的命令,執(zhí)行后會(huì)用輸出結(jié)果替換該命令字串。

用命令I(lǐng)I查看,將結(jié)果保存到變量aa中:

[root@localhost~]#aa='ll'(給aa一個(gè)可以執(zhí)行命令的變量II查看命令)

[root@localhost~]#echo$aa(查看結(jié)果)

總用量112-rw-------.1rootroot13544月922:48anaconda-ks.cfg-rw-r-r—.1rootroot854

月2309:18err.txt-rw-r-r-.1rootroot964月2210:55idzhangl.txt-rw-r-r-.1rootroot

450644月922:48install.log-rw-r-r-.1rootroot100334月922:46install.log.syslog-rw-r-r-.

1rootroot114月2211:05pw.txtdrwxr-xr-x.2rootroot40964月914:50公共的drwxr-xr-x.

2rootroot40964月914:50模板drwxr-xr-x.2rootroot40964月914:50視頻drwxr-xr-x.

2rootroot40964月914:50圖片drwxr-xr-x.2rootroot40964月914:50文檔drwxr-xr-x.

2rootroot40964月914:50下載drwxr-xr-x.2rootroot40964月914:50音樂(lè)drwxr-xr-x.

2rootroot40964月914:50桌面

[root@localhost~]#

在需要嵌套使用命令替換操作時(shí),反撇號(hào)將力所不能,這時(shí)需使用“$()"來(lái)代替:

[root@localhost~]#bb=$(ll$(mkdirvvb))(給bb變量,創(chuàng)建文件夾vvb,查看II)

[root@localhost~]#echo$bb

總用量124-rw-r-r-.1rootroot7354月2311:11aa.txtdrwxr-xr-x.2rootroot40964月23

11:17abc-rw-------.1rootroot13544月922:48anaconda-ks.cfg-rw-r-r-.1rootroot854月

2309:18err.txt-rw-r-r-.1rootroot964月2210:55idzhangl.txt-rw-r-r-.1rootroot450644

月922:48install.log-rw-r-r-.1rootroot100334月922:46install.log.syslog-rw-r-r-.1root

root114月2211:05pw.txtdrwxr-xr-x.2rootroot40964月2311:18vvbdrwxr-xr-x.2root

root40964月914:50公共的drwxr-xr-x.2rootroot40964月914:50模板drwxr-xr-x.2

rootroot40964月914:50視頻drwxr-xr-x.2rootroot40964月914:50圖片drwxr-xr-x.2

rootroot40964月914:50文檔drwxr-xr-x.2rootroot40964月914:50下載drwxr-xr-x.2

rootroot40964月914:50音樂(lè)drwxr-xr-x.2rootroot40964月914:50桌面

[root@localhost

命令read是bash內(nèi)置命令來(lái)給變量賦值

[root@localhost^]#readzhang(賦值給變量zhang)

zhangdawei(輸入內(nèi)容)

[root@localhostecho$zhang(查看變量zhang)

zhangdawei

[root@localhost

4.設(shè)置變量的作用范圍:

對(duì)于用戶自行定義的變量,默認(rèn)只能在當(dāng)前的shell環(huán)境中使用,因此稱為局部變量。

為了能在所有子shell環(huán)境中能夠繼續(xù)使用,可以使用export命令將指定的變量設(shè)置為“全

局變量”??梢酝瑫r(shí)使用多個(gè)變量名,不需要$符號(hào),多個(gè)變量用空格分開(kāi)。

[root@localhost~]#filesvr=

[root@localhostecho$filesvr

[root@localhost~]#zsh

[root@localhost~]#echo$filesvr

[root@localhost~]#exit

[root@localhostexportfilesvr

[root@localhostzsh

[root@localhostecho$filesvr

[root@localhost~]#

定義兩個(gè)變量MONTH,YEAR,并將其設(shè)置成全局變量。

[root@localhost~]#exportM0NTH=mayYEAR=2009

[root@localhostecho$MONTH$YEAR

may2009

[root@localhost

例子說(shuō)明:

[root@test~]#zdw=zhangdawei(定義變量zdw)

[root@test~]#echo$zdw(echo查看變量)

zhangdawei

[root@testcsh(切換到csh)

[root@testecho$zdw(查看zdw變量)

zdw:Undefinedvariable.(顯示未定義的變量)

[root@testecho$0(查看當(dāng)前shell)

csh

[root@testexit(退出)

exit

[root@testexportzdw(用命令export指定變量zdw為全局變量)

[root@testcsh(切換到csh)

[root@testecho$zdw(查看zdw變量?jī)?nèi)容)

zhangdawei

[root@test

5.清除自定義變量:

當(dāng)用戶不再需要使用自定義變量時(shí),可以使用unset命令對(duì)已定義的用戶變量進(jìn)行清除,

指定一個(gè)或多個(gè)變量名稱作為參數(shù)即可。(以空格分開(kāi))

[root@localhost~]#exportM0NTH=mayYEAR=2009

[root@localhost~]#echo$M0NTH$YEAR

may2009

[root@localhostunsetMONTHYEAR(注意:刪除變量不用加$)

[root@localhost~]#echo$MONTH$YEAR

[root@localhost~]#

6.數(shù)值變量的運(yùn)算:

Bash程序并不適合進(jìn)行強(qiáng)大的數(shù)學(xué)運(yùn)算(如小數(shù),指數(shù)等),一般只適合進(jìn)行簡(jiǎn)單地整

數(shù)運(yùn)算.可以使用expr表達(dá)式命令:

格式如下:expr變量1運(yùn)算符變量2【運(yùn)算符變量3......]

其中變量1,變量2.......對(duì)應(yīng)需計(jì)算的數(shù)值變量(前面需要加$符號(hào)引用),常用的幾種運(yùn)

算符:

+:加法運(yùn)算

-:減法運(yùn)算

\*:乘法運(yùn)算

/:除法運(yùn)算

%:求模運(yùn)算,又稱為取余運(yùn)算,即計(jì)算數(shù)值相除后的余數(shù)。

第一種方法:用let:

[root@enscript]#a=2

[root@enscript]#b=6

[root@enscript]#c=$a+$b

[root@enscript]#echo$c

2+6

[root@enscript]#letc=$a+$b

[root@enscript]#echo$c

8

[root@enscript]#

第二種方法:用$[算數(shù)表達(dá)式]

[root@enscript]#a=5

[root@enscript]#b=5

[root@enscript]#w=$[$a+$b]

[root@enscript]#echo$w

10

[root@enscript]#

第三種方法:用$((算數(shù)表達(dá)式)),2個(gè)小括號(hào):

[root@enscript]#n=8

[root@enscript]#m=6

[root@enscript]#p=$(($n+$m))

[root@enscript]#echo$p

14

[root@enscript]#

第四種方法:用expr算術(shù)表達(dá)式,注意數(shù)字之間要有空格,要用''引號(hào):

[root@enscript]#f=7

[root@enscript]#s=9

[root@enscript]#x='expr$f+$s'(注意:'expr空格$f空格+空格$s')

[root@enscript]#echo$x

16

[root@enscript]#

環(huán)境變量:

這里所說(shuō)的環(huán)境變量是指用戶登陸后linux系統(tǒng)預(yù)先設(shè)定好的一類shell變量,其功能是設(shè)

置用戶的shell工作環(huán)境,包括用戶宿主目錄,命令查找路徑,用戶當(dāng)前目錄,登陸終端等。

通常使用大寫字母,數(shù)字和其他字符組成。一般由linux系統(tǒng)自行維護(hù)。

1.查看環(huán)境變量

通常不帶任何選項(xiàng)或參數(shù)的set命令,可以查看系統(tǒng)中的所有的shell變量。

[root@localhost~]#set|less

BASH=/bin/bash

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:host

complete:interactive_comments:progcomp:promptvars:sourcepath

BASH_ALIASES=()

BASH_ARGC=()

BASH_ARGV=()

BASH_CMDS=()

BASH_LINENO=()

BASH_SOURCE=()

比較常用的環(huán)境變量:

$USER,$LOGNAME變量表示當(dāng)前用戶登陸的名稱,$UID變量表示當(dāng)前用戶的UID號(hào),

$SHELL變量表示用戶使用的登陸shell,$HOME變量表示用戶的宿主目錄,$PWD變量表示

用戶當(dāng)前的工作目錄等。

$PATH變量表示當(dāng)前用戶的命令搜索路徑。

以分號(hào)分割,顯示當(dāng)前用戶的用戶名,宿主目錄,登陸shell。

[root@localhost~]#echo"$USER:$HOME:$SHELL"

root:/root:/bin/bash

[root@localhost

查看當(dāng)前的命令搜索路徑,并將“/opt/bin”目錄添加到現(xiàn)有的搜索路徑中去:

[dwzhang@test~]$echo$PATH

/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/dwz

hang/bin

[dwzhang@test~]$PATH=7opt/bin:$PATH"

[dwzhang@test~]$echo$PATH

/opt/bin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/h

ome/dwzhang/bin

[dwzhang@test~]$

2.環(huán)境變量配置文件

/etc/profile:全局配置文件,對(duì)所有用戶起作用。

.bash_profile:用戶配置文件,可以覆蓋全局配置。

用戶需要長(zhǎng)期變更所使用的某個(gè)環(huán)境變量,可以再.bash_profile中修改。

在當(dāng)前用戶環(huán)境中,將用于限制歷史命令查看數(shù)量的環(huán)境變量HISTSIZE的值改為900。

[root@localhost~]#echo$HISTSIZE(查看環(huán)境變量)

1000

[root@localhostexportHISTSIZE=900(設(shè)置全局變量改為900)

[root@localhostecho$HISTSIZE(查看變量)

900

[root@localhost

位置變量:

$n:獲取當(dāng)前執(zhí)行的shell腳本的第n個(gè)參數(shù)值,n=1..9,當(dāng)n為0時(shí)表示腳本的文件

名,如果n大于9,用大括號(hào)括起來(lái)${10}

例子:

[root@testdayl]#catn.sh

echo$1$2$3

[root@testdayl]#shn.shxiaolxiao2xiao3

xiaolxiao2xiao3(分別對(duì)應(yīng)$1,$2,$3)

[root@testdayl]#

[root@testdayl]#catn.sh

echo$1$2$3${10}

[root@testdayl]#shn.sh1234567891011

12310

[root@testdayl]#

預(yù)定義變量:(特殊變量)

是由bash程序預(yù)先定義好的一些特殊變量,用戶只能使用預(yù)定義變量,而不能創(chuàng)建新的預(yù)

定義變量。所有的預(yù)定義變量都是由$符號(hào)和另一個(gè)符號(hào)組成的,較常用的有:

$0:獲取當(dāng)前執(zhí)行的shell腳本的文件名,包括路徑。(表示當(dāng)前執(zhí)行的進(jìn)程的進(jìn)程名)

例子:

[root@testdayl]#catO.sh

echo$0

[root@testdayl]#shO.sh(顯示腳本的名稱)

0.sh

[root@testdayl]#sh/scripts/dayl/O.sh

/scripts/dayl/O.sh(顯示腳本名和路徑)

[root@testdayl]#

[root@testdayl]#cat/etc/init.d/postfix(查看postfix腳本文件)

echo$"Usage:$0{start|stop|restart|reload|abort|flush|check|status|condrestart}"

[root@testdayl]#/etc/init.d/postfixxiaozhang(執(zhí)行一下)

Usage:/etc/init.d/postfix{start|stop|restart|reload|abort|flush|check|status|condrestart}

[root@testdayl]#(提示文件名和路徑)

如果腳本需要使用腳本名,直接定義$0,不需要在定義參數(shù)。

有的時(shí)候我們不需要路徑和腳本名同時(shí)顯示:需要用命令dirname和basename:

[root@testdayl]#dirname/scripts/dayl/O.sh(路徑)

/scripts/dayl

[root@testdayl]#basename/scripts/dayl/O.sh(腳本名)

O.sh

[root@testdayl]#

[root@testdayl]#cat00.sh

dirname"$0"

basename"$0"

[root@testdayl]#sh00.sh(路徑)

OO.sh

[root@testdayl]#catOO.sh

dirname"$0"

basename"$0"

[root@testdayl]#sh/scripts/dayl/OO.sh(sh路徑)

/scripts/dayl

OO.sh

[root@testdayl]#

$*:獲取當(dāng)前shell的所有參數(shù),將所有的命令行參數(shù)視為單個(gè)字符串,相當(dāng)于〃$1$2$3〃....

注意與$#區(qū)別。(表示所有位置參數(shù)的內(nèi)容。)

$#:獲取當(dāng)前shell命令行中參數(shù)的總個(gè)數(shù)。

[root@testdayl]#catn.sh

echo$1$2$3${10}

echo$#

[root@testdayl]#shn.sh123

123

3(顯示命令行總個(gè)數(shù))

[root@testdayl]#shn.sh12345

123

5

[root@testdayl]#

[root@testdayl]#catbijiao.sh

if[$#-ne3];then(命令行輸入3個(gè))

echo"err,plsinput3argv."(否則顯示錯(cuò)誤)

exit1

else

echo"ok"

fi

[root@testdayl]#shbijiao.sh

err,plsinput3argv.

[root@testdayl]#shbijiao.shaa

err,plsinput3argv.

[root@testdayl]#shbijiao.shaabb

err,plsinput3argv.

[root@testdayl]#shbijiao.shaabbcc

ok

[root@testdayl]#shbijiao.shaabbccdd

err,plsinput3argv.

[root@testdayl]#

$@:這個(gè)程序的所有參數(shù)“$1”“$2”“$3”.…,這是將參數(shù)傳遞給其他程序的最佳方

式,因?yàn)樗麜?huì)保留所有內(nèi)嵌在每個(gè)參數(shù)里的任何空白。

注意$*和$@的區(qū)別:

進(jìn)程狀態(tài)變量

$$:獲取當(dāng)前shell的進(jìn)程號(hào)(PID)。

$!:執(zhí)行上一個(gè)指令的PID,上一個(gè)后臺(tái)運(yùn)行進(jìn)程的進(jìn)程號(hào)。

$?:獲取執(zhí)行上一個(gè)指令的返回值(0為成功,非0為失?。?/p>

例子:

[root@testdayl]#oldboy

-bash:oldboy:commandnotfound

[root@testdayl]#echo$?

127(非0,上一條命令執(zhí)行失敗)

[root@testdayl]#pwd

/scripts/dayl

[root@testdayl]#echo$?

0

[root@testdayl]#

返回值:

0:表示運(yùn)行成功。

2:權(quán)限拒絕。

1~125:表示運(yùn)行失敗,執(zhí)行錯(cuò)誤。

126:未找到執(zhí)行的命令。

>128:命令被系統(tǒng)強(qiáng)制結(jié)束。

$_:在此之前執(zhí)行的命令(上一個(gè)命令)或腳本的最后一個(gè)參數(shù)。

Shell腳本的概念

凡是使用shell編程語(yǔ)言腳本編寫的程序文件都可以稱為shell腳本。

只要將linux命令按順序保存到一個(gè)文本文件中,并給予這個(gè)文件可執(zhí)行權(quán)限,那么這個(gè)文

件就可以稱為shell腳本。Shell腳本是屬于解釋執(zhí)行的,并不需要進(jìn)行特別編譯,只需要有

相應(yīng)的shell命令解釋器即可。

查看系統(tǒng)腳本文件的數(shù)量和文件類型:

[root@localhost~]#Is-I/etc/rc.d/init.d/*|wc-I

67

[root@localhost~]#file/etc/rc.d/init.d/*|tail-2

/etc/rc.d/init.d/wpa_supplicant:Bourne-Againshellscripttextexecutable

/etc/rc.d/init.d/ypbind:POSIXshellscripttextexecutable

[root@localhost

Linux中的系統(tǒng)腳本文件屬主都是管理員用戶root,所有的腳本文件都具有可執(zhí)行(x)屬性,

因此可以由shell解釋執(zhí)行。Shell腳本文件以文本文件的形式保存,可以使用cat命令查看

文件內(nèi)容,也可以使用vi編輯器修改文件的內(nèi)容。

查看系統(tǒng)中的網(wǎng)絡(luò)服務(wù)腳本network文件的開(kāi)頭五行內(nèi)容:

[root@localhost"]#cat/etc/rc.d/init.d/network|head-5

#!/bin/bash

#

#networkBringup/downnetworking

#

#chkconfig:23451090

[root@localhost

Linux中的系統(tǒng)腳本文件只有管理員root才具有修改的權(quán)限。

編寫一個(gè)完整可運(yùn)行的Shell腳本需要經(jīng)過(guò)以下步驟:

1.建立包含可執(zhí)行語(yǔ)句的文本文件

使用vi創(chuàng)建腳本文件,可以有擴(kuò)展名,也可以沒(méi)有。

腳本中包括的內(nèi)容如下:

運(yùn)行環(huán)境設(shè)置:通常位于文件的第一行,用于指定使用哪一個(gè)shell程序解釋。

設(shè)置以“#!”開(kāi)始,后面緊跟指定的完整路徑,例如#!/bin/bash。

注釋行:以#符號(hào)開(kāi)頭的內(nèi)容都被視為注釋行。

可執(zhí)行語(yǔ)句:是腳本最重要的組成部分。在命令行中可執(zhí)行的命令都可以寫入腳本中,

當(dāng)程序運(yùn)行時(shí),默認(rèn)將會(huì)按照順序依次解釋執(zhí)行。還可以添加一些程序結(jié)構(gòu)語(yǔ)句。

以上部分只有可執(zhí)行語(yǔ)句是必不可少的。

例子:

使用vi編輯一個(gè)用于查看當(dāng)前系統(tǒng)中/boot目錄所占空間的大小,并列出內(nèi)核文件的屬性信

息的腳本文件repboot.sho

[root@localhostvirepboot.sh

[root@localhostcatrepboot.sh

#!/bin/bash(指定shell路徑)

#/bootandkernel(注釋)

echo"Useageof/boot:"(顯示提示信息)

du-sh/boot(查看目錄空間)

echo"themodeofkernelfile:"(顯示提示信息)

Is-Ih/boot/vmlinuz-*(查看文件屬性)

[root@localhost

2.為腳本添加可執(zhí)行權(quán)限

編好腳本后,需要執(zhí)行程序才能看到結(jié)果。但是新創(chuàng)建的腳本不具有可執(zhí)行屬性,需要

用命令chmod為文件添加x權(quán)限:

[root@localhost~]#Is-Irepboot.sh(查看)

-rw-r-r-.1rootroot1234月2510:50repboot.sh(無(wú)x權(quán)限)

[root@localhost

[root@localhostchmoda+xrepboot.sh(力口x權(quán)限)

[root@localhost~]#Is-Irepboot.sh(查看)

-rwxr-xr-x.1rootroot1234月2510:50repboot.sh(有啦x權(quán)限)

[root@localhost

執(zhí)行shell腳本:有多種方式執(zhí)行shell腳本:

1.直接執(zhí)行帶x權(quán)限的腳本文件

最常用的一種方式。直接通過(guò)腳本文件路徑執(zhí)行

[root@localhost~]#./repboot.sh(?/執(zhí)行)

Useageof/boot:

27M/boot

themodeofkernelfile:

-rwxr-xr-x.1rootroot3.9M2月222013/boot/vmlinuz-2.6.32-358.el6.x86_64

[root@localhost~]#

2.使用shell解釋器程序執(zhí)行腳本

由解釋器程序負(fù)責(zé)讀取腳本文件中的內(nèi)容并執(zhí)行,不需要x權(quán)限,通常在腳本調(diào)試中使

用。(bash或sh執(zhí)行,兩個(gè)意思一樣。)

[root@localhost~]#bashrepboot.sh(bash執(zhí)行)

Useageof/boot:

27M/boot

themodeofkernelfile:

-rwxr-xr-x.1rootroot3.9M2月222013/boot/vmlinuz-2.6.32-358.el6.x86_64

[root@localhost

3.使用.命令執(zhí)行

上面都是在當(dāng)前shell中啟動(dòng)一個(gè)子shell來(lái)運(yùn)行腳本程序。需要在當(dāng)前shell環(huán)境中運(yùn)行

用bash的內(nèi)部命令.或source命令。也是不需要x權(quán)限。

[root@localhost~]#.repboot.sh(,后有空格)

Useageof/boot:

27M/boot

themodeofkernelfile:

-rwxr-xr-x.1rootroot3.9M2月222013/boot/vmlinuz-2.6.32-358.el6.x86_64

[root@localhost~]#

注意執(zhí)行腳本方式第三種和前兩種的區(qū)別!

其他說(shuō)明:

shell腳本的建立:

shell腳本通常是在編輯器如vi中編寫,由unix/linux,bashshell命令,程序結(jié)構(gòu)控制語(yǔ)句和

注釋等內(nèi)容組成。

腳本開(kāi)頭(第一行):#!/bin/bash必須在第一行。

一個(gè)規(guī)范的shell腳本的第一行會(huì)指出由哪個(gè)程序來(lái)執(zhí)行腳本,一般為:

#!/bin/bash或#!/bin/sh

在執(zhí)行腳本的時(shí)候,內(nèi)核會(huì)根據(jù)它來(lái)確定該用哪個(gè)程序來(lái)解釋腳本中的內(nèi)容,這一行必須在

腳本頂端的第一行,如果不是第一行則為注釋。

linux中常用腳本語(yǔ)言開(kāi)頭的寫法,在不同的語(yǔ)言開(kāi)頭一般都要加一行相應(yīng)的標(biāo)識(shí)語(yǔ)言:

#!/bin/sed

#!/usr/bin/awk

#!/usr/bin/perl

默認(rèn)為bash的系統(tǒng),用bash可以不用在第一行加!為了養(yǎng)成好習(xí)慣,最好第一行加上!

腳本注釋:

跟在#后面的內(nèi)容。

shell腳本的執(zhí)行:

當(dāng)shell腳本文件以非交互方式運(yùn)行時(shí),它會(huì)先查找環(huán)境變量ENV,該變量指定了一個(gè)環(huán)境

文件,通常是.bashrc,然后從該環(huán)境變量文件開(kāi)始執(zhí)行,當(dāng)讀取了ENV文件后,SHELL才開(kāi)

始執(zhí)行shell腳本。

執(zhí)行shell腳本三種方法:

1.bash腳本名稱或sh腳本名稱

當(dāng)腳本文件本身沒(méi)有可執(zhí)行權(quán)限(X權(quán)限)使常用的方法。

2.path/腳本名稱或./腳本名稱

需要先將腳本權(quán)限改為可執(zhí)行權(quán)限(X權(quán)限),然后通過(guò)腳本路徑執(zhí)行。

3.source腳本名稱或.腳本名稱

使用這種方法讀入或加載指定的shell腳本(如san.sh),然后依次執(zhí)行指定shell腳本文

件san.sh中的所有語(yǔ)句。這些語(yǔ)句將作為當(dāng)前父shell腳本father.sh進(jìn)程的一部分運(yùn)行。

就是說(shuō)在當(dāng)前shell中執(zhí)行腳本文件,而不是產(chǎn)生一個(gè)子shell來(lái)執(zhí)行文件中的命令。

使用前兩種執(zhí)行腳本,是在當(dāng)前shell中啟動(dòng)一個(gè)子shell來(lái)運(yùn)行腳本程序,因此腳本程

序定義的環(huán)境變量只能在子shell環(huán)境中使用,無(wú)法再當(dāng)前的shell中使用.

source命令與shellscripts的區(qū)別是,source在當(dāng)前bash環(huán)境下執(zhí)行命令,而scripts是

啟動(dòng)一個(gè)子shell來(lái)執(zhí)行命令。這樣如果把設(shè)置環(huán)境變量(或alias等等)的命令寫進(jìn)scripts

中,就只會(huì)影響子shell,無(wú)法改變當(dāng)前的BASH,所以通過(guò)文件(命令列)設(shè)置環(huán)境變量時(shí),

要用source命令。

source命令(從CShell而來(lái))是bashshell的內(nèi)置命令。點(diǎn)命令,就是個(gè)點(diǎn)符號(hào),(從Bourne

Shell而來(lái))是source的另一名稱。同樣的,當(dāng)前腳本中配置的變量也將作為腳本的環(huán)境,

source(或點(diǎn))命令通常用于重新執(zhí)行剛修改的初始化文檔,如

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論