




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
群
蝶
臺(tái)
J
P
W
N
出
s
14-1Linux下的編程
Linux的發(fā)行版中包含了很多軟件開(kāi)發(fā)工具。
它們中的很多是用于C和C++應(yīng)用程序開(kāi)發(fā)
的,本文介紹了在Linux下能用于C應(yīng)用程
序開(kāi)發(fā)和調(diào)試的工具。
Linux下的進(jìn)行網(wǎng)頁(yè)的開(kāi)發(fā)。
Linux下的shell編程。
案例一
?1、編寫簡(jiǎn)單的C程序,并用Linux下的gcc編譯器
編譯。
?2、編寫簡(jiǎn)單C++程序,并用Linux下的g++編譯器
編譯
14-2GCC介紹
GCC(GNUCCompiler)是GNU推出的功能
強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是GNU的代
表作品之一。GCC是可以在多種硬件平臺(tái)上編
譯出可執(zhí)行程序的超級(jí)編輯器,其執(zhí)行效率
與一般編譯器相比平均效率要高出20%?30%。
14-2GCC介紹
GNUC編譯器(GCC)是一個(gè)全功能的ANSI
C兼容編譯器.如果你熟悉其他操作系統(tǒng)或
硬件平臺(tái)上的一種C編譯器,你將能很快地
掌握GCC.本節(jié)將介紹如何使用GCC和一些
GCC編譯器最常用的選項(xiàng)。
14-2GCC介紹
GCC編譯器能將C、C++語(yǔ)言源程序、匯編程
序和目標(biāo)程序編譯、連接成可執(zhí)行文件,如果
沒(méi)有給出可執(zhí)行文件的名字,GCC將生成一個(gè)
名為a.out的文件。在Linux系統(tǒng)中,可執(zhí)行文
件沒(méi)有統(tǒng)一的后綴,系統(tǒng)從文件屬性來(lái)區(qū)分可
執(zhí)行文件和不可執(zhí)行文件。而GCC則通過(guò)后綴
來(lái)區(qū)別輸入文件的類別。
*14-2GCC介紹
■以.c為后綴的文件,是C語(yǔ)言源代碼文件;
?以.a為后綴的文件,是由目標(biāo)文件構(gòu)成的檔案庫(kù)文件;
?以.C,.cc或.cpp為后綴的文件,是C++源代碼文件;
■以.h為后綴的文件,是程序所包含的頭文件;
?以.i為后綴的文件,是已經(jīng)預(yù)處理的C源代碼文件;
?以.ii為后綴的文件,是已經(jīng)預(yù)處理的C++源代碼文件;
?以.m為后綴的文件,是Objective-C源代碼文件;
?以.。為后綴的文件,是編譯后的目標(biāo)文件;
■以.s為后綴的文件,是匯編語(yǔ)言源代碼文件;
?以.S為后綴的文件,是經(jīng)過(guò)預(yù)編譯的匯編語(yǔ)言源代碼文
件。
14-2GCC介紹
?使用GCC編譯程序時(shí),編譯過(guò)程可以被細(xì)分為四
個(gè)階段:
?預(yù)處理(Pre-Processing)
?編譯(Compiling)
?匯編(Assembling)
?鏈接(Linking)
14-2GCC介紹
預(yù)處理(Pre-Processing)
使用-E參數(shù)可以讓GCC在預(yù)處理結(jié)束后停止編譯
過(guò)程:生成.i的文件
#gcc-Ehello,c-ohello,i
14-2GCC介紹
?編譯(Compiling)
下一步是將hello,i編譯為目標(biāo)代碼,這可以通
過(guò)使用-c參數(shù)來(lái)完成:
#gcc-chello,i-ohello,o
14-2GCC介紹
?匯編(Assembling)和鏈接(Linking)
#gcchello,o-ohello
14-2GCC使用格式
?gcc而令格式:gcc[options][filenames]o
-Xlanguagefilename:設(shè)定文件使用的語(yǔ)言,使后綴名無(wú)
效。
例如:gcc-xchello,cd
//指定文件所使用的語(yǔ)言為C,雖然其后綴為.cd
-xnonefilename:讓GCC根據(jù)文件后綴,自動(dòng)識(shí)別文件類
型。
例如:gcc-xchello,cd-xnonetest,c
//將根據(jù)test,c的后綴名來(lái)識(shí)別文件,而指定hello,cd
的文件類型為C文件
?-C:只激活預(yù)處理、編譯和匯編,即只是把程序編譯成捐
j文件(目標(biāo)文件)。
?例如:#gcc-chello,c
//生成.o的obj文件:hello,o
?-s:只激活預(yù)處理和編譯,即把文件編譯成匯編代碼。
?例如:#gcc-Shello,c
〃生成.s的匯編代碼,可以使用文本編輯器進(jìn)
行查看。
-E只激活預(yù)處理而不生成文件,要把它重定向到一個(gè)輸出文
件里。
例如:#gcc-Ehello,c>check.txt
-o:制定目標(biāo)名稱,例如:
#gcc-ohellohello.c
#gcc-ohello,asm-Shello.c
?-includefile:包含某個(gè)代碼,簡(jiǎn)單來(lái)說(shuō),就是當(dāng)某一個(gè)
文件需要另一個(gè)文件的時(shí)候,就可以用該選項(xiàng)進(jìn)行設(shè)定,功
能就相當(dāng)于在代碼中使用#include〈filename>o
?例如#gcchello,c-include/root/pic.h
//編譯hello,c文件時(shí)包含根目錄下的pic.h頭文件。
案例解答整卷
1、編寫簡(jiǎn)單的C程序,并用Linux下的gcc編譯器編譯。
?1)用vi編譯器編輯程序如下:
[root@localhostroot]Vihello,c
ttinclude<stdio.h>
intmain()
{〃〃
printf("Helloworld,Linuxprogramming!\n/z);
return0;}
2)執(zhí)行命令編譯和運(yùn)行程序,目標(biāo)程序名為hell。
_root@localhostroot]#gcchello.c-ohello
_root@localhostroot]#./hello
Helloworld,Linuxprogramming!
?g++andGCC分別是gnu的c&c++編譯器GCC/g++在執(zhí)行!
譯工作的時(shí)候,總共需要4步:
?預(yù)處理,生成.i的文件。
?將預(yù)處理后的文件不轉(zhuǎn)換成匯編語(yǔ)言,生成文件.s。
?由匯編變?yōu)槟繕?biāo)代碼(機(jī)器代碼)生成.。的文件。
?連接目標(biāo)代碼,生成可執(zhí)行程序。
■g++和GCC區(qū)別
?兩者都可以編譯C和C++代碼,但它們的區(qū)別如下:
(1).后綴為.c的,GCC把它當(dāng)作是C程序,而g++當(dāng)作是C++程
序;后綴為.cpp的,兩者都會(huì)認(rèn)為是C++程序,雖然C++是c
的超集,但是兩者對(duì)語(yǔ)法的要求是有區(qū)別的。C++的語(yǔ)法規(guī)
則更加嚴(yán)謹(jǐn)一些。
?(2).編譯階段,g++會(huì)調(diào)用GCC,對(duì)于C++代碼,兩者是等價(jià)
的,但是因?yàn)镚CC命令不能自動(dòng)和C++程序使用的庫(kù)聯(lián)接,
所以通常用g++來(lái)完成鏈接,為了統(tǒng)一起見(jiàn),干脆編譯/鏈接
統(tǒng)統(tǒng)用g++了,這就給人一種錯(cuò)覺(jué),好像cpp程序只能用g++
似的。
案例解答
2、編寫簡(jiǎn)單C++程序,并用Linux下的g++編譯器編譯
1)用vi編輯器編輯程序testl.cc內(nèi)容如下:
[root@localhostroot]vitestl.cc
ttinclude<iostream>
usingnamespacestd;
intmain(){
cout<〈"thisisac++test”<<endl;
return0;
)
2)執(zhí)行命令編譯和運(yùn)行程序,目標(biāo)程序名為testl
_root@localhostroot]#g++-otestltestl.cc
_root@localhostroot]#./testl
thisisac++test
案例二
Linux下的簡(jiǎn)單php編程
14-3PHP簡(jiǎn)介
PHP最初是在1994年RasmusLerdorf開(kāi)始計(jì)劃發(fā)展的。在1
995年以PersonalHomePageTools(PHPTools)開(kāi)
始對(duì)外發(fā)表第一個(gè)版本。
PHP跟Apache服務(wù)器緊密結(jié)合。
其源代碼完全公開(kāi)。
14-3PHP簡(jiǎn)介
PHP具有強(qiáng)大的數(shù)據(jù)庫(kù)功能,其特點(diǎn)就是內(nèi)置了對(duì)很多數(shù)據(jù)
庫(kù)的支持,而不再需要重新擴(kuò)充
PHP作為一種能快速學(xué)習(xí)、跨平臺(tái)、有良好數(shù)據(jù)庫(kù)交互能力
的開(kāi)發(fā)語(yǔ)言,使UNIX/Linux有了一種與ASP媲美的開(kāi)發(fā)
語(yǔ)言。
14-3PHP簡(jiǎn)介
PHP具有良好的安全性,由于PHP本身的代碼開(kāi)放,所以其代
碼在許多工程師手中進(jìn)行了檢測(cè),同時(shí)與Apache編譯在
一起的方式也可以使其具有靈活的安全設(shè)定。所以到現(xiàn)
在為止,PHP具有公認(rèn)的安全性能。
總而言之,PHP是進(jìn)行動(dòng)態(tài)網(wǎng)頁(yè)編程的一個(gè)非常好的工具。
14-3PHP簡(jiǎn)介
?用戶可以從PHP官方站點(diǎn)(http://www.php.net/downl
oads.php)自由下載該軟件,目前該軟件的最新版本
為:PHP5.3.0.tar.gzo使用PHP5.0以上版本必須要下
載libxml2,可以從網(wǎng)址:http://archive,linuxfrom
scratch,org/blfs-museum/5.O-prel/BLFS-BOOK-5.0-
PRE1-HTML/general/libxml2.html下載,
安裝步驟
?#cplibxml2-2.5.11.tar.gz/usr
/將該工具包拷貝到/usr目錄
?#cd/usr〃切換工作目錄
?#tarxzvflibxml2-2.5.11.tar.gz〃解壓
?#cdlibxml2-2.5.11〃切換目錄
?#./configure〃進(jìn)行編譯前配置
?#make//編譯
?#makeinstall〃執(zhí)行makeinstall
〃接著安裝PHP5.3.0
#cpphp5.3.0.tar.gz/usr//將該工具包拷貝到/usr
#cd/usr〃切換工作目錄
#tarxzvfphp5.3.0.tar.gz//解壓
#cdphp5.3.0〃切換目錄
#./configure//進(jìn)行編譯前配置
#make〃編譯
#makeinstall//執(zhí)行makeinstall
14-4Apache+php的應(yīng)用
?為了正常運(yùn)行PHP5.0以上版本,還需要編輯apache配置文
件httpd.conf的部分選項(xiàng),并保存即可。土要改動(dòng)如下:
?^WAddTypeapplication/x-tar.tgz下力口一4亍AddTypeapp
lication/x-httpd-php.phpo
?^#LoadModulephp5_modulemodules/libphp5.$0的#號(hào)去
捻
?在Directoryindexindex,html.htmlindex,html.var后
面加index,php使其把index,php
?找到#don'tuseGroup#-lonthesesystems!,把該行
下面的用戶名和組改為Userapache和Groupapacheo
?去掉#serverName前面的扎并把后面的IP改成實(shí)際的Web服
務(wù)器IP。
?找到DocumentRoot/usr/local/apache2/htdocsv,把/u
sr/local/apache2/htdocs改為用戶存放網(wǎng)頁(yè)文件的路徑。
?為了使中文網(wǎng)頁(yè)不出現(xiàn)亂碼,找到AddDefaultCharsetiso8
859-1選項(xiàng),把后面的iso8859-1改為gb2313。
一個(gè)簡(jiǎn)單的PHP程序
<HTML>
<HEAD>
<TITLE>
<?php
Echo“Thisisatest";〃網(wǎng)頁(yè)的標(biāo)題
?>
</TITLE>
</HEAD>
<B0DY>
OH1
OHR
<?php
$friend="myfriend”;
Echo“HelloWorld!v;〃顯示的字符串
Echo"$friend”;
?>
</B0DY>
</HTML>
案例三Linux下的shell編程
1.編寫簡(jiǎn)單的shell程序,顯示當(dāng)前的日期和時(shí)間。
2.通過(guò)函數(shù)調(diào)用的方法上述功能。
3.用循環(huán)語(yǔ)句編寫「1000累計(jì)求和程序。
14.1什么是Shell
14.2shell腳本介紹
14.3shell變量
14.4控制結(jié)構(gòu)語(yǔ)句
14.1shell的概念-
?Shen是核心程序之外的指令解釋器,是一個(gè)程序,同時(shí)是
一種命令語(yǔ)言和程序設(shè)計(jì)語(yǔ)言,作為命令語(yǔ)言,它可以交互
式地解析、執(zhí)行用戶輸入的命令,作為程序設(shè)計(jì)語(yǔ)言,它定
義了各種變量和參數(shù),并且提供了許多在高級(jí)程序設(shè)計(jì)語(yǔ)言
的程序控制結(jié)構(gòu)。
14.1.2shell的類型
?它雖然不是Linux操作系統(tǒng)核心的一部分,但它調(diào)
用系統(tǒng)核心中的大部分功能來(lái)執(zhí)行程序建立文件,
并以并行的方式來(lái)協(xié)調(diào)各個(gè)程序的運(yùn)行。
?Shell的類型:ash、bash、csh>ksh
?ash:shell是由KennethAlmquist編寫的,
Linux中占用系統(tǒng)資源最少的一個(gè)小shell它只
包含24個(gè)內(nèi)部命令,因而使用起來(lái)很不方便。
?bash:bash是Linux系統(tǒng)默認(rèn)使用的shell,
它由BrianFox和ChetRamey共同完成,是Bou
rneAgainShell的縮寫,內(nèi)部命令一共有40
個(gè)。Linux默認(rèn)的shell。
?ksh:ksh是Kornshell的縮寫,由EricGisin編寫,共有4
2條內(nèi)部命令。該shell最大的優(yōu)點(diǎn)是幾乎和商業(yè)發(fā)行版的k
sh完全兼容,這樣就可以在不用花錢購(gòu)買商業(yè)版本的情況下
嘗試商業(yè)版本的性能了。
?
?csh:csh是Linux比較大的內(nèi)核,它由以WiHiamJoy為代
表的共計(jì)47位作者編成,共有52個(gè)內(nèi)部命令。該shell其實(shí)
是指向/bin/tcsh這樣的一個(gè)shell,也就是說(shuō),csh其實(shí)就
是tcsh。
14.L2shell的類型$'I
/etc/shells:使用cat/etc/shells可以獲得系統(tǒng)
中有哪些命令解釋器
[root*:^bogonroot]#cat/etc/sheII
/bin/sh
/bin/bash
/sbin/nologtn
/bin/bash2
/bin/ash
/biii/bsh
/bin/tcsh
/biii/csh
[root^^bogonroot]M$
bash:$:conrrandnotfpund
[rootci^bogon「oct]"whoami
root
[root'Sbogonroo11#
14.1.2shell的類型
?echo$SHELL可獲得當(dāng)前運(yùn)行的shell
?所有的程序都在shell中運(yùn)行
?shell中可以運(yùn)行子shell(可用如下命令)
#/bin/csh
#exit
[rool^wrool]|lecho$SHELL
/bin/bash
[rool^vw『oolN/hin/csh
[rool^wwS]UIs
aeepyhsor_yp2^,txlIxl
anaconda-ks.cf;evolutionpyh.lar.gzsorjp2,txtvid
hfile.tar.gzsor_p.txtsorjpS.Ixtyvv
Cgeesorjpl23,txtsorjp.txlyyyjxt
caffeineinstall.logsorjpl2.txtsorj.lxlyyy.ixt.iar
dinstall.log.syslogsorjpl3.txttest
docp.txlsorjpl.ixlte\t3.txl
[「oolMww1#exit
/?
exit
[root^wroot]l|
14.1.3bash的特性廝
?bash是默認(rèn)的Linuxshell
,特點(diǎn):
1.利用上下方向鍵可以快速使用使用過(guò)的命令。
2.利用Tab補(bǔ)全命令或者查找有關(guān)命令(以指定字符串或者字符開(kāi)頭的命
令列表)
3.提供自動(dòng)幫助,獲得幫助信息
#help
14.2shell腳本介紹
本節(jié)內(nèi)容:
?使用shell腳本的原因
?shell腳本基本元素。
?shell腳本運(yùn)行方式。
14.2.1使用shell腳本的原因
?shell腳本在處理自動(dòng)循環(huán)或大的任務(wù)方面可
節(jié)省大量的時(shí)間,且功能強(qiáng)大。
?對(duì)于不同的UNIX和LINUX,使用一段shell腳
本將需要一些小小的改動(dòng)才能運(yùn)行通過(guò)。
14.2.2shell腳本基本元素
?腳本不是復(fù)雜的程序,它是按行解釋的。腳本第一行
總是以#!/bin/sh開(kāi)始,這段腳本通知shell使用系
統(tǒng)上的Bourneshell解釋器。
■任何腳本都可能有注釋,加注釋需要此行的第一個(gè)字
符為#,解釋器對(duì)此行不予解釋。在第二行注釋中寫
入腳本名是一個(gè)好習(xí)慣。
?腳本從上到下執(zhí)行,運(yùn)行腳本前需要增加其執(zhí)行權(quán)限。
確保正確建立腳本路徑,這樣只用文件名就可以運(yùn)行
它了。
14.2.3shell腳本運(yùn)行方式
1.編輯腳本
[root@localhostroot]#vicleanup〃啟動(dòng)vi編輯器
#!/bin/sh//shell腳本第一行開(kāi)始
#name:cleanup〃腳本名稱
#thisisageneralcleanupscript〃腳本功能解釋
echo“startingcleanup...wait”〃腳本內(nèi)容
rm/usr/local/apps/log/*.log〃刪除目錄下的日志文件
tail-40/var/adm/messages>/tmp/messages〃最后40行轉(zhuǎn)移至臨時(shí)文件
rm/var/adm/messagesII刪除/var/adm/messages
mv/tmp/messages/var/adm/messages〃臨時(shí)文件移動(dòng)
/var/adm/messages
echoufinishedcleanup”〃清理完成
?上述腳本清除/var/adm/下信息,并刪除/usr/local/apps/log下所有注冊(cè)信
息。
2.使用chmod命令增加腳本執(zhí)行權(quán)限
[root@localhostroot]ftchmodu+xcleanup
3.運(yùn)行腳本,只敲入文件名即可。
[root@localhostroot]#./cleanup
14.3shell變量
-變量可以定制用戶本身的工作環(huán)境。使用變量
可以保存有用信息,使系統(tǒng)獲知用戶相關(guān)設(shè)置。
變量也用于保存暫時(shí)信息。
14.3.1本地變量
14.3.2環(huán)境變量
14.3.3位置變量
14.3.4特定變量參數(shù)
14.3.1本地變量
?本地變量在用戶現(xiàn)在的shell生命期的腳本中使用。
?優(yōu)點(diǎn):用戶不能對(duì)其他的shell或進(jìn)程設(shè)置此變量有效
?使用變量時(shí),如果用花括號(hào)將之括起來(lái),可以防止shell誤解
變量值,盡管不必一定要這樣做,但這確實(shí)可用。
?要設(shè)置一本地變量,格式為:
$variable-name=value或${variable-name=value}
變量設(shè)置時(shí)的不同模式
變量設(shè)置模式說(shuō)明變量設(shè)置模式說(shuō)明
Variable-name=value丫a1'141310-1141116二丫&1113設(shè)置實(shí)際值至1ka1'12
ble-name
Variable-name+alue如果設(shè)置了variable-name,則重設(shè)其值
Variable-name:?value如果未設(shè)置variable-name,顯不未定義用戶
錯(cuò)誤信息
Variable-name?value如果未設(shè)置variable-name,顯示系統(tǒng)錯(cuò)誤信
息
Variable-name:=value如果未設(shè)置variable-name,設(shè)置其值
Variable-name:-value如果未設(shè)置variable-name,設(shè)置其值,但值
是替換
顯示變量
?使用echo命令可以顯示單個(gè)變量取值,并在變
量名前加$,例如:
#GREAT_PICTURE二"diehard”
ftecho${GREAT_PICTURE}
diehard
清除變量
使用unset命令清除變量。
unsetvariable-name
例如:
[root@localhostroot]#pc=enterprice
[root@localhostroot]#echo${pc}
Enterprice
[root@localhostroot]ttunsetpc
[root@localhostroot]#echo${pc}
[root@localhostroot]#
測(cè)試變量是否已經(jīng)設(shè)置⑴
有時(shí)要測(cè)試是否已設(shè)置或初始化變量。
如果未設(shè)置或初始化,就可以使用另一值。此命令格式為:
{variable:-value}
如果設(shè)置了變量值,則使用它,如果未設(shè)置,則取新值。
?#colour=blue
?#echo"theskyis${colour:-grey}today”
?Theskyisbluetoday
測(cè)試變量是否已經(jīng)設(shè)置⑵&tl
□變量colour取值blue,echo打印變量colour時(shí),首
先查看其是否已賦值,如果查到,則使用該值?,F(xiàn)
在清除該值,再來(lái)看看結(jié)果。
[root@localhostroot]#colour=blue
[root@localhostroot]unsetcolour
[root@localhostroot]#echo“theskyis${colour:-grey}
today”
Theskyisgreytoday
上面的例子并沒(méi)有將實(shí)際值傳給變量,需使用下述
命令完成止匕功能:${variable:=value)
實(shí)用的例子
?查詢工資清單應(yīng)用的運(yùn)行時(shí)間及清單類型。在運(yùn)行時(shí)間及類
型輸入時(shí),敲回車鍵表明用戶并沒(méi)有設(shè)置兩個(gè)變量值,將使
用缺省值(03:00和Weekly),并傳入at命令中以按時(shí)啟動(dòng)
作業(yè)。
$vivartest
#!/bin/$h
#vartest
echo“whattimedoyouwishtostartthepayroll[03:00]:H
readTIME
echo"processtostartatS{TIME:=03:00}OK"
echo"Isitamonthlyorweeklyrun[Weekly]:M
readRUN_TYPE
echo"Runtypeis${RUN_TYPE:?Weekly}M
at-fworkSRUN.TYPESTIME
實(shí)用的例子
?在輸入域敲回車鍵,輸出結(jié)果如下:
,vartest
whattinedoyouwishtostartthepayroll[03:00]:
processtostartat03:00OK
Isitamonthlyorweeklyrun[Weekly]:
RuntypeisWeekly
warning:commandswillbeexecutedusing/bin/sh
job15at2007-01-1003:00
14.3.2環(huán)境變量
?環(huán)境變量用于所有用戶進(jìn)程。不像本地變量
只用于現(xiàn)在的shell,環(huán)境變量可用于所有
子進(jìn)程,這包括編輯器、腳本和應(yīng)用。
14.3.2環(huán)境變量
?環(huán)境變量可以在命令行中設(shè)置,但用戶注銷時(shí)
這些值將丟失,因此最好在.profile文件中
定義。系統(tǒng)管理員可能在/etc/profile文件中
已經(jīng)設(shè)置了一些環(huán)境變量。將之放入profile
文件意味著每次登錄時(shí)這些值都將被初始化。
設(shè)置環(huán)境變量
?傳統(tǒng)上,所有環(huán)境變量均為大寫。環(huán)境變量應(yīng)用于用戶進(jìn)程前,
必須用export命令導(dǎo)出。
?環(huán)境變量與本地變量設(shè)置方式相同。
?VARIABLE-NAME=value;exportVARIABLE-NAME
在兩個(gè)命令之間是一個(gè)分號(hào),也可以這樣寫:
?VARIABLE-NAME=value
?ExportVARIABLE-NAME
顯示環(huán)境變量
?顯示環(huán)境變量與顯示本地變量一樣,例如:
?#CONSOLE=ttyl;exportCONSOLE
?#echo$CONSOLE
?ttyl
查看所有的環(huán)境變量
?使用env命令可以查看所有的環(huán)境變量
PATHa/sbin:/bin:/usr/sbin:/usr/bin:/usr/XHR6/bin:/root/bin:
CONSOLE就tyl
HOME^/hone/dave
ASD^sdf
SHELL^/bin/sh
PS1=$
USER^dave
清除環(huán)境變量
?使用unset命令清除環(huán)境變量:
[root@localhostroot]#unsetMYPASS
[root@localhostroot]#echo${MYPASS}
[root@localhostroot]#
編寫簡(jiǎn)單的Shen程序,顯示當(dāng)前的日期和時(shí)間。
1.用vi編輯器編輯其文件functest,內(nèi)容如下:
#!/bin/bash〃shell編程
#functest//文件名
Functionhello()//函數(shù)實(shí)現(xiàn)
{
Echo^hello,todayis'data'"〃顯示今天的日期
}
Echo“nowgoingtothefunctionhello”
〃函數(shù)調(diào)用之前顯示
Hello//函數(shù)調(diào)用
Echo"backfromfunction"http://函數(shù)調(diào)用后顯示
如⑻涮眶)儲(chǔ)?終端工)轉(zhuǎn)到但ffi!l)J(H)
J:一.一_一-------―▲.,..???■???????'?—
#!/bin/bash
fffunctest
luncIionhellos)\
echoheIIo?todayisdale'
I,
echo'nowgoinglothefunctionheIIo*
hello
etho'hackfromfunctionf
2.修改文件的權(quán)限
[root@localhostroot]ttchmod755functest
3.執(zhí)行該腳本,并顯示結(jié)果
[root@localhostroot]#./functest
Nowgoingtothefunctionhello
Hellotodayis六8月1308:4041CST2009
Backfromfunction
[root@localhostroot]#
[rool^localhoslrool])lvifunclesl
frool^localhoslroot])1chnod755funrtesl
[rool^localhoslrool])l,/fundesl
nowgoingtoIhefunctionhello
heIIo.todayis四11月1308:40:41CST2008
backfromfundion
[rool^localhoslrool]H
編寫簡(jiǎn)單的Shen程序,通過(guò)函數(shù)調(diào)用的方法顯示當(dāng)前的日期
和時(shí)間。
1.用vi編輯器編輯文件functest,內(nèi)容如下:
#!/bin/bash//shell編程
#functest
.hellofun〃文件名
Echo“nowgoingtothefunctionhellov
Hello//函數(shù)調(diào)用
Echo“backfromfunction”
2.用vi編輯器編輯文件hellofun,內(nèi)容如下:$戰(zhàn).
#!/bin/bash〃shell編程呢
#hellofun
Functionhello()//函數(shù)實(shí)現(xiàn)
{一
Echovhello,todayis'date'“〃顯示今天
的日期
}
3.修改文件的權(quán)限
[root@localhostroot]ttchmod755functest
4.執(zhí)行該腳本,并顯示結(jié)果》
[root@localhostroot]#./functest
Nowgoingtothefunctionhello
Hellotodayis六8月1308:4041CST2009
Backfromfunction
zn<£>編輯?查印u終端①特到幫助(U>
#!Zbin/basb
Mfunctest
#functionheIlo()
?\
#echo'heIIo.todayisdate
heIlofun
echo'nowgoingtothefunctionheIio"
heIIo
echobackfromfunction'
functest*[已轉(zhuǎn)技]13L,182c工13,0-1全都
ruoMK心Il>os匕BX
文件(E>蝙和@也看(丫?終端3轉(zhuǎn)到(蟲
#!/bm/bash
#heIIofun
IunI.HheIIo
echoheIIortodayiidate
return1
I*hellofun*[已較短]7L.83c7,1金都日
"".
[rooitalhojlrooibvihcllofun
[rool^localhoslrool]>vifunded
[niol^localhojlrool]dchiwd755(imctesl
[rdoltalhoslroolld./funrtesl
nowgoingtoihefunctionhello
heIIo,todayisWII月1308:44:20(ST200H
jbadfromfunction
[rooi@localhosi『ool"|
set命令
?在$口(加£.profile文件中設(shè)置環(huán)境變量時(shí),還有另一種方法導(dǎo)出
這些變量。使用set命令-a選項(xiàng),即set-a指明所有變量直接被
導(dǎo)出。不要在/etc/profile中使用這種方法,最好只在自己的$口
OME.profile文件中使用。
$vi.profile
#.profile
set-a
MAIL=/usr/mai1/${LOCNAME:?}
PATH=$PATH:$HOME:bin
#
EDITOR二vi
TERMvt22O
ADMIN=/usr/adm
PS1=,,%hostname
7二二■?如初<詼儂一必修勿?二然RX
編輯?杳和義終端山轉(zhuǎn)到(9)幫助口
二」-?-----”■■,?一?PC一,一1-----二二£',、,、一—?一,?
i#)/bin/bash
中funclest
ionheIlo()
eC
13
.heIIofun
se1
echonowgoingtoIheiuncIionhello”
heIIo
echobackfromfunction'
*functest,[己轉(zhuǎn)換]I4L,192c10.7全部
ropt'S'kradhosL-B|X
文件出編轉(zhuǎn)⑥)杏看(丫?終端CDHMG)柄助包)
SESSJCN_M\N\GER=loca1/locaIhosl.locaIdonsin:/tlip/.ICE-unix/1837
SFELL=/bin/bash
ShELLCPTS=braceexpand:hashaII:inleractive-cormenIs
SKLVL=3
SSH_AGENT_PI01891
SSH_ASKPAS$=/usr/Iibexec/openssh/gnom?-ssh-askpass
SSH_ALTH_S(XX=/tnp/ssh-XXLfe\Vvf)d/agenl.1837
TERM=xterm
UIAO
USER=rool
LSERN\NE=root
\MMXAM029360392
X^LTIIKITY^/roo1/.Xuuthority
XM:D1FIERS=@im=Chinput
_=hc1lofun
heIIo(>
I..
echowheIIo.todayisdatc,:
return1
I
nowgoingtothefunctionheIIo
heIIo.todayis四11H1308:49:54CST2008
backfromfunction
[root@locaIhostrooI]#I+
文件編4W&rr終端CD?二,,'!i?H.>
I
SESS1<JN_MVN\GER=IocaI/IocaIhost.IocaIdomiin:/trrp/.1CE-unix/1837
SFf£LL=/bin/bash
SFELL<3PTS=braceexpandzha(^a1Iiinteractive-corrrn?nts
SILVL=3
SSH_/\CENT_PID=1891
SSH_/\SKP/\SS-/usr/Iibexec/openssh/gnorre-ssh-askpass
SSI_SOCK=/tnp/ssh-XXI^\^d/agent.1837
TERM=xterm
UID=4)
IJKER=rooI
lJSERN\NE=root
WNTXAM0=29360392
XXLTirJRlTY=/root/.Xaulhority
XMJD1F1ERS=@im=Chinput
__=he1Iofun
he1lo<>
(
echo*heilo?todayisdate*:
return1
I
nowgoingtothefunctionheIio
a/functest:Iine13:heIio:corrmindnotfound
backfromfunclion
M[root@locaIhoslroot]#
1433位置變量
?如果要向一個(gè)shell腳本傳遞信息,可以使用位置參數(shù)
完成此功能。參數(shù)相關(guān)數(shù)目傳入腳本,此數(shù)目可以任
意多,但只有前9個(gè)可以被訪問(wèn),使用shift命令可以
改變這個(gè)限制。參數(shù)從第一個(gè)開(kāi)始,在第9個(gè)結(jié)束;
每個(gè)訪問(wèn)參數(shù)前要加$符號(hào)。第一個(gè)參數(shù)為3表示預(yù)
留保存實(shí)際腳本名字。無(wú)論腳本是否有參數(shù),此值均
可用。
14.3.3位置變量
?如果向腳本傳送DidYouSeeTheFullMoon信息,下
面的表格講解了如何訪問(wèn)每一個(gè)參數(shù)。
SOSIS2S3S4S5S6S7S8
明卡名字DidYou阮TheFullMoon
位置變量實(shí)例
1)用vi編輯器編輯腳本param
[root@localhostroot]#viparam
#!/bin/sh
ttparam
Echo“Thisisthescriptname:$0"
Echo“Thisisthefirstparameter:$1"
Echo“Thisisthesecondparameter:$2"
Echo“Thisisthethirdparameter:$3"
Echo“Thisistheforthparameter:$4"
Echo“Thisisthefifthparameter:$5"
Echo“Thisisthesixthparameter:$6"
Echo“Thisistheseventhparameter:$7"
Echo“Thisistheeightparameter:$8"
Echo“Thisistheninthparameter:$9"
位置變量實(shí)例
2)執(zhí)行腳本
[root@localhostroot]#paramDidYouSeeTheFull
Moon
Thisisthescriptname/param
Thisisthefirstparameter:Did
Thisisthesecondparameter:You
Thisisthethirdparameter:See
Thisistheforthparameter:The
Thisisthefifthparameter:Full
Thisisthesixthparameter:Moon
Thisistheseventhparameter
Thisistheeightparameter
Thisistheninthparameter
$viparam2
#!/bin/sh
echo”Helloworldthisis$0calling11
$param2
Helloworldthisis./param2calling
向系統(tǒng)命令傳遞參數(shù)
$vifindfile
#!/bin/sh
#findfile
find/-name$1-print
$findfilepasswd
/etc/passwd
/etc/uucp/passwd
/usr/bin/passwd
14.3.4特定變量參數(shù)
特定shell變量
S#傳遞到腳本的參數(shù)個(gè)數(shù)
s*以?個(gè),嚀劑;顯小所儕硼柳滋的參乳與位置變最不同,此選項(xiàng)參數(shù)可超過(guò)。個(gè)
SS腳本運(yùn)行的當(dāng)前進(jìn)程m號(hào)
S!后臺(tái)運(yùn)行赧后一個(gè)進(jìn)程的進(jìn)程H)號(hào)
S?與$#和師但是使用時(shí)加引號(hào),并在引號(hào)中返網(wǎng)每個(gè)參數(shù)
S-顯示版II使用的當(dāng)前選項(xiàng),與就喻令功能相忖
S?顯示最后命令的退出狀菰。表示收有鐲露其他任何值翻有魁。
特定變量參數(shù)舉例
#!/bin/sh
#allparams
echo"Thisisthescriptname:S0H
echo"Thisisthefirstparameter:’1”
echo“Thisisthesecondparameter?$2”
echo"Thisisthethirdparameter:$3”
echo"Thisisthefourthparameter:$4”
echo"Thisisthefifthparameter:S5”
echo”Thisisthesixthparameter:$6”
echo”Thisistheseventhparameter:$7”
echo“Thisistheeighthparameter:$8”
echo"Thisistheninthparameter:$9"
echo“Thenumberofargumentspassed
echo"Showallarguments:$+'
echo”ShowmemyprocessID?$5"
echo"Showmetheargumentsinquotes:*'”S@"
echo*'Didmyscriptgowithanyerrors:
結(jié)果
?
MerryChristmasMrLawrence
Thisisthescriptname./param
ThisisthefirstparameterMerry
ThisisthesecondparameterChristmas
ThisisthethirdparameterMrLawrence
Thisisthefourthparameter
Thisisthefifthparameter
Thisisthesixthparameter
Thisistheseventhparameter
Thisistheeighthparameter
Thisistheninthparameter
Thenumberofargumentspassed3
ShowallargumentsMerryChristmasMrLawrence
ShowmemyprocessID630
ShowmethearguaentsinquotesnMerryn'*ChristmasMMMrLawrence"
Didmyscriptgowithanyerrors0
最后的退出狀態(tài)
?$?返回0??梢栽谌魏蚊罨蚰_本中返回此變量以獲得返
回信息?;诖诵畔?,可以在腳本中做更進(jìn)一步的研究,
返回0意味著成功,I為出現(xiàn)錯(cuò)誤。
□下面的例子拷貝文件到/tmp,并使用$?檢查結(jié)果。
$p
c?tX
$$?
echO
o
最后的退出狀態(tài)
□現(xiàn)在嘗試將一個(gè)文件拷入一個(gè)不存在的目錄或
文件:
$qpok.txt/usr/local/apps/dsf
cp:cannotcreateregularfile?/usr/local/apps/dsf1:Nosuchfileor
directory
$echo$?
1
14.3.5引號(hào)
1.引用的必要性。
2.雙引、單引和反引號(hào)。
3.使用反斜線實(shí)現(xiàn)屏蔽。
引用的必要性
?腳本中執(zhí)行行操作時(shí),shell將對(duì)腳本設(shè)置予以解釋。要
采取一種方法防止shell這樣做,即使用引用號(hào),包括各
式引用或使用反斜線。
$echoHitthestarbuttontoexit*
HitthestarbuttontoexitDIR_COLORSHOSTNAMEMuttrcXlladjtime
aliasesalias
$echoMHitthestarbuttontoexit
Hitthestarbuttontoexit?
Hll雙弓I號(hào)反引號(hào)
1Tl弓I號(hào)反斜線
雙引號(hào)
■使用雙引號(hào)可引用除字符$、'、'外的任意字符或字符串。
這些特殊字符分別為美元符號(hào),反引號(hào)和反斜線,對(duì)Shen
來(lái)說(shuō),它們有特殊意義。如果使用雙引號(hào)將字符串賦給變
量并反饋它,實(shí)際上與直接反饋?zhàn)兞坎o(wú)差別
$STRING=nMAYDAY,MAYDAY,GOINGDOWN”
$echoh$STRINGn
MAYDAY,MAYDAY,GOINGDOWN
$echo$STRING
MAYDAY,MAYDAY,GOINGDOWN
其他符號(hào)
?單引號(hào):與雙引號(hào)類似,不同的是忽略任何引用值。
換句話說(shuō),如果屏蔽了其特殊含義,會(huì)將引號(hào)里的所
有字符,包括引號(hào)都作為一個(gè)字符串。
?反引號(hào):用于設(shè)置系統(tǒng)命令的輸出到變量。Shen將反
引號(hào)中的內(nèi)容作為一個(gè)系統(tǒng)命令,并執(zhí)行其內(nèi)容。
#GIRL=tgirl,
#echodate'
#echo“The'$GIRL'didwell”
SundayJanu812:40:56GMT2007
The'giiTdidwell
14.4控制結(jié)構(gòu)語(yǔ)句
1變量表達(dá)式
2循環(huán)語(yǔ)句
3條件語(yǔ)句
14.4.1變量表達(dá)式
■在編程中,既然有變量,就有關(guān)于變量的表達(dá)式——比較
(test)o
■test的用法:
test表達(dá)式
■test的后面跟的表達(dá)式的操作符有字符串操作符、數(shù)字操
作符和邏輯操作符。
例如:判斷某個(gè)變量是否小于數(shù)值10
whiletest$num-le10
14.4.1變量表達(dá)式
i.字符串比較字符串表達(dá)式能夠測(cè)試字符串是否相等,字
符串長(zhǎng)度是否為零,或字符串是否為NULL。
字符串說(shuō)明
二比較兩個(gè)字符串是否相同,如果相同,值為“0”
1二比較兩個(gè)字符串是否相同,如果不相同,值為“0”
-n比較字符串的長(zhǎng)度是否大于零,若大于零,值為“0”
-z比較字符串的長(zhǎng)度是否等于零,若等于零,值為“0”
例子
[root@localhostroot]#viifeditor
#!/bin/sh
#ifeditor
If[-z$EDITOR];then
〃如果EDITOR長(zhǎng)度為0,貝I
#thevariablehasnotbeenset
Echo“yourEDITORenvironmentisnotset”
//EDITOR編輯器環(huán)境未設(shè)置
Else
#lefsseewhatitis
Echousing$EDITORasdefaulteditor^(^^
〃使用默認(rèn)的編輯器
fi
14.4.1變量表達(dá)式不
2.數(shù)字比較test語(yǔ)句和其他編程語(yǔ)言中的比較語(yǔ)句不同,因?yàn)樗皇?
用如〉,<,〉二等符號(hào)來(lái)表達(dá)大于和小于的比較,而是用整數(shù)表達(dá)式來(lái)表示這些。
比較字符串說(shuō)明
-eq相等
-ge大于等于
-le小于等于
-ne不等于
一gt大于
-It小于
例子1
例如:if的使用演示
[root@localhostroot]#viiftest
#!/bin/sh
#iftest
#thisisacommemtline,allcommentlinesstartwitha#
If「10”一It,12']
Then
Echo“yes,10islessthan12"〃10比12小fi
例子2
$viifparam
#l/bin/sh
#ifparam
if[S#-It3];then
#lessthan3parameterscalled,echoausagemessageandexit
echo"Usage:'basenameSO'arglarg2arg3n>42
exit1
fi
#good,received3params,let'sechothem
echo"argl:$1”
echonarg2:$2"
echoHarg3:$3”
如果只傳入兩個(gè)參數(shù),則顯示一可用信息,然后腳本退出。
$ifparamcupmedal
Usage:ifparamarglarg2arg3
這次傳入三個(gè)參數(shù)。
$ifparamcupmedaltrophy
argl:cup
arg2:medal
ar(y3:trophv
14.4.1變量表達(dá)式
3.邏輯操作
邏輯操作是對(duì)邏輯值進(jìn)行的操作,邏輯值只有
兩個(gè):是、否。
邏輯操作符說(shuō)明
!反
-a與
-o或
14.4.1變量表達(dá)式
4.文件操作文件測(cè)試表達(dá)式通常用來(lái)測(cè)試文件的信息,一
般由腳本來(lái)決定文件是否應(yīng)該備份、復(fù)制或刪除。
文件測(cè)試符說(shuō)明
-d對(duì)象存在且為目錄則返回值為0
-f對(duì)象存在且為文件則返回值為0
-1對(duì)象存在且為符號(hào)連接則返回值為0
-r對(duì)象存在且可讀則返回值為0
-s對(duì)象存在且長(zhǎng)度非0則返回值為0
-W對(duì)象存在且可寫則返回值為0
-X對(duì)象存在且可執(zhí)行則返回值為0
file-nt(-ot)file2文件1比文件2新(舊)
例子
[root@localhostroot]#viifcataudit
#!/bin/sh
#ifcataudit
#locationsofthelogfile
LOCAT_1=/usr/opts/audit/logs/audit.log
LOCAT_2=/usr/local/audit/audit.log
If[-r$LOCAT_1];then
echo“usingLOCAT_1M
cat$LOCAT_1
elif
[-r$LOCAT_2]
then
echo“usingLOCAT_2n
cat$LOCAT_2
else
echo“sorrytheauditfileisnotreadableorconnotbelocated,n>&2
exit1
fi
1442循環(huán)語(yǔ)句
1.for循環(huán)
for的語(yǔ)法
for變量in列表
do
操作
done
14.4.2循環(huán)語(yǔ)句
viforrmgz
#todeleteallfilewithextensionof“gz”inthedustbin
i=gz
foriin$HOME/dustbin/*.gz
do
rm-f$i
echou$ihasbeendeleted55
done
執(zhí)行結(jié)果如下:
[echo@echobin]$.for_rmgz
/home/echo/dustbin/file1.gzhasbeendeleted
/home/echo/dustbin/file2.gzhasbeendeleted
/home/echo/dus
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨時(shí)勞工合同范本
- 與企業(yè)有關(guān)合同范本文檔
- 書籍委托銷售合同范本
- 2024年溫州市自來(lái)水有限公司招聘考試真題
- 2024年天津市中西醫(yī)結(jié)合醫(yī)院(天津市南開(kāi)醫(yī)院)招聘考試真題
- 加油站公司合同范本
- 2024年廈門市集美區(qū)杏?xùn)|中學(xué)教師招聘考試真題
- 2024年溫州文成農(nóng)商銀行招聘筆試真題
- 鳳崗酒店蔬菜配送合同范本
- 2024年六安霍邱聯(lián)合村鎮(zhèn)銀行招聘考試真題
- 私立醫(yī)療機(jī)構(gòu)2025年運(yùn)營(yíng)策略與計(jì)劃
- 四川省眉山市眉山中學(xué)2024-2025學(xué)年高二上學(xué)期11月期中考試試題2
- 2025年蘇州農(nóng)業(yè)職業(yè)技術(shù)學(xué)院高職單招高職單招英語(yǔ)2016-2024歷年頻考點(diǎn)試題含答案解析
- 公共服務(wù)均等化研究-第2篇-深度研究
- 字體設(shè)計(jì)完整版本
- 2024年南京機(jī)電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 事業(yè)單位考試職業(yè)能力傾向測(cè)驗(yàn)(綜合管理類A類)試題與參考答案(2024年)
- 《血管活性藥物靜脈輸注護(hù)理》團(tuán)體標(biāo)準(zhǔn)解讀
- 小紅書食用農(nóng)產(chǎn)品承諾書示例
- GB/T 15934-2024電器附件電線組件和互連電線組件
- 【課件】化學(xué)與人體健康課件-九年級(jí)化學(xué)人教版(2024)下冊(cè)
評(píng)論
0/150
提交評(píng)論