![Linux系統(tǒng)管理及應(yīng)用項(xiàng)目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項(xiàng)目10 編寫shell腳本(第2版)_第1頁(yè)](http://file4.renrendoc.com/view12/M04/1B/00/wKhkGWdlOTyATV5kAAD0XAknYx0476.jpg)
![Linux系統(tǒng)管理及應(yīng)用項(xiàng)目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項(xiàng)目10 編寫shell腳本(第2版)_第2頁(yè)](http://file4.renrendoc.com/view12/M04/1B/00/wKhkGWdlOTyATV5kAAD0XAknYx04762.jpg)
![Linux系統(tǒng)管理及應(yīng)用項(xiàng)目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項(xiàng)目10 編寫shell腳本(第2版)_第3頁(yè)](http://file4.renrendoc.com/view12/M04/1B/00/wKhkGWdlOTyATV5kAAD0XAknYx04763.jpg)
![Linux系統(tǒng)管理及應(yīng)用項(xiàng)目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項(xiàng)目10 編寫shell腳本(第2版)_第4頁(yè)](http://file4.renrendoc.com/view12/M04/1B/00/wKhkGWdlOTyATV5kAAD0XAknYx04764.jpg)
![Linux系統(tǒng)管理及應(yīng)用項(xiàng)目式教程(RHEL9CentOSStream9)(微課版)(第2版) 課件 項(xiàng)目10 編寫shell腳本(第2版)_第5頁(yè)](http://file4.renrendoc.com/view12/M04/1B/00/wKhkGWdlOTyATV5kAAD0XAknYx04765.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
公司近期有一大批新員工入職,大路安排小喬為新員工創(chuàng)建登錄Linux服務(wù)器的用戶賬號(hào)和初始密碼。雖然小喬已經(jīng)對(duì)添加用戶的命令useradd非常熟悉了,但是她覺得使用useradd命令一個(gè)一個(gè)地添加用戶,效率太低而且容易出現(xiàn)錯(cuò)誤,有沒有什么方法可以提高效率?小喬主動(dòng)思考如何提升工作效率的態(tài)度讓導(dǎo)師大路很是欣慰,他告訴小喬可以利用shell編寫程序,實(shí)現(xiàn)批量添加用?戶。對(duì)于小喬來講,這是一個(gè)從未接觸過的領(lǐng)域,于是她請(qǐng)教了有經(jīng)驗(yàn)的同事。同事告訴她,shell也可以像C語(yǔ)言和Java一樣定義變量、使用分支和循環(huán)等,在實(shí)際工作中通常利用shell腳本完成自動(dòng)化任務(wù),如批量添加、文件備份、定時(shí)文件清理?等。在同事的指點(diǎn)下,小喬的思路越來越明?確。理解shell腳本的概?念。學(xué)會(huì)使用shell腳本創(chuàng)建程?序。掌握分支結(jié)構(gòu)的用?法。具有擔(dān)當(dāng)精神掌握循環(huán)結(jié)構(gòu)的用?法。具有精益求精的工匠精神1創(chuàng)建shell腳本2條件測(cè)試與分支結(jié)構(gòu)3循環(huán)結(jié)構(gòu)10.1創(chuàng)建shell腳本10.1.1創(chuàng)建并運(yùn)行shell腳本shell腳本是一種為shell編寫的腳本程?序。1.理解shell腳本shell腳本是一種高效、便捷的編程工具,無需編譯即可直接執(zhí)行,極大地簡(jiǎn)化了編程流程。此外,它具備數(shù)組處理、循環(huán)控制、條件分支和邏輯運(yùn)算等豐富的編程特性,使得自動(dòng)化任務(wù)處理變得高效而靈活。因此,作為系統(tǒng)管理人員,需要掌握shell腳本的編寫方法,以簡(jiǎn)化系統(tǒng)管理任務(wù),提高工作效?率。shell腳本的結(jié)構(gòu)如圖10-1所示。由此可以看出,shell腳本由以#!開頭的解釋器、以#開頭的注釋行和程序體3個(gè)部分組?成。圖10-1
shell腳本的結(jié)構(gòu)10.1.1創(chuàng)建并運(yùn)行shell腳本2.編寫shell腳本下面以輸出HelloWorld!為例,講解shell腳本的編寫及運(yùn)行方?法。(1)編寫程序?qū)崿F(xiàn)輸出HelloWorld!。[root@Server~]#mkdirshellscript[root@Server~]#cdshellscript/[root@Servershellscript]#vimHelloWorld.sh1#!/bin/bash2#Program3#Thisprogramshows"HelloWorld!"inyourscreen.4#History5#2020/06/08testFirstrelease6echo-e"HelloWorld!\n"10.1.1創(chuàng)建并運(yùn)行shell腳本(2)注意事?項(xiàng)。
第
1
行的#!/bin/bash不能省略,該行表示執(zhí)行腳本時(shí),使用的shell腳本的解釋器為/bin/bash。
第2~第5行為注釋行,以#開頭,通常用于標(biāo)注程序的功能、創(chuàng)建時(shí)間、修改時(shí)間等。在編寫程序時(shí),添加適當(dāng)?shù)淖⑨屖橇己玫木幊塘?xí)慣,有利于以后的維護(hù)工?作。
第6行為主程序部分,使用echo命令輸出HelloWorld!。10.1.1創(chuàng)建并運(yùn)行shell腳本(3)設(shè)置執(zhí)行權(quán)限,并運(yùn)行HelloWorld.sh文?件。編寫完HelloWorld.sh文件后,在目錄shellscript下,可以通過shHelloWorld.sh、sourceHelloWorld.sh和./HelloWorld.sh等3種命令運(yùn)行該腳?本。[root@Servershellscript]#shHelloWorld.sh
HelloWorld!或者[root@Servershellscript]#sourceHelloWorld.sh
HelloWorld!或者[root@Servershellscript]#chmoda+xHelloWorld.sh[root@Servershellscript]#./HelloWorld.shHelloWorld!10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令在shell腳本中,為了構(gòu)建更復(fù)雜的功能,可以定義多種類型的變量,并且支持與用戶互動(dòng)來動(dòng)態(tài)賦值,從而增強(qiáng)了腳本的交互性和適應(yīng)?性。1.shell變量的類型與其他程序設(shè)計(jì)語(yǔ)言中的變量一樣,shell變量也可以根據(jù)作用范圍分為全局變量和局部變?量。
全局變量又被稱為環(huán)境變量,其作用范圍包括當(dāng)前shell進(jìn)程及其子進(jìn)?程。
局部變量的作用范圍僅限制在其命令行所在的shell或shell腳本文件?中。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令2.設(shè)置shell環(huán)境變量shell環(huán)境變量一般是指用export命令設(shè)置的變量,用于設(shè)置shell程序的運(yùn)行環(huán)?境。環(huán)境變量可以在命令行中設(shè)置,用戶退出shell時(shí),這些變量值會(huì)丟失,若想要永久保存環(huán)境變量,可在用戶主目錄下的.bash_profile或.bashrc文件中定義,也可以在/etc/profile文件中定義,這樣每次用戶登錄時(shí),這些變量都將自動(dòng)設(shè)?置。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令(1)在命令行中使用export命令設(shè)置環(huán)境變?量。在bash中,設(shè)置環(huán)境變量可以使用export命令,命令格式如?下。export環(huán)境變量名=變量值使用export命令設(shè)置用戶的主目錄為/home/test,并使用cd$HOME命令切換到用戶主目錄,如?下。[root@Server~]#mkdir/home/test[root@Server~]#exportHOME=/home/test[root@Serverroot]#cd$HOME[root@Server~]#pwd/home/test[root@Server~]#echo$HOME/home/test10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令(2)修改/etc/profile文件,設(shè)置環(huán)境變?量。使用export命令可以設(shè)置臨時(shí)性的環(huán)境變量,退出shell時(shí),這些環(huán)境變量就失效了,若想永久保存環(huán)境變量,需要修改/etc/profile文?件。若要為Java設(shè)置環(huán)境變量,可在/etc/profile文件的最后加入如下代?碼。[root@Server~]#vim/etc/profileexportJAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-2.el9_1.x86_64exportPATH=$PATH:$JAVA_HOME/bin[root@Server~]#source/etc/profile[root@Server~]#echo$JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-2.el9_1.x86_643.定義shell局部變量shell局部變量一般在shell腳本中定義,只在當(dāng)前shell腳本執(zhí)行期間有效。定義局部變量命令格式如?下。變量名=變量值變量的命名需遵循一定的規(guī)則,具體如?下。
變量名由數(shù)字、字母、下畫線等組成,必須以字母或者下畫線開?頭。
等號(hào)兩側(cè)不能有空?格。
變量值若包含空格,則必須用引號(hào)引起?來。
變量名建議大寫,便于與shell命令區(qū)?分。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令【例10-1】
定義變量VAR、STR,并輸出變量的?值。[root@Server~]#VAR=100[root@Server~]#STR="HelloLinux"[root@Server~]#echo$VAR100[root@Server~]#echo$STRHelloLinux【例10-2】
定義變量A,值為HelloWorld,并輸出變量A。[root@Server~]#vimprinta.sh#!/bin/bash#對(duì)變量賦值A(chǔ)="HelloWorld"echo"Ais:"echo$A[root@Server~]#shprinta.shAis:HelloWorld10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令4.接收用戶輸入的數(shù)據(jù):read命令read命令用于接收從鍵盤輸入的數(shù)據(jù),并將其作為變量的值。此命令通常用在shell腳本與用戶進(jìn)行交互的場(chǎng)合中。命令格式如?下。read[選項(xiàng)]變量名read命令的常用選項(xiàng)如表10-1所?示。10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令【例10-3】
通過提示“Pleaseenteryourname:”輸入用戶的姓名,輸出“HelloXX,welcometothelinuxclassroom!”。[root@Server~]#vimmyname.sh#!/bin/bash#Thisprogramshows"HelloXX,welcometothelinuxclassroom!"inyourscreen.read-p"Pleaseenteryourname:"NAMEecho"Hello$NAME,welcometothelinuxclassroom!"exit0[root@Server~]#shmyname.shPleaseenteryourname:bobbyHellobobby,welcometothelinuxclassroom!10.1.2定義shell變量、接收用戶輸入的數(shù)據(jù):read命令10.2條件測(cè)試與分支結(jié)構(gòu)10.2.1條件測(cè)試test命令用來檢查某個(gè)條件是否成立。執(zhí)行條件測(cè)試操作以后,通過預(yù)定義變量$?獲取測(cè)試命令的返回值,返回值為0表示條件成立,返回值為1表示條件不成?立。常見的測(cè)試類型有文件測(cè)試、整數(shù)值比較、字符串比較和邏輯測(cè)試?等。1.文件測(cè)試test命令可以對(duì)文件進(jìn)行測(cè)試,如test-efilename用于表示判斷文件名是否存在。文件測(cè)試的常用選項(xiàng)如表10-2所?示。表10-2文件測(cè)試的常用選項(xiàng)10.2.1條件測(cè)試【例10-4】
使用test命令判斷/root目錄是否存?在。[root@Server~]#test-e/root[root@Server~]#echo$?0echo$?語(yǔ)句用于查看上一條命令的返回值,返回值為0表示/root目錄存?在。10.2.1條件測(cè)試2.整數(shù)值比較test命令可以將兩個(gè)整數(shù)進(jìn)行比較,如testnum1-eqnum2表示判斷num1和num2是否相等。整數(shù)值比較的常用選項(xiàng)如表10-3所?示。表10-3
整數(shù)值比較的常用選項(xiàng)10.2.1條件測(cè)試【例10-5】
使用test命令比較10和11是否相?等。[root@Server~]#test10-eq11[root@Server~]#echo$?1通過echo$?語(yǔ)句查看到上一條命令的返回值為1,表示10和11不相?等。10.2.1條件測(cè)試3.字符串比較test命令可以將兩個(gè)字符串進(jìn)行比較,如test-zstring表示判斷字符串string是否為空。字符串比較的常用選項(xiàng)如表10-4所?示。選項(xiàng)說明-z判斷字符串是否為空-n判斷字符串是否不為空str1=str2判斷字符串str1是否等于字符串str2str1!=str2判斷字符串str1是否不等于字符串str210.2.1條件測(cè)試【例10-6】
使用test命令判斷字符串sas和sas是否相?等。[root@Server~]#test"sas"="sas"[root@Server~]#echo$?0通過echo$?語(yǔ)句查看到上一條命令的返回值為0,表示兩個(gè)字符串相?等。10.2.1條件測(cè)試4.邏輯測(cè)試shell提供了與、或、非等邏輯運(yùn)算來測(cè)試某個(gè)條件是否成立。邏輯測(cè)試的常用選項(xiàng)如表10-5所?示。表10-5
邏輯測(cè)試的常用選項(xiàng)選項(xiàng)說明!表達(dá)式測(cè)試表達(dá)式是否為假表達(dá)式1-a表達(dá)式2測(cè)試兩個(gè)表達(dá)式是否同時(shí)為真,也可以用&&表示表達(dá)式1-o表達(dá)式2測(cè)試兩個(gè)表達(dá)式是否至少有一個(gè)為真,也可以用||表示【例10-7】
使用test命令判斷/root目錄是否不存?在。[root@Server~]#test!-e/root/[root@Server~]#echo$?1通過echo
$?語(yǔ)句查看到上一條命令的返回值為1,表示/root目錄存?在。if語(yǔ)句有3種類型:?jiǎn)畏种f語(yǔ)句、雙分支if語(yǔ)句、多分支if語(yǔ)?句。1.單分支if語(yǔ)句單分支if語(yǔ)句是常見的條件判斷式。當(dāng)條件成立時(shí),執(zhí)行相應(yīng)的操作,否則不執(zhí)行任何操作,其語(yǔ)法格式如?下。if[條件表達(dá)式];then
命令序列fi單分支if語(yǔ)句的流程如圖10-2所?示。10.2.2if語(yǔ)句圖10-2
單分支if語(yǔ)句的流程【例10-8】
編寫如下程序,文件名為compare.sh,查看運(yùn)行結(jié)?果。[root@Server~]#vimcompare.sh#!/bin/bashFIRST=50SECOND=10if[$FIRST-gt$SECOND];thenecho"$FIRST>$SECOND"fi[root@Server~]#chmoda+xcompare.sh[root@Server~]#./compare.sh50>10在例10-8中,F(xiàn)IRST初值為50,SECOND初值為10,F(xiàn)IRST大于SECOND,因此在執(zhí)行過程中可以執(zhí)行到if分支語(yǔ)句。但是如果要根據(jù)用戶輸入的數(shù)據(jù)來判斷條件是否成立,就需要用到雙分支if語(yǔ)句?了。10.2.2if語(yǔ)句2.雙分支if語(yǔ)句
雙分支if語(yǔ)句在條件成立和條件不成立時(shí)執(zhí)行不同的操作,其語(yǔ)法格式如?下。if[條件表達(dá)式];then
命令序列1else
命令序列2fi雙分支if語(yǔ)句的流程如圖10-3所?示。圖10-3
雙分支if語(yǔ)句的流程10.2.2if語(yǔ)句【例10-9】
使用雙分支if語(yǔ)句改進(jìn)例10-8中的代碼,查看運(yùn)行結(jié)?果。[root@Server~]#vimcompare.sh#!/bin/bashread-p"Pleaseinputthefirstnum:"FIRSTread-p"Pleaseinputthesecondnum:"SECONDif[$FIRST-gt$SECOND];thenecho"$FIRST>$SECOND"elseecho"$FIRST<=$SECOND"fi[root@Server~]#shcompare.shPleaseinputthefirstnum:12Pleaseinputthesecondnum:4512<=4510.2.2if語(yǔ)句3.多分支if語(yǔ)句多分支if語(yǔ)句能針對(duì)多個(gè)條件執(zhí)行不同操作,其語(yǔ)法格式如?下。if[條件表達(dá)式1];then
命令序列1elif[條件表達(dá)式2];then
命令序列2elif……else
命令序列nfi多分支if語(yǔ)句的流程如圖10-4所?示。10.2.2if語(yǔ)句圖10-4
多分支if語(yǔ)句的流程10.2.2if語(yǔ)句【例10-10】
根據(jù)輸入的成績(jī)判斷成績(jī)檔次是優(yōu)秀、良好、及格還是不及?格。[root@Server~]#vimscorelevel.sh#!/bin/bashread-p"請(qǐng)輸入您的成績(jī)(0-100):"SCOREif(($SCORE>=90))&&(($SCORE<=100))thenecho"$SCORE,屬于優(yōu)秀檔次!"elif(($SCORE<90))&&(($SCORE>=80))thenecho"$SCORE,屬于良好檔次!"elif(($SCORE<80))&&(($SCORE>=60))thenecho"$SCORE,屬于及格檔次!"elseecho"$SCORE,屬于不及格檔次!"fi[root@Server~]#chmoda+xscorelevel.sh
[root@Server~]#./scorelevel.sh請(qǐng)輸入您的成績(jī)(0-100):9999,屬于優(yōu)秀檔次!10.2.2if語(yǔ)句提示
例10-10使用了shell的雙括號(hào)運(yùn)算符,語(yǔ)法格式如下。((表達(dá)式1,表達(dá)式2…))特點(diǎn)如下。(1)在雙括號(hào)結(jié)構(gòu)中,所有表達(dá)式都可以像C語(yǔ)言表達(dá)式一樣書寫,如a++、b--等。(2)在雙括號(hào)結(jié)構(gòu)中,所有變量可以不加$前綴。(3)雙括號(hào)可以進(jìn)行邏輯運(yùn)算、四則運(yùn)算。(4)雙括號(hào)結(jié)構(gòu)擴(kuò)展了for、while、if條件測(cè)試運(yùn)算。(5)雙括號(hào)結(jié)構(gòu)支持多個(gè)表達(dá)式運(yùn)算,各個(gè)表達(dá)式之間用,分開。雙括號(hào)運(yùn)算符不僅可以用在if語(yǔ)句中,也可以用在case分支及循環(huán)結(jié)構(gòu)中,大大降低了編寫代碼的復(fù)雜性,是對(duì)shell中算術(shù)運(yùn)算及賦值運(yùn)算的擴(kuò)?展。10.2.3case語(yǔ)句例10-10利用多分支if語(yǔ)句實(shí)現(xiàn)了成績(jī)的檔次分類,但是我們發(fā)現(xiàn)如果if語(yǔ)句太多,代碼量比較大,代碼邏輯容易混亂。case語(yǔ)句可以很好地實(shí)現(xiàn)多分支的條件判斷,達(dá)到更好的效?果。case語(yǔ)句的語(yǔ)法格式如?下。case變量in
值1)
命令序列1;;
值2)
命令序列2;;
值3)
命令序列3;;……*)
默認(rèn)命令序列;;esac(1)使用case語(yǔ)句需要注意以下3點(diǎn)。①
首行關(guān)鍵字是case,末行關(guān)鍵字是esac(case反過來寫)。②
值后面都有)。③
每條分支語(yǔ)句結(jié)尾一般會(huì)有一對(duì)分號(hào)即;;。(2)case語(yǔ)句的執(zhí)行過程如?下。①shell通過計(jì)算變量的值,將其結(jié)果依次與值1、值2、值3……比較,直到找到一個(gè)匹配?項(xiàng)。②
找到匹配項(xiàng),執(zhí)行它后面的命令,直到遇到一對(duì)分號(hào)即;;為止。若找不到匹配項(xiàng),則執(zhí)行*)默認(rèn)命令序?列。10.2.3case語(yǔ)句case語(yǔ)句的流程如圖10-5所?示。10.2.3case語(yǔ)句圖10-5
case語(yǔ)句的流程【例10-11】
使用case語(yǔ)句實(shí)現(xiàn):根據(jù)輸入的成績(jī)判斷成績(jī)等級(jí)是優(yōu)秀、良好、中等還是?差。[root@Server~]#vimcaselevel.sh#!/bin/bashread-p"Pleaseinputyourscore:"SCOREcase$SCOREin[9][0-9]|100)echo"成績(jī)?yōu)椋?SCORE,等級(jí)為優(yōu)秀";;[8][0-9])echo"成績(jī)?yōu)椋?SCORE,等級(jí)為良好";;[6-7][0-9])echo"成績(jī)?yōu)椋?SCORE,等級(jí)為中等";;[0-9]|[0-5][0-9])echo"成績(jī)?yōu)椋?SCORE,等級(jí)為差";;*)echo"輸入的成績(jī)不合法:$SCORE";;esac10.2.3case語(yǔ)句[root@Server~]#shcaselevel.shPleaseinputyourscore:45成績(jī)?yōu)椋?5,等級(jí)為差[root@Server~]#shcaselevel.shPleaseinputyourscore:86成績(jī)?yōu)椋?6,等級(jí)為良好[root@Server~]#shcaselevel.sh
Pleaseinputyourscore:94成績(jī)?yōu)椋?4,等級(jí)為優(yōu)秀10.3循環(huán)結(jié)構(gòu)10.3.1for循環(huán)語(yǔ)句for循環(huán)語(yǔ)句對(duì)一個(gè)變量依次賦值后,重復(fù)執(zhí)行同一個(gè)命令序列。對(duì)于賦給變量的幾個(gè)數(shù)值,既可以在程序中以數(shù)值列表的形式提供,又可以在程序以外以位置參數(shù)的形式提供。for循環(huán)語(yǔ)句有如下兩種語(yǔ)法格?式。1.for循環(huán)語(yǔ)句的第一種語(yǔ)法格式for循環(huán)語(yǔ)句的第一種語(yǔ)法格式如?下。for循環(huán)變量名in取值列表do
命令序列done使用該語(yǔ)法格式需要注意以下3點(diǎn)。
取值列表指的是循環(huán)變量所能取到的值的列?表。do和done之間的所有語(yǔ)句稱為循環(huán)?體。
循環(huán)執(zhí)行的次數(shù)取決于取值列表中元素的個(gè)?數(shù)。該語(yǔ)句的執(zhí)行流程如圖10-6所?示。圖10-6
for循環(huán)語(yǔ)句的執(zhí)行流程【例10-12】
使用for循環(huán)語(yǔ)句求1+2+3+…+100的?和。[root@Server~]#vimforloop.sh#/bin/bashs=0for((i=1;i<=100;i=i+1))dos=$(($s+$i))doneecho"Theresultof'1+2+…+100'is==>$s"[root@Server~]#shforloop.shTheresultof'1+2+…+100'is==>505010.3.1for循環(huán)語(yǔ)句while循環(huán)語(yǔ)句也稱為不定循環(huán)語(yǔ)句,其語(yǔ)法格式如?下。while條件測(cè)試do
命令序列done當(dāng)條件測(cè)試成立時(shí),執(zhí)行命令序列,不成立時(shí),跳出循?環(huán)。10.3.2while循環(huán)語(yǔ)句【例10-13】
使用while循環(huán)語(yǔ)句求1+2+3+…+100的?和。[root@Server~]#vimwhileloop.sh#/bin/bashs=0i=0while["$i"!="100"]doi=$(($i+1))s=$(($s+$i))doneecho"Theresultof'1+2+…+100'is==>$s"
[root@Server~]#shwhileloop.shTheresultof'1+2+…+100'is==>505010.3.2while循環(huán)語(yǔ)句【例10-14】
將例10-13中的部分代碼修改為如下形?式。#/bin/bashs=0i=0while:doi=$(($i+1))s=$(($s+$i))doneecho"Theresultof'1+2+…+100'is==>$s"再次運(yùn)行并觀察結(jié)果,發(fā)現(xiàn)程序進(jìn)入了死循環(huán)狀態(tài),按Ctrl+C組合鍵強(qiáng)制終止程?序。10.3.2while循環(huán)語(yǔ)句until循環(huán)語(yǔ)句也稱為不定循環(huán)語(yǔ)句,其執(zhí)行過程與while循環(huán)語(yǔ)句的正好相反,其語(yǔ)法格式如?下。until條件測(cè)試do
命令序列done當(dāng)條件測(cè)試成立時(shí),終止循環(huán),不成立時(shí),執(zhí)行循環(huán)中的命令序?列。10.3.3until循環(huán)語(yǔ)句【例10-15】
使用until循環(huán)語(yǔ)句求1+2+3+…+100的?和。[root@Server~]#vimuntilloop.sh#/bin/bashs=0i=1until(($i>100))dos=$(($s+$i))i=$(($i+1))doneecho"Theresultof'1+2+…+100'is==>$s"[root@Server~]#shuntilloop.shTheresultof'1+2+…+100'is==>505010.3.3until循環(huán)語(yǔ)句使用while、until、for循環(huán)語(yǔ)句時(shí),如果希望在不滿足結(jié)束條件的情況下跳出循環(huán),需要使用break或者continue語(yǔ)句。break與continue語(yǔ)句的區(qū)別如?下。break:用于跳出當(dāng)前循環(huán)體,終止循環(huán)語(yǔ)句,執(zhí)行done后面的語(yǔ)?句。continue:用于跳過當(dāng)前循環(huán)體內(nèi)剩余未執(zhí)行的語(yǔ)句,重新判斷循環(huán)條件,以便執(zhí)行下一輪循?環(huán)。10.3.3until循環(huán)語(yǔ)句1創(chuàng)建用戶信息文件2編寫shell腳本項(xiàng)目實(shí)施3運(yùn)行shell腳本任務(wù)10-1創(chuàng)建用戶信息文件任務(wù)10-1創(chuàng)建用戶信息文件為了更好地完成本任務(wù),我們做如下約?定。(1)新用戶的用戶名來自一個(gè)包含文件名列表的文件userlist,文件內(nèi)容如表10-6所?示。(2)用戶的密碼與用戶名相?同。(3)這些用戶都屬于新員工用戶組newgroup。表10-6
userlist文件內(nèi)容用戶名密碼LiLeiLiLeiHanMeiMeiHanMeiMeiMengLiMengLiHuFeiHuFeiLiuMingLiuMingWangLeiWangLei任務(wù)10-1創(chuàng)建用戶信息文件(1)新建空文件userlist。[root@Server~]#touchuserlist(2)把用戶名和密碼分為兩列添加到文件中,保存并退?出。[root@Server~]#vimuserlistLiLeiLiLeiHanMeiMeiHanMeiMeiMengLiMengLiHuFeiHuFeiLiuMingLiuMingWangLeiWangLei任務(wù)10-2編寫shell腳本任務(wù)10-2編寫shell腳本(1)新建空文件createuser.sh。[root@Server~]#touchcreateuser.sh(2)使用Vim編輯器編寫createuser.sh腳本,輸入如下內(nèi)?容。[root@Server~]#vimcreateuser.sh#!/bin/bashUsers=/root/userlist#批量新增用戶的內(nèi)容文件UserAdd=/usr/sbin/useradd#新增用戶命令路徑Passwd=/usr/bin/passwd#設(shè)置用戶密碼命令路徑Cut=/bin/cut#字符串分割命令路徑whilereadLINES#逐行讀取用戶數(shù)據(jù)文件任務(wù)10-2編寫shell腳本doUSERNAME=$(echo$LINES|$Cut-f1-d'')#從每行中分割出用戶名PASSWORD=$(echo$LINES|$Cut-f2-d'')#從每行中分割出用戶密碼#echo$USERNAMEgrep-E"newgroup"/etc/group&>/dev/nullif[$?-ne0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 展期還款協(xié)議及其性質(zhì)與計(jì)算方法
- 風(fēng)力發(fā)電場(chǎng)項(xiàng)目合作協(xié)議
- 婚前共同購(gòu)買住房協(xié)議
- 弱電承包合同
- 建筑垃圾運(yùn)輸合同標(biāo)準(zhǔn)模板
- 長(zhǎng)期采購(gòu)協(xié)議
- 《安全用電 節(jié)約用電》(說課稿)安徽大學(xué)版六年級(jí)上冊(cè)綜合實(shí)踐活動(dòng)
- 軟件銷售協(xié)議合同范本
- 2024年環(huán)保工程項(xiàng)目設(shè)計(jì)與施工合同
- 2024年旅游服務(wù)項(xiàng)目合作協(xié)議
- 彭大軍橋牌約定卡
- 煙氣管道阻力計(jì)算
- 城鄉(xiāng)環(huán)衛(wèi)一體化保潔服務(wù)迎接重大節(jié)日、活動(dòng)的保障措施
- 醫(yī)院-9S管理共88張課件
- 高考作文復(fù)習(xí):議論文論證方法課件15張
- 2022醫(yī)學(xué)課件前列腺炎指南模板
- MySQL數(shù)據(jù)庫(kù)項(xiàng)目式教程完整版課件全書電子教案教材課件(完整)
- 藥品生產(chǎn)質(zhì)量管理工程完整版課件
- 《網(wǎng)絡(luò)服務(wù)器搭建、配置與管理-Linux(RHEL8、CentOS8)(微課版)(第4版)》全冊(cè)電子教案
- 職業(yè)衛(wèi)生教學(xué)課件生物性有害因素所致職業(yè)性損害
- 降“四高”健康教育課件
評(píng)論
0/150
提交評(píng)論