Linux編程(第二版)全套教學課件_第1頁
Linux編程(第二版)全套教學課件_第2頁
Linux編程(第二版)全套教學課件_第3頁
Linux編程(第二版)全套教學課件_第4頁
Linux編程(第二版)全套教學課件_第5頁
已閱讀5頁,還剩684頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第一講Linux操作系統(tǒng)目錄結構與文件操作

(《Linux編程》第1章)本講教學目標:掌握Linux系統(tǒng)目錄結構掌握文件操作命令使用第1章Linux簡介與使用第2章LinuxShell編程第3章Linux環(huán)境C編程第4章(1)系統(tǒng)級IO第4章(2)文件系統(tǒng)第4章(3)磁盤空間管理第5講進程控制第6講線程管理與同步互斥第7章進程間通信第8章網絡編程第9章并發(fā)網絡服務器全套可編輯PPT課件163本章主要內容Linux/Unix系統(tǒng)簡介Linux目錄結構Linux系統(tǒng)用戶界面、命令格式(自學)Linux文件與命令操作(自學)一、UNIX/Linux系統(tǒng)簡介(1)UNIX系統(tǒng)簡介1.什么是UNIX系統(tǒng)是一種多用戶、多任務、多層次的操作系統(tǒng),廣泛用于金融、教育、科研、軍事領域,用于運行核心業(yè)務,管理企業(yè)關鍵數(shù)據資料、信息與Windows系列系統(tǒng)相比,具有安全性高、可靠性強、性能高優(yōu)點,可以一年365天、7×24小時不停機運行UNIX系統(tǒng)凝聚了一大批天才計算機科學家和程序員的智慧,結構清晰、功能強大、技術先進,是大學師生研究、學習操作系統(tǒng)原理、計算機系統(tǒng)工作原理首選的實例系統(tǒng)2.UNIX系統(tǒng)誕生1969年,由BellLabs(貝爾實驗室)KenThompson和DennisRitchie處于興趣開發(fā)而成,1971年完成版本11973年,DennisRitchie創(chuàng)造了C語言,與KenThompson一起用C語重寫了Unix的第三版內核,使維護和移植變得便利同時授權給科研機構與企業(yè)進一步發(fā)展,逐漸形成兩個版本線:加州大學Berkeley分校,1978年發(fā)展了研究版本BSDUNIXAT&T,1983年開發(fā)商業(yè)版本SystemV版本4(SVR4),在此基礎上早就了IBMAIX和HPUX兩個發(fā)現(xiàn)版本3.UNIX主要版本AIX:是IBM基于SVR4開發(fā)的一套UNIX操作系統(tǒng),性能高、安全、可靠性高,廣泛用于金融領域。Solaris:SunMicrosystems1982年推出基于BSDUnix的SunOS,以后在接口上向SVR4靠攏,新版本稱為Solaris,性能高、處理能力強,在高校、科研院所用得多HP-UX:是惠普公司以SVR4為基礎所研發(fā)成的類UNIX操作系統(tǒng)。IRIX:是SGI公司以SVR4與BSD延伸程序為基礎所發(fā)展成的UNIX操作系統(tǒng),具有很強的圖形處理功能,在游戲設計中廣泛使用的三維圖形庫編程openGL從此而來。4.UNIX系統(tǒng)存在的問題Unix的不同版本間不兼容,給應用開發(fā)帶來極大負擔搭建Unix系統(tǒng)的費用非常昂貴。主機、UNIX系統(tǒng)、開發(fā)工具、應用軟件需分別購買Unix系統(tǒng)源碼不開放,購買要錢,給學習、研究帶來不便(2)Linux系統(tǒng)概述1.什么是Linux?Linux是一種類UNIX操作系統(tǒng),繼承了Unix系統(tǒng)強大的功能和性能,采用與Unix系統(tǒng)兼容的操作命令,學會操作Linux一般就會操作UNIX系統(tǒng),學會在Linux下開發(fā)應用,就會在UNIX下開發(fā)應用Linux系統(tǒng)運行于廉價的PC和大多數(shù)計算機系統(tǒng)硬件,開放源碼,各種開發(fā)軟件豐富齊全、免費下載使用,如gcc、java、apache、hadoop、MLLIBLinux是廣大學生學習操作系統(tǒng)原理、計算機系統(tǒng)原理的優(yōu)秀實例系統(tǒng)Linux系統(tǒng)由芬蘭學生林納斯1991年開發(fā)第1版,經過20多年發(fā)展,已經成為一種成熟、優(yōu)秀的操作系統(tǒng),已成為今天世界上使用最多的一種UNIX類操作系統(tǒng):Linux可安裝在各種計算機硬件設備中,比如個人計算機、大型機、超級計算機、Android手機、平板電腦、路由器,世界上運算最快的10臺超級計算機全部運行Linux操作系統(tǒng)2.Linux內核版本Linux內核是指由林納斯親自維護的Linux操作系統(tǒng)核心代碼2001年,Linux2.4版本內核發(fā)布,2003年Linux2.6版本內核發(fā)布,使Linux逐漸成為一個成熟的操作系統(tǒng)常見的Linux內核版本有Linux2.4.20,Linux2.6、Linux3.2、Linux4.6.4等,其中r.x.y:r-主版本號,x-偶數(shù)穩(wěn)定奇數(shù)開發(fā),y-錯誤修補次數(shù)3.Linux發(fā)行版本Linux發(fā)現(xiàn)版本是廠商將Linux內核與外圍實用程序和文檔包裝,提供安裝界面和系統(tǒng)配置、管理工具等,形成發(fā)行系統(tǒng)目前主要發(fā)現(xiàn)版本有:RedHatEnterpriseLinux(RHEL):主要用作服務器FedoraUbuntu:界面美觀、功能強大CentOS:是Linux服務器最有名最常用的發(fā)行版.中標麒麟(NeoKylin):普華Linux(i-soft)由于采用相同內核,Linux應用程序在不同版本間可做到二進制代碼級兼容練習二、Linux系統(tǒng)目錄結構

(1)目錄樹結構Linux與所有Unix系統(tǒng)具有大體一致的目錄結構是一顆以”/”為根目錄的樹,無盤符概念,所有分區(qū)的文件掛載在某個目錄下各個目錄的取名和文件內容有統(tǒng)一規(guī)定,是一種規(guī)范可根據目錄名和文件名推斷其大概功能/

/binbinary(二進制)C:\WINDOWS\system32/bootboot

/devdevice

/etcetcetera(等等)注冊表/home

C:\DocumentsandSettings/include、/usr/include

/lib/usr/liblibrary(庫)C:\WINDOWS\system32/lost+found

/mntmount

/optoption

/procprocess注冊表/root

/sbin/usr/sbinsystembinary

/selinux

securelinux

/srv

server

/tmptemporaryC:\Windows\Temp/usrUnixSystem(UserSoftware)ResourcesC:\ProgramFiles/varvariable

(2)主要目錄說明:三、Linux目錄結構設計的好處①用戶創(chuàng)建的文件、檔案全部放在/home目錄下,規(guī)范、方便管理、可靠性好;②可創(chuàng)建專用系統(tǒng)分區(qū),保存Linux系統(tǒng)文件,以只讀方式掛載在/usr目錄下,安全性好;③可創(chuàng)建一個專用分區(qū),保存動態(tài)增長的文件檔案,以讀寫方式掛載到/var目錄下,不影響其他文件;④所有的UNIX和Linux目錄結構與上述規(guī)范大體相似,同時也方便了人們的學習。練習:三、Linux系統(tǒng)安裝、啟動、登錄、用戶界面與命令格式

(1)安裝、啟動、登錄看視頻(2)、

三種系統(tǒng)操作界面

1.圖形界面2.命令界面

3.編程接口open、read、write、close等,本課程基本上就是學習Linux編程接口(3)Linux命令格式1.Linux命令格式$命令名選項參數(shù)1參數(shù)2……命令名:由小寫英文字母構成的字符串,命令功能為英文單詞含義,如date、cp、mv、who、ls命令選項:是對命令的特別定義,以“-”開始,指示命令按特定模式執(zhí)行,產生輸出,如ls-l、ls-a若同時使用多個選項,多個選項可用一個“-”連起來,如ls–la命令選項出現(xiàn)順序一般沒有要求,如ls-l-a與ls-a–l功能相同

gcchello.c-ohello與gcc-ohello.chello功能相同命令參數(shù):提供命令運行的信息,或者是命令執(zhí)行過程中所使用的文件名,從哪里可以得到輸入,以及把輸出送到什么地方

如:cpfile1file2、mvfile1dir1、mkdirdir2練習:2.命令說明1)命令輸出,命令執(zhí)行成功與否判定執(zhí)行成功:輸出期望信息,或無任何輸出,直接顯示命令提示符$失?。猴@示出錯信息,格式:”命令名:出錯描述”示例:$cd$pwd/home/can$LS

bash:LS:commandnotfound$

ls-P

ls:invalidoption-P$

ls-lPPls:cannotaccessPP:Nosuchfileordirectory2)命令聯(lián)機幫助百度百科Info命令,如$infopwdMan命令,如$manpasswd3)本課命令輸入描述說明四、Linux文件、目錄操作及文件屬性、權限

通常普通用戶的主要工作是文件檔案處理,輸入命令文件名運行程序,通過命令從文件讀入輸入數(shù)據,處理后,保存到另一文件。本課程所有實驗任務都屬于這類工作Linux系統(tǒng)為每個普通用戶在/home目錄下創(chuàng)建了一個用戶名為目錄名的“家”,如用戶can的“家”是/home/can,用戶guest的“家”是/home/guest;但根用戶root的“家”在目錄/root普通用戶通常在其“家”目錄下進行文檔處理,創(chuàng)建、修改、刪除文件檔案,不能增刪“家”之外其他目錄中的文件檔案(安全起見)(一)

目錄路徑與目錄操作

I、絕對路徑、工作目錄、相對路徑每個文件在某個目錄之下,要操作或訪問某個文件,應在命令或程序中通過路徑方式給出文件所在位置。給出文件路徑方法有兩種:1.絕對路徑:給出從根目錄開始一直到所要操作文件名、中間以“/”隔開的完整路徑。示例:$cat/etc/passwd、

$more/home/can/NachOS-4.1/code/testfd=open("/home/can/work/f1",O_RDONLY);fp=fopen("/home/can/work/f1","r+");2.工作目錄相對路徑:為縮短文件路徑字符串長度,

Linux系統(tǒng)為每個命令窗口(Terminal)和應用進程設置一個工作目錄,工作目錄初始設置為用戶的“家”,可用命令cd改變當用戶操作工作目錄中文件時,僅需在命令中給出文件名,如touchf1若操作非工作目錄下文件,只需給出絕對路徑中除工作目錄之外的部分。示例:若當前工作目錄為“/home/can”,則文件/home/can/NachOS-4.1/code/test/add.c可用相對路徑表示為NachOS-4.1/code/test/add.c,相應命令檢視命令簡化為cat

NachOS-4.1/code/test/add.cII、幾個特殊目錄(“.”、”..”、”~”、“-”)Linux系統(tǒng)定義幾個符號來表示一些常用的特殊目錄,給命令輸入帶來方便“.”:當前工作目錄,若工作目錄為/home/can,則在文件路徑中,“.”等同于/home/can“..”:上一層目錄,若當前目錄為/home/can,則“..”表示/home“-”:前一個工作目錄,如當前工作目錄為/home/can,執(zhí)行cd/etc后,“.”表示/etc,而“-”表示/home/can;“~”:表”目前用戶”所在的家目錄,若但其用戶為can,則“~”表示/home/can;~guest代表guest家目錄“/home/guest”。練習:III、Linux目錄操作命令(cd,pwd,mkdir,rmdir,rm)1.cd(變換工作目錄)、pwd(顯示當前工作目錄)cd(changedirectory)命令改變當前工作目錄,使用pwd(printworkdirectory)命令顯示當前工作目錄的絕對路徑通常人們喜歡將兩個命令聯(lián)合使用,用cd切換到目標目錄,用pwd驗證切換到哪里去了。范例:$

pwd/home/can$

cd~guest$pwd/home/guest$cd~$

pwd/home/can$

cd

$

cd..$

pwd/home

$

cd-$

cd/var/spool/mail

$cd../mqueue思考題2.mkdir(創(chuàng)建目錄)、rmdir(刪除空目錄)、ls(檢視目錄),rm(刪除非空目錄)一般在某個mkdir、rmdir、rm命令后接一個ls(list)命令,列出文件目錄,以驗證目錄創(chuàng)建、目錄刪除操作是否成功范例$cd/tmp$pwd

/tmp$rm-rf*

$ls

$mkdirtest

$ls

test$mkdirtest1test/subtest2

$ls.testtest1test2test:Sub$rmdirtest1

$rmdirtestrmdir:failedtoremove`test1':Directorynotempty$rm-rftest$ls

test23.ls(文件目錄檢視命令)

格式:$ls[-aAdfFhilRS]目錄名

常用選項:-a:列出全部的檔案(或稱文件),連同文件名以“.”開頭的隱藏檔案(文件)-A:列出全部的檔案,連同隱藏檔,但不包括.與..這兩個目錄,這個選項用得多;-F:根據檔案、目錄等信息,給予附加數(shù)據結構,例如:*:代表可執(zhí)行檔;/:代表目錄;=:代表socket檔案;|:代表FIFO檔案;-i:列出inode位置,而非列出檔案屬性;-l:以長格式列出目錄內容,包含檔案的屬性等等數(shù)據,這個選項用得多;-R:連同子目錄內容一起列出來;-i:列出inode位置,而非列出檔案屬性;范例:$cd

$ls

DesktopNachos-3.4-for-ubuntu.tar.gzPublic

$ls-A.bash_history.lesshstPictures

$ls/etc…$ls-FDesktop/nachos-3.4/Pictures/fifo1|a.out*test/f1$ls-l~total24708drwxr-xr-x2rootroot40962012-08-2117:31Desktopdrwxr-xr-x2rootroot40962012-08-1823:27Documentsdrwxr-xr-x2rootroot40962012-08-1823:27Downloads-rw-r--r--1rootroot02015-02-0111:41f1prw-r--r--1rootroot02015-02-0111:38fifo1$ls-i686757Desktop686812nachos-4.0.tar807026Documents807159NachOS-4.1.bak$ls-ial683678-rw1rootroot74282014-04-0515:44.bash_history686917-rw-r--r--1rootroot31352012-08-1915:07.bashrc925835drwx5rootroot40962015-02-0108:07.cache678320drwx9rootroot40962012-10-2417:55.config(二)

文件屬性與權限

I、文件屬性描述有9種,可用命令ls–l列出文件類型和訪問權限位結構II、文件訪問權限1.操作權限含義對于普通文件、管道和設備等文件來寫來說,r權限:該用戶能讀這個文件的內容,w權限:表示能更改文件內容x權限:能執(zhí)行這個文件代表的程序或命令對于目錄文件來說r權限:能列該目錄內容,w權限:在該目錄中增加或刪除文件,x權限:能用cd命令進入該目錄示例:-rwxr-xr-x

1canusers 1234567 2015-02-0111:41 hellodrwxr-xr--2aliceusers40962015-02-0112:41 sub(三)Linux文件操作命令

I、復制、移動與刪除文件(cp,rm,mv,ln)ln(link)用于建立硬鏈接與符號鏈接,硬連接指向同一索引節(jié)點的另一文件名;mv(move)用于移動文件或目錄到一個新的目錄位置,也可以用于更名(rename)文件;rm(remove)用于移除文件,不但可刪除文件,還可刪除目錄。1.復制文件(cp)命令格式:cp[-adfilprsu]源文件(source)目的文件(destination)

cp[options]source1source2source3Directory

常用選項:-f:為強制(force)的意思,若有重復或其它疑問時,不會詢問使用者,而強制復制;-i:若目的文件(destination)已經存在時,在覆蓋時會先詢問確認-l:創(chuàng)建文件的硬連結(hardlink),而非復制檔案本身;-r:遞歸持續(xù)復制,用于目錄復制;-s:復制成為符號連結文件(symboliclink),亦即“快捷方式”文件;范例1(復制單個文件):將家目錄下的.bashrc復制到/tmp下,文件名改為bashrc$cd/tmp

$cp~/.bashrcbashrc$

ls范例2(復制單個文件):將/var/log/wtmp復制到/tmp底下,文件名不變$cd/tmp$cp/var/log/wtmp.$ls-l/var/log/wtmpwtmp-rw-rw-r--1rootutmp71808Jul1812:46/var/log/wtmp-rw-r--r--1rootroot71808Jul1821:58wtmp范例3:(復制整個目錄):復制/etc/這個目錄下的所有內容到/tmp底下$cd/tmp

$cp-rf/etc//tmp范例4(建立硬連接、符號鏈接):將范例一復制的bashrc建立一個硬鏈接和一個快捷方式$

ls-lbashrc$cp-sbashrcbashrc_slink或ln-sbashrcbashrc_slink$

cp-lbashrcbashrc_hlink或lnbashrcbashrc_hlink

$

ls-lbashrc*范例5(同時復制多個文件):將家目錄的.bashrc及.bash_history復制到/tmp底下$cp~/.bashrc~/.bash_history/tmp2.rm(移除檔案或目錄)

命令格式:#rm[-fir]檔案或目錄常用選項:-f:就是force的意思,強制移除;-i:互動模式,在刪除前會詢問使用者是否動作-r:遞歸刪除啊!見文件刪文件,見目錄刪目錄范例1:復制一個文件然后刪除之$cd/tmp$cp~/.bashrcbashrc$rmbashrc范例2:刪除一個不為空的目錄$mkdirtest$cp~/.bashrctest/$rmdirtestrmdir:`test‘:Directorynotempty$rm-rftest3.mv(移動檔案與目錄,或更名)

常用格式:mv[-fiu]sourcedestination(檔案或目錄更名)

mv[options]source1source2source3Directory(檔案或目錄移動)

常用選項:-f:force強制的意思,強制直接移動而不詢問;-i:若目標檔案(destination)已經存在時,就會詢問是否覆蓋!-u:若目標檔案已經存在,且source比較新,才會更新(update)范例1(單個文件移動):復制一檔案,建立一目錄,將檔案移動到目錄中$

cd/tmp$cp~/.bashrcbashrc$mvbashrcmvtest

$

cd/tmp$cp~/.bashrcbashrc$mkdirmvtest$mvbashrcmvtest范例2:(目錄更名):將剛剛建立的目錄mvtest稱更名為mvtest2$mvmvtestmvtest2范例3:(多文件移動):再建立兩個檔案,再全部移動到/tmp/mvtest2中$cp~/.bashrcbashrc1$cp~/.bashrcbashrc2$mvbashrc1bashrc2mvtest2練習II、文件內容查閱(cat,tac,head,tail,more,less,od)1.檢視文本文件內容:cat,tac,head,tail,more,less(范例)$cat/etc/passwdroot:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/sh$more/etc/passwd……avahi-autoipd:x:103:108:Avahiautoipdaemon,,,:/var/lib/avahi-autoipd:/bin/falseavahi:x:104:109:AvahimDNSdaemon,,,:/var/run/avahi-daemon:/bin/false--More--(51%)$less/etc/passwd……avahi-autoipd:x:103:108:Avahiautoipdaemon,,,:/var/lib/avahi-autoipd:/bin/falseavahi:x:104:109:AvahimDNSdaemon,,,:/var/run/avahi-daemon:/bin/false2.創(chuàng)建與編輯文件(gedit,touch,dd)gedit:創(chuàng)建和編輯文本文件(如源程序)touch:創(chuàng)建空文件,更新文件修改時間dd:創(chuàng)建指定大小,內容初始化為0的文件gedit$gedit&或$geditp1.c(2)在/tmp目錄下新建一個空文件testtouch$cd/tmp$

touchtesttouch(3)在/tmp目錄下創(chuàng)建一個大小為10MB的文件testdd:$cd/tmp$

ddif=/dev/zeroof=testddcount=10240bs=1024$ls-ltestdd-rw-r--r--1rootroot0Jul1920:49testtouch(四)

檔案屬性修改(touch,chmod)

文件其他屬性在文件編輯過程中自動修改,文件權限信息通過chmod命令修改,文件所屬用戶、所屬用戶組用命令chown和chgrp修改chmod命令基本格式為:范例:創(chuàng)建文件f52、f521、f522,將f52權限更改為777,為所有用戶添加對f521讀寫權限,去掉所有用戶對f522的寫權限練習:思考題1.161)一個Linux文件的八進制數(shù)訪問權限為755,用ls-l命令顯示的文件權限是什么?用ls-l命令顯示的文件權限是rw-r--r--,用八進制數(shù)表示的權限值是多少?2)寫出命令,在當前目錄下創(chuàng)建文件f54,將其訪問權限設置為664.3)當前目錄下某個文件test.sh的權限是rw-r--r--,成功執(zhí)行命令chmod+xtest.sh后,test.sh的權限變成___________________,用八進制數(shù)表示為____________。(五)使用通配符(*,-,?)一次操作多個文件(目錄)

*:匹配任何字符串?:匹配任何一個字符(六)

檔案的壓縮與打包(tar命令)

I、文件打包和解包常用格式:$tar<選項>[壓縮文件]<文件列表>

常用選項:

-cvf打包

-xvf解包

-czvf打包后壓縮成.gz格式恩及

-zxvf先對.gz文件解壓縮,再解包

-cjvf打包并壓縮成.bz2格式文件

-xjvf先對.bz2文件節(jié)壓縮,再解包范例:在當前目錄下創(chuàng)建目錄dir5,在其中創(chuàng)建四個文件f1、f2、f3、f4,對該目錄打包并壓縮成文件dir5.tar.gz,刪除該目錄,然后解包dir5.gz:2.在Windows主機與Linux虛擬機之間進行檔案互傳

(1)文本復制(2)文件拖放:看視頻練習:總結:即興總結課后作業(yè):命令練習實驗第2章LinuxC編程環(huán)境本章概述本章的學習目標主要內容本章概述

本章主要講述shell基本編程方法、Shell環(huán)境變量、Shell控制結構、Shell函數(shù)、Shell輸入輸出的基本概念、語法結構和編程方法,其中介紹的示例都淺顯易懂,幫助讀者掌握shell基本編程方法。本章重點是shell變量、輸入輸出重定向、管道、環(huán)境變量、標準文件描述符的概念和基本使用方法本章學習目標掌握Shell腳本、變量、表達式、數(shù)學運算、字符串處理、輸入輸出的語法結構掌握使用shell條件和條件、選擇、循環(huán)三大控制結構編程的基本編程方法理解全局變量、局部變量、環(huán)境變、命令行參數(shù)量基本概念與用途掌握文件I/O和I/O重定向的基本編程方法理解Shell函數(shù)本章主要內容Shell編程基本概念Shell數(shù)學運算與字符串處理Shell條件與if控制結構循環(huán)結構環(huán)境變量與命令行參數(shù)Linux全局變量和環(huán)境變量Linux文件I/O、I/O重定向和管道命令行參數(shù)shell函數(shù)2.1Shell編程基本概念1.shell腳本程序實例shscri.sh組成Shell腳本的語句可包括Linux命令、賦值語句、輸入輸出語句、流程控制結構”#!/bin/bash//注釋行l(wèi)ist=`ls./temp`//該命令的輸出為表達式值forfin$listdomv./temp/$f./temp/$f.txtdoneechofinished!//輸出信息“finished!”$chmod+xshscri.sh$./shscri.shfinished!一.Shell腳本程序結構二.Shell變量與賦值表達式1.變量定義和賦值Shell變量無需事先定義直接復制,在給變量賦值時自動獲得定義Shell變量值的類型都是字符串,可以將任何字符串賦值給變量。值通過等號直接賦給用戶變量,在變量、等號和值之間不能出現(xiàn)空格示例:var1=10var2=57var4=testingvar5="stillmoretesting"exvar.c:#!/bin/bash#testingvariablesnum=3guest1=Aliceguest2="BillGates"msg="$guest1logsoutbeforethe${num}thday."echo$msgecho"currentdirectoryof${guest2}is`pwd`."2.Shell變量引用和shell表達式給Shell變量的賦值表達式可以由字符串常量、Shell變量引用、Linux命令輸出直接拼接而成。Shell要求通過美元符號($)來引用變量若被引用的shell變量名后緊接著字母、數(shù)字、下劃線等字符,則應將變量名用花括號({})括起$chmod+xexvar.sh$./exvar.shAlicelogsoutbeforethe3thday.currentdirectoryofBillGatesis/home/xuqg/temp.思考題下面的shell腳本存在多處錯誤,每行都有錯,請指出來并予以更正。#!bin/bash var1=5var2=helloworldvar3=$var2abcdecho我的當前目錄是:'pwd'四、Shell輸入輸出語句Shell腳本用echo命令變量值或包含變量值、字符串常量、命令輸出的表達式值顯示出來shell腳本用read命令讓用戶從鍵盤終端輸入信息,存入Shell變量格式:read[-s][-pprompt]variable1variable2…表示將用戶輸入的多個字符串依次存入shell變量variable1、varible2、…。-pprompt:表示在提示用時輸入前顯示提示串prompt-s:表示默讀,用戶輸入信息時無任何顯示,用于輸入密碼等敏感信息示例程序io.sh:#!/bin/bash#testingreadandechocommandsread-p"Enteryourname:"firstlastecho"Checkingdatafor$last,$first"read-s-p"請輸入您的密碼:"passecho"Isyourpasswordreally$pass?“$chmod+xio.sh$./io.shEnteryourname:BillGatesCheckingdataforGates,Bill請輸入您的密碼:123456Isyourpasswordreally123456?五、退出腳本和退出狀態(tài)Bash啟動的一條命令或一個腳本運行完成后,我們經常需要了解命令或腳本的執(zhí)行情況,成功、失敗,還是壓根就沒有執(zhí)行,如果失敗,是什么原因所致。后續(xù)命令需要根據退出狀態(tài)做不同處理。在Linux系統(tǒng)中,任何命令、腳本執(zhí)行完成后,都有一個退出狀態(tài),即使命令根本沒有執(zhí)行或不存在,也會有一個退出狀態(tài)。按照Linux系統(tǒng)規(guī)范,命令或腳本退出狀態(tài)碼是一個介于0和255之間的整數(shù)值,一般0代表執(zhí)行成功,>0代表執(zhí)行失敗。命令或腳本的退出狀態(tài)有用戶設置和系統(tǒng)設置兩種情況。(1)用戶設置程序或腳本退出狀態(tài)碼,格式為:exit狀態(tài)碼狀態(tài)碼為0表示腳本執(zhí)行成功,為非0表示失敗,非0編碼與失敗原因之間的對應關系由編程人員自行定義。(2)系統(tǒng)設置退出狀態(tài)代碼描述代碼描述0命令成功完成128無效的退出參數(shù)126命令無法執(zhí)行128+x使用Linux信號的致命錯誤127沒有找到命令130CTRL-C終止進程Linux將進程(命令、腳本執(zhí)行)的退出狀態(tài)保存在一個特殊的shell變量(?)中,可在進程結束時,立即執(zhí)行echo等命令讀取該變量的值來取得前一個命令或腳本的退出狀態(tài)。$dateSatSep2910:01:30EDT2007$echo$?0$asdfg-bash:asdfg:comrnandnotfound$echo$?127$echo$?0$./myprog.c-bash:./myprog.c:permissiondenied$echo$?126status1.sh#/bin/bashpwd$bash./status1.sh$echo$?0status2.sh#/bin/bashexit0$bash./status2.sh$echo$?0Status3.sh#/bin/bashexit10$bash./status3.sh$echo$?10status4.cintmain(){exit(5);}$gcc-ostatus4status4.c$./status4$echo$?5status5.cintmain(){atoi("123");}$gcc-ostatus5status6.c$./status5$echo$?123練習題2.2在當前目錄下輸入命令”ls-l”的輸出結果如下:-rw-rw-r--1xuqgxuqg114Jul1519:07test.sh-rw-rw-r--1xuqgxuqg110Jul1518:46semlib.c~drwxr-xr-x4rootroot4096Feb100:18dir1請問下列各命令序列中echo$?的輸出結果是什么?(注意:LinuxShell允許在一行輸入多個命令,只需命令間以分號隔開)./dir1;echo$?;echo$?cd;echo$?./semlib.c;echo$?;$echo$?./abcd;echo$?2.2Shell數(shù)學運算與字符串處理一、Shell數(shù)學計算Linuxshell提供兩種實施數(shù)學運算的機制:一種方法是使用expr命令,格式為exprexpression;另一種方法用美元符號和方括號把數(shù)學表達式括起來,格式為$[expression]。示例:arith.sh#!/bin/bashvarl=100var2=45var3=50var4=$[$varl*($var2-$var3)]echoThefinalresultis$var4$chmod+xarith.sh$./arith.shThefinalresultis-500二、Shell中字符串處理BashShell本身沒有庫函數(shù)概念,對字符串處理的支持主要通過expr、awk等命令來實現(xiàn)功能編程方法編程示例抽取子字符串exprsubstr字符串開始索引長度str=`exprsubstr"abc"22`結果str值為:bc${str:pos}${str:pos:len}功能:在字符串$str中,抽取從位置pos開始,長度為len的子串str="abc"

str2=${str:1}

str3=${str:1:2}結果:str2、str3的值都是bc計算字符串的長度${#string}exprlength$string功能:計算字符串$string的長度str=acbdefn1=${#str}n2=`exprlength`結果為n1、n2的值都是5計算子串的出現(xiàn)位置exprindex$stringsubstring功能:在字符串$string上找出substring中字符第一次出現(xiàn)的位置,若找不到則exprindex返回0或1。str="hello,everyone"n1=`exprindex"$str"my`n2=`exprindex"$str"ev`n3=`exprindex"$str"ev.*`結果:n1為0,n2、n3都是2找匹配字符串長度exprmatch$stringsubstring功能:計算$string從頭開始匹配substring字符串長度,返回匹配到的字符串長度,若找不到則返回0string="hello,everyone"n1=`exprmatch"$string"he`n2=`exprmatch"$string"he.*`結果:n1為2,n2為14其中,.*正則表達式通配符,表示匹配任何子串刪除字符串${string#substring}功能:刪除string開頭處與substring匹配的最短字符子串str="20091111readnowplease"str1=${str#2*1}結果str1為:111readnowplease刪掉了從字符2開始,到第一個1為止的子串${string##substring}功能:刪除string開頭處與substring匹配的最長字符子串str="20091111readnowplease"str2=${str##2*1}結果str2為:readnowplease刪掉了從字符2開始,到第一個1為止的子串思考題2.3請寫出執(zhí)行下面腳本的輸出:#!/bin/bashstring="hello,everyonemynameisxiaoming"echoecho${#string}exprindex"$string"myexprmatch"$string"hell.*exprmatch"$string"hellecho${string:10:5}exprsubstr"$string"1052.3Shell條件與if控制結構Bash可以對Shell腳本進行流程控制,提供if、case和for等控制結構,使Shell具有C、Java等高級語言的流程控制能力一、if結構化語句

不帶else分支的if語句格式:ifcommandthencommandsfi帶else分支的if語句格式:ifcommandthencommandselsecommandsfi示例1:condif1.sh1#!/bin/bash2#testingtheifstatement3ifdate4then5echo"itworked"6fi$./condif1.shSatSep2914:09:24EDT2007itworked示例2:condif2.sh1#!/bin/bash2#testingabadcomrnand3ifasdfg4then5echo"itdidn'twork"6fi7echo"we'reoutsideoftheifstatement"$./condif12.sh./test2:line3:asdfg:commandnotfoundwe'reoutsideoftheifstatement示例3:condif3.sh1#!/bin/bash2#testingmultiplecommandsinthethensection3testuser=can4ifgrep$testuser/etc/passwd5then6echoThebashfilesforuser$testuserare:71s-a/home/$testuser/.b*8else

9echo"Theusername$testuserdoesn'texistonthissystem"10fi$./condif3.shrich:x:500:500:RichBlum:/home/rich:/bin/bashThefilesforuserrichare:/home/rich/.bash_historyIhome/rich/.bash_profile/home/rich/.bash_logout/home/rich/.bashrc二、test命令test命令可以做數(shù)值比較、文件屬性檢查、字符串比較,用于if條件判斷。過test命令算出的條件值為true,則test命令將其退出狀態(tài)碼設置為0,if語句執(zhí)行其Then分支,如果算出的條件值為false,則test命令退出狀態(tài)為非0,if語句的else分支執(zhí)行格式:if[condition]

then

commandsfiiftestconditionthencommandsfi1.數(shù)值比較比較描述比較描述n1-eqn2檢查n1是否等于n2n1-len2檢查n1是否小于或等于n2n1–gen2檢查n1是否大于或等于n2n1-ltn2檢查n1是否小于n2n1-gtn2檢查n1是否大于n2n1-nen2檢查n1是否不等于n2cmpnum.sh是一個例子:#!/bin/bash

#usingnumerictestcomparisons

val1=10

va12=11

if[$va11-gt5)

then

echo"Thetestvalue$va11isgreaterthan5"

fi

if[$va11-eq$va12]

then

echo"Thevaluesareequal"

e1se

echo"Thevaluesaredifferent"

fi$./cmpnum.shThetestvalue10isgreaterthan5Thevaluesaredifferent2、字符串比較比較描述比較描述str1=str2檢查str1與str2是否相同str1>str2檢查str1是否大于str2str1!=str2檢查str1與str2是否不同-nstr1檢查str1長度是否大于0str1<str2檢查str1是否大小于str2-zstr1檢查str1長度是否為0示例腳本cmpstr.sh1234567891011121314151617#!/bin/bash#test1ngstringlengthvall=testingva12=''if[-n$vall]thenecho"Thestring'$vall'1snotempty"e1seecho"Thestring'$vall'isempty"fi

if[-z$va12]thenecho"Thestring'$val2'1snotempty"e1seecho"Thestring'$val2'isempty"fi$./cmpstr.shThestring'testing'isnotemptyThestring"isempty3、文件測試比較描述-dfile檢查file是否存在并且是一個目錄-efile檢查file是否存在-ffile檢查file是否存在并且是一個文件-rfile檢查file是否存在并且可讀-sfile檢查file是否存在并且不為空-wfile檢查file是否存在并且可寫-xfile檢查file是否存在并且可執(zhí)行-Ofile檢查file是否存在并且被當前用戶擁有-Gfile檢查file是否存在并且默認值為當前用戶組file1-ntfile2檢查file1是否比file2新file1-ozfile2檢查file1是否比file2舊(1)檢查對象是否存在示例cmpfile.sh123456789101112131415161718#!/bin/bash#checkifafileif[-e$HOME]thenecho"Theobject$HOMEexists,isitafile?"if[-f$HOME]thenecho"Yes,it'safile!"elseecho"No,$HOMEisnotafile!"fiif[-f$HOME/.bash_history]thenecho"But$HOME/.bash_historyisafile!"fielseecho"Sorry,theobjectdoesn'texist"fi$./cmpfile1.shTheobject…exists,isitafl1e?NO,…isnotafile!But…/.bash_historyisafile!(2)檢查文件是否能夠運行cmpfile2.sh123456789#!/bin/bash#testingfi1eexecutionif[-xcmpfile1.sh]thenecho"Youcanrunthescript:"./cmpfile1.she1seecho"Sorry,youareunab1etoexecutethescript"fi$./cmpfile2.shYoucanrunthescript:….三、復合條件檢查if-then語句可以使用布爾邏輯來合并檢查條件,可以使用兩個布爾操作符:...[conditionl]&&[condition2]...[conditionl]||[condition2]cmpand.sh示例腳本1 #!/bin/bash2 #testingcompoundcomparisons3 if[-d$HOME]&&[-w$HOME:/testing]4 then5 echo"Thefileexistsandyoucanwritetoit"6 else7 echo"1can'twritetothefile"8 fi$./cmpand.shIcan'twritetothefile$touch$HOME:/testing$./cmpand.shThefileexistsandyoucanwritetoit四、case語句格式:casevariableinpatternl|pattern2)commandsl;;pattern3)commands2;;*)defaultcommands;;esaccondcase.sh示例程序:1 #!/bin/bash2 #usingthecasecommand3 USER=rich4 case$USERin5 rich|barbara)6 echo"Welcome,$USER"7 echo"Pleaseenjoyyourvisit";;8 testing)9 echo"Specialtestingaccount";;10 essica)11 echo"Don'tforgettologoffwhenyou'redone";;12 *)13 echo"Sorry,you'renotallowedhere";;14 esac$./condcase.shWelcome,richPleaseenjoyyourvisit2.4循環(huán)結構一、for循環(huán)結構格式:forvarinlistdocommandsdone1.讀取列表或變量中的值loopfor1.sh是一個示例:1 #!/bin/bash2 #basicforcommand3 fortestinAlabamaAlaskaArizona"NewMexico"4 do5 echoThenextstateis$test6 done$./loopfor1.shThenextstateisAlabamaThenextstateisAlaskaThenextstate1sArizonaThenextstateisNewMexico2.讀取命令結果中的值loopfor2.sh示例:1 #!/bin/bash2 #readingvaluesfromafile3 file="states"4 forstatein`cat$file`5 do6 echo"Visitbeautiful$state"7 done3.使用通配符讀取目錄loopfor3.sh示例程序:1 #!/bin/bash2 #iteratethroughallthefilesinadirectory3 forfilein/home/can/work/*4 do5 if[-d"$file"]6 then7 echo"$fileisadirectory"8 elif[-f"$file"]9 then10 echofileisafile"11 fi12 done$./loopfor3.sh/home/can/work/chap3isadirectory……編程題2.4ls-F命令的輸出如下:

chap3/chap4/chap5/chap6/chap7/chap8/chap9/lib/

請編寫Shell程序,將子目錄lib下的libwrapper.a和wrapper.h兩個文件復制到chap3~chap9這七個目錄中。二、while循環(huán)結構whiletestcommanddoothercommandsdone示例程序loopwhile1.sh1 #!/bin/bash2 #whilecommandtest3 varl=104 while[$varl-gt0]5 do6 echo$var17 var1=$[$var1-1]8 done$./loopwhile1.sh1098…..三、until循環(huán)結構untiltestcommandsdoothercommandsdone示例loopuntil.sh1 #!/bin/bash2 #usingtheuntilcornmand3 var1=1004 until[$var1-eq0]5 do6 echo$var17 var1=$[$var1-25]8 done$./loopuntil.sh10075……2.5Linux全局變量和環(huán)境變量一、LinuxShell層次結構$bash./scope.sh命令①$bash 命令②$./scope.sh 命令③$exit 命令④$../scope.sh

命令⑤二、Shell全局變量與局部變量全局變量是在所有子Shell中都可見的Shell變量,而局部變量是僅在創(chuàng)建它的Shell中可見的變量。局部變量是通過直接給變量賦值而創(chuàng)建的Shell變量,而全局變量則是用export命令處理過的局部變量以下腳本就創(chuàng)建了局部變量var1和兩個全局變量var2、var3:var1=localexportvar2="globalvar2"var3="globalvar3"exportvar32假設腳本文件scope2.sh #!/bin/bash echo$var1 echo$var2終端執(zhí)行的命令序列:$var1=local$exportvar2="globalvar2"$bash./scope2.sh$bash$./scope.sh$exit$../scope2.sh或$source./scope2.sh思考題2.6在上述腳本中,將第1行命令改為“exportvar1=local”,將第2行命令改為“var2=globalvar2”,請問第3、5、7行命令的輸出結果是什么?三、Linux環(huán)境變量系統(tǒng)環(huán)境變量實際上是在Linux系統(tǒng)啟動、用戶登錄、創(chuàng)建Shell會話(打開命令窗口)的過程中,執(zhí)行特定初始化腳本創(chuàng)建任務的全局變量變量描述PATH冒號隔開的目錄列表,Shell將在這些目錄中查找命令LD_LIBRARY_PATH程序運行過程中查找第三方動態(tài)庫的目錄路徑,以冒號隔開多個目錄C_INCLUDE_PATHC程序編譯過程中查找第三方頭文件的目錄路徑,以冒號隔開多個目錄CPLUS_INCLUDE_PATHC++程序編譯過程中查找第三方頭文件的目錄路徑,以冒號隔開多個目錄JAVA_HOMEJava開發(fā)環(huán)境所在目錄UID當前用戶IDHOME當前用戶的主目錄USER當前用戶名SHELL當前Shell類型PWD當前工作目錄表2-7Linux常用的環(huán)境變量的名稱和描述四、Shell變量的刪除和只讀設置方法$var1=123456$echovar1123456$unsetvar1$echo$var1$$readonlyx=9$x=10bash:x:readonlyvariable #不能再給只讀變量x賦值$declare–ry="wearefriends"$unsetybash:unset:x:cannotunset:readonlyvariable五、Shell數(shù)組的定義和使用方法定義格式:array_name=(value1...valuen)或array_name[i]=value1引用格式

${array_name[index]}示例腳本array.sh1 #!/bin/sh2 NAME[0]="Zara"3 NAME[1]="Qadir"4 NAME[2]="Mahnaz"5 echo"FirstIndex:${NAME[0]}"6 echo"SecondIndex:${NAME[1]}"$./array.shFirstIndex:ZaraSecondIndex:Qadir2.6Linux文件I/O、I/O重定向和管道一、

標準文件描述符文件描述符縮寫描述0STDIN標準輸入1STDOUT標準輸出2STDERR標準錯誤輸出二、I/O重定向1.輸出重定向格式:Comrnand>outputfile$date>outfile$ls-1outfile-rw-r--r--1richrich29Sep2417:56outfile$catoutfileTueMay2417:56:58EDT2016$who>>outfile$catoutfileTueMay2417:56:58EDT2016xuqg:02016-06-2201:22(:0)2.輸入重定向格式:comrnand<inputfi1e$wc<outfile313643.標準錯誤輸出重定向$ls-albadfi1e>outfile1s:cannotaccessbadfi1e:Nosuchfi1eordirectory$catoutfile$ls-albadfi1e2>errfile$caterrfile1s:cannotaccessbadfi1e:Nosuchfi1eordirectory$ls-altesttest2test3badtest2>test61>test7$cattest61s:cannotaccesstest:Nosuchfileordirectory1s:cannotaccessbadtest:Nosuchfileordirectory$cattest7-rw-rw-r--1richrich1582007-10-2611:32test2-rw-rw-r--1richrich02007-10-2611:33test3思考題2.7找出用戶當前主目錄下所有的C程序文件的路徑,存入文件cfile.lst。三、管道格式:commandl|commard2$cat/etc/passwd|grep/bin/bashroot:x:0:0:root:/root:/bin/bashcouchdb:x:105:113:CouchDBAdministrator,,,:/var/lib/couchdb:/bin/bashlinux:x:1000:1000:Farsight,,,:/home/linux:/bin/bashcan:x:1002:1002::/home/can:/bin/bash$cat/etc/passwd|grep/bin/bash|wc-l4四、從文件獲取輸入bash從標準輸入讀取數(shù)

溫馨提示

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

評論

0/150

提交評論