最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程


1、前言

1.1 為什么學(xué)習(xí)shell編程

Shell腳本語(yǔ)言是實(shí)現(xiàn)Linux/UNIX系統(tǒng)管理及自動(dòng)化運(yùn)維所必備的重要工具,Linux/UNIX系統(tǒng)的底層及基礎(chǔ)應(yīng)用軟件的核心大部分涉及Shell腳本的內(nèi)容。每一個(gè)合格的Linux系統(tǒng)管理員或運(yùn)維工程師,都需要熟練的編寫(xiě)Shell腳本語(yǔ)言,并能夠閱讀系統(tǒng)及各類(lèi)軟件附帶的Shell腳本內(nèi)容。只有這樣才能提升運(yùn)維人員的工作效率,適應(yīng)日益復(fù)雜的工作環(huán)境,減少不必要的重復(fù)工作,從而為個(gè)人的職場(chǎng)發(fā)展奠定較好的基礎(chǔ)

創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)和四川電信科技城機(jī)房的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗(yàn)和案例。

1.2 學(xué)好Shell編程所需的基礎(chǔ)知識(shí)

  • 能夠熟練使用vim編輯器,熟悉SSH終端

  • 有一定的Linux命令基礎(chǔ),至少需要掌握80個(gè)以上Linux常用命令,并能夠熟練使用它

  • 要熟練掌握Linux正則表達(dá)式及三劍客命令(grep,sed,awk)

1.3 如何學(xué)好Shel編程

  • 學(xué)好Shel編程的核心:多練-->多思考-->再練-->再思考,堅(jiān)持如此循環(huán)即可!

  • 新手大忌:不可拿來(lái)主義,可以模仿,但是要自己嚼爛了吃下去,否則會(huì)鬧肚子

  • 格言:你覺(jué)得會(huì)了并不一定會(huì)了,你認(rèn)為對(duì)的并不一定對(duì)的

大家要勤動(dòng)手,自行完成學(xué)習(xí)筆記和代碼的書(shū)寫(xiě)。通過(guò)每一個(gè)小目標(biāo)培養(yǎng)自己的興趣以及成就感

2、Shell腳本入門(mén)

2.1 什么是Shell

  • Shell是一個(gè)命令解釋器,它在操作系統(tǒng)的最外層,負(fù)責(zé)直接與用戶對(duì)話

    把用戶的輸入解釋給操作系統(tǒng),并處理各種各樣的操作系統(tǒng)的輸出結(jié)果,輸出屏幕返回給用戶

  • 這種對(duì)話方式可以是:
    1)交互的方式:從鍵盤(pán)輸入命令,通過(guò)/bin/bash的解釋器,可以立即得到shell的回應(yīng)
    2)非交互的方式:腳本

下圖×××部分就是命令解釋器shell

Shell的英文意思是貝殼的意思,命令解釋器Shell像一個(gè)貝殼一樣包住系統(tǒng)核心

Shell執(zhí)行命令分為兩種方式:

  • 內(nèi)置命令:

    如講過(guò)的cd,pwd,exit和echo等命令

    當(dāng)用戶登錄系統(tǒng)后,shell以及內(nèi)置命令就被系統(tǒng)載入內(nèi)存,并且一直運(yùn)行

  • 一般命令:如ls,磁盤(pán)上的程序文件-->調(diào)入-->執(zhí)行命令

2.2 什么是Shell 腳本

當(dāng)linux命令或語(yǔ)句不在命令行下執(zhí)行(嚴(yán)格說(shuō),命令行也是shell)

而是通過(guò)一個(gè)程序文件執(zhí)行時(shí),該程序就被稱為Shell腳本或Shell程序
用戶可以在Shell腳本中敲入一系列的命令及語(yǔ)句組合;這些命令

變量和流程控制語(yǔ)句等有機(jī)的結(jié)合起來(lái)就形成一個(gè)功能強(qiáng)大的Shell腳本

首先先帶領(lǐng)大家寫(xiě)一個(gè)清空/var/log/messages日志的腳本

我們需要先想明白幾個(gè)問(wèn)題:
1)日志文件在哪?
/var/log/messages
2)用什么命令可以清空文件?
> 重定向
3)寫(xiě)一個(gè)簡(jiǎn)單的shell腳本

#! /bin/bash

cd /var/log/

>messages

4)怎樣執(zhí)行腳本?
# sh /server/scripts/log.sh

有沒(méi)有考慮到:

  • 有沒(méi)有腳本放在統(tǒng)一的目錄

/server/scripts目錄下

  • 權(quán)限:用哪個(gè)用戶執(zhí)行文件

需要對(duì)用戶做判斷

  • 清空錯(cuò)文件怎么辦,該如何辦?

  • 錯(cuò)誤提示:有沒(méi)有成功知不知道?

  • 腳本的通用性

小結(jié):

  • Shell就是命令解釋器。==>翻譯官

  • Shell腳本==>命令放在腳本里

3、Shell腳本的建立和執(zhí)行

3.1 Shell腳本的建立

推薦使用vim編輯器編輯腳本,可以事先做個(gè)別名

# echo "alias vi=vim">>/etc/profile
# source /etc/profile
3.1.1腳本開(kāi)頭第一行

規(guī)范的Shell腳本第一行會(huì)指出由哪個(gè)程序(解釋器)來(lái)執(zhí)行腳本中的內(nèi)容

在linux bash編程中一般為:

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

其中開(kāi)頭的“#!”又稱為幻數(shù),在執(zhí)行Shell腳本的時(shí)候

內(nèi)核會(huì)根據(jù)“#!”后的解釋器來(lái)確定哪個(gè)程序解釋腳本中的內(nèi)容

注意:這一行必須在每個(gè)腳本頂端的第一行,如果不是第一行則為腳本注釋行

3.1.2 sh和bash的區(qū)別
# ll /bin/shlrwxrwxrwx. 1 root root 4 Dec 23 20:25 /bin/sh -> bash
# sh是bash的軟鏈接,推薦標(biāo)準(zhǔn)寫(xiě)法#!/bin/bash

可以看一下系統(tǒng)自帶的腳本的寫(xiě)法

head -1 /etc/init.d/*

3.1.3 腳本注釋

在Shell腳本中,跟在#后面的內(nèi)容表示注釋。注釋部分不會(huì)被執(zhí)行,僅給人看

注釋可以自成一行,也可以跟在命令后面,與命令同行。要養(yǎng)成寫(xiě)注釋的習(xí)慣,方便自己與他人

最好不用中文注釋,因?yàn)樵诓煌址南到y(tǒng)會(huì)出現(xiàn)亂碼

3.2 Shell腳本的執(zhí)行

3.2.1 Shell腳本執(zhí)行的幾種方式

1)bash scripts-name或sh script-name(推薦使用)

這種方法是當(dāng)腳本本身沒(méi)有可執(zhí)行權(quán)限時(shí)常使用的方法

2)path /script-name 或./scripts-name(全路徑或當(dāng)前路徑執(zhí)行腳本)
這種方法首先需要給腳本文件可執(zhí)行權(quán)限

3)source scripts-name或. scripts-name #注意“.”點(diǎn)號(hào),且點(diǎn)號(hào)后有空格
source 或.在執(zhí)行這個(gè)腳本的同時(shí),可以將腳本中的函數(shù)和變量加載到當(dāng)前shell

3.3 Shell腳本開(kāi)發(fā)的規(guī)范和習(xí)慣

1)開(kāi)頭指定腳本解釋器
2)開(kāi)頭加版本版權(quán)等信息,可配置~/.vimrc文件自動(dòng)添加
3)腳本不要用中文注釋,盡量用英文注釋
4)腳本以.sh為擴(kuò)展名
5)放在統(tǒng)一的目錄
6)代碼書(shū)寫(xiě)優(yōu)秀習(xí)慣

a,成對(duì)的內(nèi)容一次性寫(xiě)出來(lái),防止遺漏,如[],'',""等
b,[]兩端要有空格,先輸入[]退格,輸入2個(gè)空格,再退格寫(xiě)
c,流程控制語(yǔ)句一次書(shū)寫(xiě)完,再添加內(nèi)容

if 條件
    then
      內(nèi)容
fi

d,通過(guò)縮進(jìn)讓代碼易讀
e,腳本中的引號(hào)都是英文狀態(tài)下的引號(hào),其他字符也是英文狀態(tài)

好的習(xí)慣可以讓我們避免很多不必要的麻煩,提高工作效率


4、Shell環(huán)境變量

4.1 什么是變量

變量就是用一個(gè)固定的字符串(也可能是字符數(shù)字等的組合),替代更多更復(fù)雜的內(nèi)容

這個(gè)內(nèi)容里可能還會(huì)包含變量和路徑,字符串等其他內(nèi)容。變量的定義是存在內(nèi)存中

x=1
y=2

4.2 變量類(lèi)型

變量分為兩類(lèi):
1)環(huán)境變量(也可稱為全局變量)

可以在創(chuàng)建他們的Shell及派生出來(lái)的子shell中使用

環(huán)境變量又可以分為自定義環(huán)境變量和bash內(nèi)置的環(huán)境變量

2)局部變量(普通變量):

只能在創(chuàng)建他們的shell函數(shù)或shell腳本中使用,還記得前面的$user?我們創(chuàng)建的一般都是普通變量

4.2.1 環(huán)境變量
  • 環(huán)境變量用于定義Shell的運(yùn)行環(huán)境,保證Shell命令的正確執(zhí)行,Shell通過(guò)環(huán)境變量來(lái)確定登錄用戶名,命令路徑,終端類(lèi)型,登錄目錄等,所有的環(huán)境變量都是全局變量,可用于所有子進(jìn)程中

    包括編輯器,shell腳本和各類(lèi)應(yīng)用。但crond計(jì)劃任務(wù)除外,還需要重新定義環(huán)境變量

  • 環(huán)境變量可以在命令行中設(shè)置,但用戶退出時(shí)這些變量值也會(huì)丟失,因此最好在用戶家目錄下的

    .bash_profile文件中或全局配置/etc/bashrc,/etc/profile文件或者/etc/profile.d/目錄中定義

    將環(huán)境變量放入profile文件中,每次用戶登錄時(shí)這些變量值都將被初始化

  • 通常,所有環(huán)境變量均為大寫(xiě)。環(huán)境變量應(yīng)用于用戶進(jìn)程前,都應(yīng)該用export命令導(dǎo)出

    例如:export chensiqi=1

  • 有一些環(huán)境變量,如HOME,PATH,SHELL,UID,USER等,在用戶登錄前就已被/bin/login

    程序設(shè)置好了。通常環(huán)境變量定義并保存在用戶家目錄下的.bash_profile或/etc/profile文件中

4.2.1 局部變量

定義局部變量

局部變量在用戶當(dāng)前的shell生存期的腳本中使用。例如,局部變量test取值為test18

這個(gè)值只在用戶當(dāng)前shell生存期中有意義。如果在shell中啟動(dòng)另一個(gè)進(jìn)程或退出,局部變量test值將無(wú)效

普通字符串變量定義

變量名=value
變量名=‘value’
變量名=“value”

shell中變量名及變量?jī)?nèi)容的要求

  • 一般是字母,數(shù)字,下劃線組成,且以字母開(kāi)頭

    變量的內(nèi)容,可以使用單引號(hào)或雙引號(hào)印起來(lái),或不加引號(hào)

  • 雖然變量可以以下劃線開(kāi)頭,但類(lèi)似這種變量都是比較特殊的,都是系統(tǒng)自己用的。我們盡量少用

小結(jié):

1)CMD=ls的ls兩側(cè)的符號(hào)是鍵盤(pán)tab鍵上面的,不是單引號(hào)
2)在變量名前加$,可以取得此變量的值,使用echo或printf命令可以顯示變量的值

    $A和$(A)寫(xiě)法不同,效果一樣,推薦后面的寫(xiě)法
3)${WEEK}DAY若變量和其他字符組成新的變量就必須給變量加上大括號(hào){}.
4)養(yǎng)成將所有字符串變量用雙引號(hào)括起來(lái)使用的習(xí)慣,減少編程遇到的怪異錯(cuò)誤。“$A”和“${A}”

4.3 變量名及變量?jī)?nèi)容定義小結(jié)

  1. 變量名只能由字母,數(shù)字,下劃線組成,且以字母開(kāi)頭

  2. 規(guī)范的變量名寫(xiě)法定義:見(jiàn)名知意
    a,testAge=1 <==每個(gè)單詞首字母大寫(xiě)
    b,test_age=1 <==每個(gè)單詞之間用“-”
    c,testAgeSex=1 <==駝峰語(yǔ)法:首個(gè)單詞字母小寫(xiě),其余單詞首字母大寫(xiě)

  3. =號(hào)的知識(shí),a=1中的等號(hào)是賦值的意思,比較是不是相等為“==”

  4. 打印變量,變量名前接$符號(hào),變量名后接字符的時(shí)候,要用大括號(hào)括起來(lái)

注意:
  1. 變量?jī)?nèi)容引用方法,一般為雙引號(hào),簡(jiǎn)單連續(xù)字符可以不加引號(hào),希望原樣輸出,使用單引號(hào)

  2. 變量?jī)?nèi)容是命令,要用反引號(hào)``或者$()把變量括起來(lái)使用

5、Shell特殊變量

5.1 位置變量

$0 獲取當(dāng)前執(zhí)行的shell腳本的文件名,如果執(zhí)行腳本帶路徑那么就包括腳本路徑

$n 獲取當(dāng)前執(zhí)行的shell腳本的第n個(gè)參數(shù)值,n=1..9,當(dāng)n為0時(shí)
   表示腳本的文件名,如果n大于9用大括號(hào)括起來(lái){10},參數(shù)以空格隔開(kāi)
   
$# 獲取當(dāng)前執(zhí)行的shell腳本后面接的參數(shù)的總個(gè)數(shù)
$0 獲取當(dāng)前執(zhí)行的shell腳本的文件名,包括路徑

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

$? 獲取執(zhí)行上一個(gè)指令的返回值(0為成功,非零為失?。?/pre>
5.2.1 $?測(cè)試
# echo $?
0
# cd /rrr
-bash: cd: /rrr: No such file or directory
# echo $?
1

$? 返回值參考
0  表示運(yùn)行成功
2  權(quán)限拒絕
1~125 表示運(yùn)行失敗,腳本命令,系統(tǒng)命令錯(cuò)誤或參數(shù)傳遞錯(cuò)誤
126 找到該命令,但無(wú)法執(zhí)行
127 未找到要運(yùn)行的命令
128 命令被系統(tǒng)強(qiáng)制結(jié)束

生產(chǎn)環(huán)境:
1)用于判斷命令,腳本或函數(shù)等程序是否執(zhí)行成功
2)若在腳本中調(diào)用執(zhí)行“exit數(shù)字”,則會(huì)返回這個(gè)數(shù)字給“$?”變量
3)如果在函數(shù)中使用“return 數(shù)字”,則會(huì)以函數(shù)返回值的形式傳給“$?”

6、變量的數(shù)值計(jì)算

6.1 (())用法(常用于簡(jiǎn)單的整數(shù)運(yùn)算)

算數(shù)運(yùn)算符號(hào)

精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程

# ((a=1+2**3-4%3))使用方法:

# echo $a
8
# b=$((1+2**3-4%3))
# echo $b
8
# echo $((1+2**3-4%3))
8

小結(jié):
1)“(())”在命令行執(zhí)行時(shí)不需要$符號(hào),但是輸出需要$符號(hào)
2)“(())”里所有字符之間有無(wú)或多個(gè)空格沒(méi)有任何影響

6.2 $[]的用法

# echo $[2+3]
5
# echo $[2*3]
6


7、腳本中定義變量

7.1 腳本中直接賦值

# cat test.sh 
#!/bin/env bash

a=6
b=2
echo "a-b =$(($a - $b))"
echo "a+b =$(($a + $b))"
echo "a*b =$(($a * $b))"
echo "a/b =$(($a / $b))"
echo "a**b =$(($a ** $b))"
echo "a%b =$(($a % $b))"

7.2 命令行傳參

# cat test.sh 
#!/bin/env bash

a=$1   #不需要把后面的$a,$b都改
b=$2
echo "a-b =$(($a - $b))"
echo "a+b =$(($a + $b))"
echo "a*b =$(($a * $b))"
echo "a/b =$(($a / $b))"
echo "a**b =$(($a ** $b))"
echo "a%b =$(($a % $b))"


8、條件測(cè)試

什么是條件測(cè)試呢?
簡(jiǎn)單理解,判斷某些條件是否成立,成立執(zhí)行一種命令,不成立執(zhí)行另外一種命令

8.1 條件測(cè)試語(yǔ)法

格式:[ <測(cè)試表達(dá)式> ] 大家要掌握著一種,注意測(cè)試表達(dá)式兩邊要留空格

8.2 測(cè)試表達(dá)式

好習(xí)慣:先敲一對(duì)[],然后退格輸入2個(gè)空格[],最后再回退一個(gè)空格開(kāi)始輸入[ -f file ]

# [ -f /etc/hosts ] && echo 1 || echo
1
# [ -f /etc/hosts1 ] && echo 1 || echo 0
0
# [ ! -f /etc/hosts1 ] && echo 1 || echo 0
1

# 在做測(cè)試判斷時(shí),不一定用上面的方法,用下面的寫(xiě)一半方法更簡(jiǎn)潔
# [ -f /etc/hosts ] && echo 1
1
# [ -f /etc/hosts1 ] || echo 0
0

# 系統(tǒng)腳本
# vi /etc/init.d/nfs
....
[ -x /usr/sbin/rpc.nfsd ] || exit 5
[ -x /usr/sbin/rpc.mountd ] || exit 5
[ -x /usr/sbin/exportfs ] || exit 5

8.3 常用文件測(cè)試操作符號(hào)

精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程

8.4 字符串測(cè)試操作符

比較兩個(gè)字符串是否相同,字符串長(zhǎng)度是否為零,字符串是否為NULL。Bash區(qū)分零長(zhǎng)度字符串和空字符串

|常用字符串測(cè)試操作符|說(shuō)明|
|--|--|
|-z "字符串"|若串長(zhǎng)度為0則真,-z理解為zero|
|-n “字符串”|若串長(zhǎng)度不為0則真,-n理解為no zero|
|“串1”=“串2”|若串1等于串2則真,可以使用“==”代替“=”|
|“串1”!="串2"|若串1不等于串2則真,但不能使用“!==”代替“!=”|

特別注意,以上表格中的字符串測(cè)試操作符號(hào)務(wù)必要用“”引起來(lái)

[ -z "$string"]字符串比較,比較符號(hào)兩端最好有空格,參考系統(tǒng)腳本

[ "$password" = "john" ]

提示:
[,"password",=,"join",]之間必須存在空格

8.5 整數(shù)二元比較操作符

精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程

8.6 邏輯操作符在[]中可以用>和<,但需要用\轉(zhuǎn)義,雖然不報(bào)錯(cuò),但結(jié)果不對(duì)。但還是不要混用!

精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程

小結(jié):
1)多個(gè)[]之間的邏輯操作符是&&或||
2)&&前面成功執(zhí)行后面
3)||前面不成功執(zhí)行后面

9、if條件語(yǔ)句

9.1 if單分支條件語(yǔ)句

if [ 條件 ]
    then
        指令
fi
或
if [ 條件 ];then
    指令
fi

提示:分號(hào)相當(dāng)于命令換行,上面兩種語(yǔ)法等同

9.2 if 雙分支條件語(yǔ)句

if [ 條件 ]
    then
        指令
    else
        指令
fi

9.3 多分支if語(yǔ)句

if [ 條件1 ];then

    指令1

elif [ 條件2 ];then

    指令2

elif [ 條件3 ];then

    指令3

elif [ 條件4 ];then

    指令4

else

    指令n

fi

10、case 結(jié)構(gòu)條件句

10.1 case結(jié)構(gòu)條件句語(yǔ)法

case "字符串變量" in
    值1)
        指令1
        ;;
    值2)
        指令2
        ;;
    *)
        指令
esac

注意:case語(yǔ)句相當(dāng)于一個(gè)if的多分支結(jié)構(gòu)語(yǔ)句

case 語(yǔ)句小結(jié):
1)case語(yǔ)句就相當(dāng)于多分支的if語(yǔ)句。case語(yǔ)句的優(yōu)勢(shì)是更規(guī)范,易讀
2)case語(yǔ)句適合變量的值少,且為固定的數(shù)字或字符串集合
3)系統(tǒng)服務(wù)啟動(dòng)腳本傳參的判斷多用case語(yǔ)句

11、循環(huán)語(yǔ)句(while/for)

11.1 循環(huán)語(yǔ)句語(yǔ)法

11.1.1 while條件語(yǔ)句
while 條件
    do
        指令
done
11.1.2 for循環(huán)結(jié)構(gòu)語(yǔ)法
for 變量名 in 變量取值列表
    do
        指令...
done

11.2 while語(yǔ)句

休息命令:sleep 1 休息一秒,usleep 1000000休息1秒單位微妙
11.2.1 守護(hù)進(jìn)程
# cat test.sh 
#!/bin/bash

while true
do
    uptime >> /var/log/uptime.log
    sleep 2
done

# while true 表示條件永遠(yuǎn)為真,因此會(huì)一直運(yùn)行,像死循環(huán)一樣

# cat /var/log/uptime.log 
 23:01:57 up  8:33,  2 users,  load average: 0.04, 0.03, 0.05
 23:01:59 up  8:33,  2 users,  load average: 0.04, 0.03, 0.05
 23:02:01 up  8:33,  2 users,  load average: 0.04, 0.03, 0.05
11.2.2 從1加到100
# cat test.sh 
#!/bin/bash
i=1
sum=0
while [ $i -lt 100 ]
do
    ((sum=sum+i))
    ((i++))
done
echo $sum
11.2.3 倒計(jì)時(shí)
# cat test.sh 
#!/bin/bash

i=10
while [ $i -gt 0 ]
do
    echo $i
    sleep 1
    ((i--))
done

11.3 防止腳本執(zhí)行中斷的方法

1)sh while01.sh & #放在后臺(tái)執(zhí)行
2)screen 分離 ctrl+a+d 查看screen -ls進(jìn)入screen -r num
3)nohup while01.sh &

11.4 for循環(huán)語(yǔ)句

11.4.1 打印列表元素
# cat test.sh 
#!/bin/bash

for i in 5 4 3 2 1   #用空格隔開(kāi)
do
    echo $i
done

# sh test.sh 
5
4
3
2
1

# for i in {5..1};do echo $i;done
5
4
3
2
1

# echo 10.1.1.{1..10}
10.1.1.1 10.1.1.2 10.1.1.3 10.1.1.4 10.1.1.5 10.1.1.6 10.1.1.7 10.1.1.8 10.1.1.9 10.1.1.10

# for i in `seq 5 -1 1`;do echo $i;done
5
4
3
2
1
#循環(huán)執(zhí)行命令n次
# for i in `seq 100`;do curl -I baidu.com;done
11.4.2 開(kāi)機(jī)啟動(dòng)項(xiàng)優(yōu)化
# cat test.sh 
#!/bin/bash

LANG=en
for i in `chkconfig --list|grep "3:on"|awk '{print $1}'`
do
    chkconfig $i off
done

for name in sshd rsyslog crond network sysstat
do
    chkconfig $name on
done
11.4.3 在/test目錄批量創(chuàng)建文件
#!/bin/bash

Path=/test
[ -d "$Path" ] || mkdir -p $Path
for i in `seq 10`
do
    touch $Path/test_$i.html
done
11.4.4 批量改名
# cat test.sh 
#!/bin/bash
$Path=/test
[ -d "$Path" ] || mkdir -p $Path
for file in `ls $Path`
do
    mv $file `echo $file|sed -r 's#test(.*).html#linux\1.HTML#g'`
done
11.4.5 批量創(chuàng)建用戶并設(shè)置密碼
# cat test.sh 
#!/bin/bash

User=test
Path=/tmp

for user in ${User}{01..10}
do
    useradd $user >/dev/null 2>&1
    if [ ! $? -eq 0 ];then
        echo "$user created faile!"
        echo "scripts begin to rollback!"
        for i in ${User}{01..10}
        do
            userdel -r $i >/dev/null 2>&1
            [ $? -eq 0 ] || exit 1
        done
        echo >$Path/user_passwd
        exit 1
    else
        passWD=`echo $RANDOM|md5sum|cut -c1-8`
        [ -d $Path ] || mkdir $Path
        echo $passWD | passwd --stdin $user
        echo "$user:$passWD">>$Path/user_passwd
    fi
done
11.4.6 獲取當(dāng)前目錄下的目錄名做為變量列表打印輸出
# cat /server/scripts/test.sh
#!/bin/bash

Path=`pwd`
echo $Path
for filename in `ls`
do
    [ -d ${Path}/${filename} ] && echo $filename
done
11.4.7 九九乘法表
# cat /server/scripts/test.sh 
#!/bin/bash

for ((i=1;i<10;i++))
do
    for ((j=1;j<=i;j++))
    do
        echo -n "$i * $j = $((i*j))"
        echo -n " "
    done
    echo " "
done

# sh /server/scripts/test.sh

11.5 break continue exit return

11.5.1 break continue exit 對(duì)比

break continue exit用于循環(huán)結(jié)構(gòu)中控制虛幻(for,while,if)的走向

精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程

# cat /server/scripts/test.sh
11.5.2 break
#!/bin/bash

for ((i=0;i<=5;i++))
do
    [ $i -eq 3 ] && break
   &n            
            
                                                            
本文題目:精講shell基礎(chǔ)以及如何高效的學(xué)習(xí)shell編程
鏈接URL:http://fisionsoft.com.cn/article/pogsjp.html