CH02-shell程序的設(shè)計(jì)教學(xué)課件_第1頁(yè)
CH02-shell程序的設(shè)計(jì)教學(xué)課件_第2頁(yè)
CH02-shell程序的設(shè)計(jì)教學(xué)課件_第3頁(yè)
CH02-shell程序的設(shè)計(jì)教學(xué)課件_第4頁(yè)
CH02-shell程序的設(shè)計(jì)教學(xué)課件_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

CH02shell程序的設(shè)計(jì)怎樣思想,就有怎樣的生活CH02shell程序的設(shè)計(jì)CH02shell程序的設(shè)計(jì)怎樣思想,就有怎樣的生活第2章Shell程序設(shè)計(jì)主要內(nèi)容ShellOverviewWhatisShell?WhyShell?創(chuàng)建和執(zhí)行Shell程序Shell程序設(shè)計(jì)的語(yǔ)法變量、條件測(cè)試、條件語(yǔ)句、重復(fù)語(yǔ)句、命令表和語(yǔ)句塊、函數(shù)…實(shí)例第2章Shell程序設(shè)計(jì)主要內(nèi)容ShellOverviewWhatisShell?WhyShell?創(chuàng)建和執(zhí)行Shell程序Shell程序設(shè)計(jì)的語(yǔ)法變量、條件測(cè)試、條件語(yǔ)句、重復(fù)語(yǔ)句、命令表和語(yǔ)句塊、函數(shù)…實(shí)例基本命令(1)文件操作列出目錄內(nèi)容:ls創(chuàng)建特殊文件:mkdir,mknod,mkfifo文件操作:cp,mv,rm修改文件屬性:chmod,chown,chgrp查找文件:find字符串匹配:grep其它:pwd,cd,file,more,less,head,tail,cat,gzip,zip,tarlinux.chinaitlab/special/linuxcom/基本命令(2)進(jìn)程操作ps,kill用戶和組賬號(hào)操作useradd,userdel,groupdel,passwd網(wǎng)絡(luò)命令ifconfig,ping,netstat,telnet其他who,whoami,su,sudo,uname,…manmountunmountdu,df文件權(quán)限%ls-ltotal161-rwxr-xr-x1mingminggroup117878a.out-rw-r--r--1mingminggroup15053testdrw-r-xr-x1mingminggroup1512dsa...-rwxrwxrwxafileuser(owner)groupother(world)fileugo161blocksindiskareoccupiedbythesefiles文件權(quán)限(續(xù))-rw-r--r--user(you)groupother(world)fileafileyoucreater-readw-writex-executeAfiledoesnothaveexecutablepermissionbydefault,notevenfortheowner目錄權(quán)限drwxr-xr-xuser(you)groupother(world)directoryadirectoryyoucreate目錄權(quán)限(續(xù))目錄權(quán)限讀

–可以列出存儲(chǔ)在該目錄下的文件寫

–允許從目錄中刪除或添加新的文件執(zhí)行

–允許在目錄中查找,并能用cd命令將工作目錄改到該目錄:cat/u/mingming/emails/e1.txtchmod:改變文件或目錄的存取權(quán)限chmodu+xfile1.txt

xpermissionforownerchmodugo+xfile1.txt xpermissionforallchmoda+xfile1.txt xpermissionforallchmoda-xfile1.txt removexpermissionforallchmoda-rwxfile1.txt removeallpermissionsforall(文件的權(quán)限只能被創(chuàng)建者或超級(jí)用戶修改)chmod命令(續(xù))chmoda+r,u+wfile1.txtchmoda=rfile1.txtchmodu=rwxfile1.txtchmod命令(續(xù))用8進(jìn)制數(shù)表示讀權(quán)限-4寫權(quán)限-2可執(zhí)行權(quán)限-1chmod666file1.txt

isthesameaschmoda=rwfile1.txtchmod644file1.txt

(setrforallandwforuseronly)chmod777file1.txtchmod000file1.txtchmod命令(續(xù))改變多個(gè)文件的權(quán)限chmod755file1file2file3遞歸操作(-R)chmod-R700emails

chmod-R700.umask的作用思路擴(kuò)展……1.ShellOverviewShell用戶和操作系統(tǒng)之間的接口作為核外程序而存在文件子系統(tǒng)用戶硬件控制硬件內(nèi)核Shell用戶用戶用戶高級(jí)語(yǔ)言和實(shí)用程序系統(tǒng)調(diào)用進(jìn)程管理子系統(tǒng)進(jìn)程間通信存儲(chǔ)管理調(diào)度程序設(shè)備驅(qū)動(dòng)程序字符設(shè)備塊設(shè)備高速緩存核外程序Shell:用戶和操作系統(tǒng)之間的接口Shell:用戶和操作系統(tǒng)之間的接口csh其它程序bashX窗口系統(tǒng)Shell:作為核外程序而存在內(nèi)核Shell的雙重角色命令解釋程序Linux的開機(jī)啟動(dòng)過程;進(jìn)程樹Shell的工作步驟打印提示符;得到命令行;解析命令;查找文件;準(zhǔn)備參數(shù);執(zhí)行命令獨(dú)立的程序設(shè)計(jì)語(yǔ)言解釋器(reusabletools)各種不同的Shellshell名稱描述位置ash一個(gè)小的shell/bin/ashash.static一個(gè)不依靠軟件庫(kù)的ash版本/bin/ash.staticbshash的一個(gè)符號(hào)鏈接/bin/bshbash“BourneAgainShell”。Linux中的主角,來自GNU項(xiàng)目/bin/bashshbash的一個(gè)符號(hào)鏈接/bin/shcshCshell,tcsh的一個(gè)符號(hào)鏈接/bin/cshtcsh和csh兼容的shell/bin/tcshkshKornShell/bin/kshUNIX’sPhilosophy(Examples)RedirectionUse“echo”tocreateafile?PipeGetthecountoffilesinadirectory?重定向輸出系統(tǒng)定義三個(gè)標(biāo)準(zhǔn)文件:標(biāo)準(zhǔn)輸入(stdin)、標(biāo)準(zhǔn)輸出(stdout)、標(biāo)準(zhǔn)錯(cuò)誤輸出(stderr),對(duì)應(yīng)的文件描述符為0,1,2。用“>”改變輸出,用“2>”改變錯(cuò)誤輸出,用“>>”來追加到已有的文件中。重定向輸出示例$ls–l>lsoutput.txt$ls–l1>lsoutput.txt$ps>>lsoutput.txt$kill–HUP1234>killout.txt2>killerr.txt$kill–l1234>killout.txt2>&1(把標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都放入同一個(gè)文件)$catbar2>/dev/null(youseenothing)重定向輸入標(biāo)準(zhǔn)輸入有3種來源:thekeyboard(default),afile,andapipewc<newfiletheshellopensthefilenewfilewcnewfilethecommandopensthefilenewfilewc<newfile>result

(wccountsthenumberoflines,words,andcharactersinafile)管道(pipe)可以用管道操作符|來連接進(jìn)程。允許連接的進(jìn)程數(shù)目是沒有限制的。前一個(gè)命令的輸出是后一個(gè)命令的輸入。who>userlistwc-l<userlistwho|wc-l(withoutusingapipe)(whoissaidtobepipedtowc)command1|command2|…|commandn管道(pipe)(續(xù))ls-l

/etc|sort-r|moresort-rsortsthelistinginreverseordermoredisplaysthecontentsofatextfileontheterminal,onescreenfulatatimecat/etc/passwd|sort-r|grep“/bin/csh”|wc-lhowmanyusershavebeensetthedefaultshellofcsh?2.創(chuàng)建和執(zhí)行Shell程序編寫腳本文件執(zhí)行腳本文件運(yùn)行環(huán)境編寫腳本文件腳本文件注釋、退出碼(exitcode)#!/bin/sh#Hereiscommentsforfilein*doifgrep–qPOSIX$filethenmore$filefidoneexit0執(zhí)行腳本文件方法1:$shscript_file方法2:$chmod+xscript_file$./script_file用戶環(huán)境.bash_profile,.bash_logout,.bashrcfiles.bash_profile:用戶登錄時(shí)被讀取,其中包含的命令被bash執(zhí)行.bashrc:啟動(dòng)一個(gè)新的shell時(shí)讀取并執(zhí)行.bash_logout:登錄退出時(shí)讀取執(zhí)行3.Shell程序設(shè)計(jì)的語(yǔ)法變量條件測(cè)試條件語(yǔ)句重復(fù)語(yǔ)句命令表和語(yǔ)句塊函數(shù)其它3.1變量用戶變量環(huán)境變量參數(shù)變量和內(nèi)部變量用戶變量變量的賦值和使用var=valueecho$varread命令readvariable引號(hào)的用法雙引號(hào),單引號(hào)轉(zhuǎn)義符“\”環(huán)境變量環(huán)境變量說明$HOME當(dāng)前用戶的登陸目錄$PATH以冒號(hào)分隔的用來搜索命令的目錄清單$PS1命令行提示符,通常是”$”字符$PS2輔助提示符,用來提示后續(xù)輸入,通常是”>”字符$IFS輸入?yún)^(qū)分隔符。當(dāng)shell讀取輸入數(shù)據(jù)時(shí)會(huì)把一組字符看成是單詞之間的分隔符,通常是空格、制表符、換行符等。參數(shù)變量和內(nèi)部變量環(huán)境變量說明$#傳遞到腳本程序的參數(shù)個(gè)數(shù)$0腳本程序的名字$1,$2,…腳本程序的參數(shù)$*一個(gè)全體參數(shù)組成的清單,它是一個(gè)獨(dú)立的變量,各個(gè)參數(shù)之間用環(huán)境變量IFS中的第一個(gè)字符分隔開$“$*”的一種變體,它不使用IFS環(huán)境變量。條件測(cè)試退出碼test命令testexpression或[expression]test命令支持的條件測(cè)試字符串比較算術(shù)比較與文件有關(guān)的條件測(cè)試邏輯操作字符串比較字符串比較結(jié)果str1=str2兩個(gè)字符串相同則結(jié)果為真str1!=str2兩個(gè)字符串不相同則結(jié)果為真-zstr字符串為空則結(jié)果為真-nstr字符串不為空則結(jié)果為真算術(shù)比較算術(shù)比較結(jié)果expr1–eqexpr2兩個(gè)表達(dá)式相等則結(jié)果為真expr1–neexpr2兩個(gè)表達(dá)式不等則結(jié)果為真expr1–gtexpr2expr1大于expr2則結(jié)果為真expr1–geexpr2expr1大于或等于expr2則結(jié)果為真expr1–ltexpr2expr1小于expr2則結(jié)果為真expr1–leexpr2expr1小于或等于expr2則結(jié)果為真if

test$#-ne3;thenecho“youdidnotenterthreearguments”elseecho“youenteredtherightnumber”fi與文件有關(guān)的條件測(cè)試文件條件測(cè)試結(jié)果-efile文件存在則結(jié)果為真-dfile文件是一個(gè)目錄則結(jié)果為真-ffile文件是一個(gè)普通文件則結(jié)果為真-sfile文件的長(zhǎng)度不為零則結(jié)果為真-rfile文件可讀則結(jié)果為真-wfile文件可寫則結(jié)果為真-xfile文件可執(zhí)行則結(jié)果為真if[-f$1];then echo“Fileexists”else echo“Filedoesnotexist”fi邏輯操作邏輯操作結(jié)果!expr邏輯表達(dá)式求反expr1–aexpr2兩個(gè)邏輯表達(dá)式“And”(“與”)expr1–oexpr2兩個(gè)邏輯表達(dá)式“Or”(“或”)3.3條件語(yǔ)句if語(yǔ)句case語(yǔ)句if語(yǔ)句(1)形式if[expression]then statementselif[expression]then statementselif…else statementsfi緊湊形式;(同一行上多個(gè)命令的分隔符)if語(yǔ)句(2)例1(.bash_profile文件中)if[-f~/.bashrc];then.~/.bashrcfi例2#!/bin/shecho“Isthismorning?Pleaseansweryesorno.”readanswerif[“$answer”=“yes”];thenecho“Goodmorning”elif[“$answer”=“no”];thenecho“Goodafternoon”elseecho“Sorry,$answernotrecognized.Enteryesorno”exit1fiexit0case語(yǔ)句(1)形式casestrin str1|str2)statements;; str3|str4)statements;; *)statements;;esaccase語(yǔ)句(2)Example#!/bin/shecho“Isthismorning?Pleaseansweryesorno.”readanswercase“$answer”inyes|y|Yes|YES)echo“Goodmorning!”;;no|n|No|NO)echo“Goodafternoon!”;;*)echo“Sorry,answernotrecognized.”;;esacexit0#!/bin/shtputclearecho“\n1.Findfilesmodifiedinlast24hours\n2.Thefreediskspace\n3.Spaceconsumedbythisuser\n4.Exit\n\n”echo“SELECTION:\c”readchoicecase$choicein 1)find$HOME-mtime-1-print;; 2)df;; 3)du-s$HOME;; 4)exit;; *)echo“Invalidoption”;;esaccase語(yǔ)句(3)case語(yǔ)句(4)Usingwildcardsecho“Doyouwishtocontinue?(y/n):\c”readanswercase$answerin [Yy][Ee]*);;#matchesYES,yes,Yes,etc [Nn][Oo])exit;;#matchesNO,No,no,nO *)echo“Invalidoption”;;esaccase語(yǔ)句(5)Usingwildcardsfile=`ls–t*.java*.c2>/dev/null|head-1`case$filein *.c)gcc$file&&a.out;; *.java)javac$file;; *)echo“NoJavaorCprogramfound”;;esacThefirststatementselectsthelastmodified.cor.javafileandstoresthevalueinthevariablefile3.4重復(fù)語(yǔ)句for語(yǔ)句while語(yǔ)句until語(yǔ)句for語(yǔ)句(1)形式forvarinlistdo statementsdone適用于對(duì)一系列字符串循環(huán)處理forfileinchap20chap21chap22do cp$file$file”.bak” echo$filecopiedto$file”.bak”donefor語(yǔ)句(2)forfilein*.html*.htmdo

gzip$filedoneforfilein*.cdo gcc–o$file”x”$filedoneAppendxtoeachCprogramfilenametobecometheoutputexecutablefilenamewhile語(yǔ)句(1)形式whileconditiondo statementsdonewhile語(yǔ)句(2)Examplequit=nwhile[“$quit”!=“y”];doreadmenu_choicecase“$menu_choice”ina)do_something;;b)do_anotherthing;;…q|Q)quit=y;;*)echo“Sorry,choicenotrecognized.”;;esacdoneuntil語(yǔ)句形式untilconditiondo statementsdoneNotrecommended(whilestatementispreferred)3.5命令列表和語(yǔ)句塊命令列表命令組合語(yǔ)句塊命令表命令組合分號(hào)串聯(lián)command1;command2;…條件組合AND命令表

格式:statement1&&statement2&&statement3&&…OR命令表

格式:statement1||statement2||statement3||…grep"john"e.lst&&echo“patternfound”9876,johnwarren,nsw8769,johnhoward,act6758,eltonjohn,taspatternfoundgrep"john"f.lst||echo“patternnotfound”patternnotfound語(yǔ)句塊形式{statement1statement2…}或{statement1;statement2;…;}3.6函數(shù)形式func(){statements}局部變量local關(guān)鍵字函數(shù)的調(diào)用funcpara1para2…返回值return函數(shù)的例子(1):定義函數(shù)的例子(2):使用3.7其它雜項(xiàng)命令break,continue,exit,return,export,set,unset,trap,“:”,“.”,…捕獲命令輸出算術(shù)擴(kuò)展參數(shù)擴(kuò)展即時(shí)文檔雜項(xiàng)命令break:從for/while/until循環(huán)退出continue:跳到下一個(gè)循環(huán)繼續(xù)執(zhí)行exitn:以退出碼”n”退出腳本運(yùn)行return:函數(shù)返回export:將變量導(dǎo)出到shell,使之成為shell的環(huán)境變量set:為shell設(shè)置參數(shù)變量unset:從環(huán)境中刪除變量或函數(shù)trap:指定在收到操作系統(tǒng)信號(hào)后執(zhí)行的動(dòng)作“:”(冒號(hào)命令):空命令“.”(句點(diǎn)命令)或source:在當(dāng)前shell中執(zhí)行命令export命令腳本程序export1:腳本程序export2:expr命令expr

命令將它的參數(shù)當(dāng)作一個(gè)表達(dá)式來求值expr3+5(注意空格)x=3;y=5

expr$x-$y

expr$y/$xset命令set命令的作用是為shell設(shè)置參數(shù)變量捕獲命令輸出語(yǔ)法$(command)`command`舉例#!/bin/shecho“Thecurrentdirectoryis$PWD”echo“Thecurrentdirectoryis$(pwd)”exit0算術(shù)擴(kuò)展expr命令$((…))擴(kuò)展#!/bin/shx=0while[“$x”–ne10];doecho$xx=$(($x+1))doneexit0參數(shù)擴(kuò)展問題:批處理1_tmp,2_tmp,…方法#!/bin/shi=0while[“$i”–ne10];dotouch“${i}_tmp”i=$(($i+1))doneexit0參數(shù)替換的復(fù)雜形式here文檔(及時(shí)文檔)在shell腳本中向一條命令傳送輸入數(shù)據(jù)Example#!/bin/bashcat<<!CATINPUT!Hello,thisisaheredocument.!CATINPUT!4.實(shí)例分析Install腳本CD唱盤管理程序#!/bin/bash##安裝eclipse2.1.2腳本(eclipse2.1.2installshell)#filename:ei.sh(eclipse2.1.2)#/*...usethiscommandtolistzipfile...*/#unzip-leclipse-SDK-2.1.2-Linux-gtk.zip#/*...eXPorttheeclipseinstallDirectory(ECLPDIR)...*/exportECLPDIR=/dataunzip-d$ECLPDIReclipse-SDK-2.1.2-linux-gtk.zipunzip-d$ECLPDIReclipse-examples-2.1.2.zipunzip-d$ECLPDIRcdt-full-1.2-linux-gtk.zipunzip-d$ECLPDIR/eclipseemf_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseemf.source_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseemf.doc_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseuml2_200312011515.zipunzip-d$ECLPDIR/eclipseuml2.examples_200312011515.zipunzip-d$ECLPDIR/eclipsexsd_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipsexsd.doc_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipsexsd.source_1.1.1_20031020_1612WL.zipunzip-d$ECLPDIR/eclipseGEF-SDK-I20031015.zipunzip-d$ECLPDIR/eclipseGEF-Automated-Tests-I20031015.zipunzip-d$ECLPDIR/eclipseGEF-examples-I20031015.zipunzip-d$ECLPDIReclipse2.1.1-SDK-Linux-gtk-LanguagePackFeature.zipexportECLPDIR=/home/repository/eclipse/workspace運(yùn)行eclipse#!/bin/bash#執(zhí)行eclipseexportJAVA_HOME=/usr/java/jdk1.6.0_12exportCLASSPATH=/usr/java/jdk1.6.0_12/lib/opt/eclipse/eclipse-vm/usr/java/jdk1.6.0_12/bin/java-data~/workspace&#-vm參數(shù)用以指定使用哪

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論