4-1:shell编程之编写第一个shell脚本
文章目錄
- 一:什么是shell腳本
- 二:如何編寫(xiě)shell腳本
- (1)腳本文件的格式
- (2)可執(zhí)行權(quán)限
- (3)執(zhí)行腳本
- 三:第一個(gè)shell腳本
- (1)基本結(jié)構(gòu)
- (2)變量和常量
- A:創(chuàng)建變量和常量
- B:變量和常量賦值的問(wèn)題
一:什么是shell腳本
你可以這樣理解:shell腳本是一個(gè)包含一系列的文件,shell會(huì)讀取這個(gè)文件,最后執(zhí)行相應(yīng)命令。就好像這些命令是直接輸入到命令行中一樣
二:如何編寫(xiě)shell腳本
編寫(xiě)shell腳本必須明確三件事情
(1)腳本文件的格式
好的現(xiàn)在讓我們編寫(xiě)第一個(gè)shell腳本,新建一個(gè)文件hello,該腳本文件的目的就是向屏幕輸出Hello World
于是輸入
就像#include一樣,#! /bin/bash是用來(lái)告知操作系統(tǒng)用命令行解釋器的名字,每一個(gè)shell腳本都應(yīng)該以它作為第一行
(2)可執(zhí)行權(quán)限
為了讓該文件可以被執(zhí)行,需要賦予執(zhí)行權(quán)限。一般有兩種,755表示每個(gè)人都可以執(zhí)行,700表示只有腳本創(chuàng)建者可以執(zhí)行
(3)執(zhí)行腳本
好的現(xiàn)在讓我們執(zhí)行文件,還記得是如何執(zhí)行C語(yǔ)言編譯好的文件嗎?
三:第一個(gè)shell腳本
好的,經(jīng)過(guò)前面的敘述,想必大家對(duì)shell腳本應(yīng)該有了一個(gè)簡(jiǎn)單的認(rèn)識(shí)了吧。現(xiàn)在我來(lái)做一個(gè)案例,我們要編寫(xiě)一個(gè)報(bào)告生成器,用來(lái)顯示系統(tǒng)的各種統(tǒng)計(jì)數(shù)據(jù)和狀態(tài),并以HTML的方式保存。這樣每次運(yùn)行這個(gè)腳本,它就能獲取最新的系統(tǒng)狀況了。
(1)基本結(jié)構(gòu)
我認(rèn)為HTML的基本格式大家都應(yīng)該知道吧
<DOCTYPE html>5 <html>6 <head>7 <meta charset="utf-8">8 <title>TEST</title>9 </head>10 <body>11 can you see me? 12 </body>13 </html>首先我們需要將這個(gè)html文件輸出到標(biāo)準(zhǔn)輸出,編寫(xiě)腳本如下
然后運(yùn)行這段程序,并將其重定向到文件info.html中
接著使用火狐瀏覽器打開(kāi)這個(gè)文件,就可以看見(jiàn)相應(yīng)的內(nèi)容了
好的繼續(xù)完善如下
(2)變量和常量
可以發(fā)現(xiàn)上面我們的腳本出現(xiàn)了兩次System information report,類(lèi)似于C語(yǔ)言中的宏,對(duì)于這種多次出現(xiàn)的如果需要修改時(shí)工作量會(huì)很大,所以我們這樣做**,類(lèi)似于C語(yǔ)言中的字符串,定義一個(gè)變量存儲(chǔ)它,修改時(shí)只需修改變量的內(nèi)容**
1 #! /bin/bash2 3 4 mytitle="System information report" //變量 5 echo "6 <DOCTYPE html>7 <html>8 <head>9 <meta charset="utf-8">10 <title>$title</title>11 </head>12 <body>13 <h1>$title</h1>14 </body>15 </html>16 "A:創(chuàng)建變量和常量
不同于某些編程語(yǔ)言,shell遇見(jiàn)一個(gè)新的變量時(shí),會(huì)自動(dòng)創(chuàng)建這個(gè)變量。
比如在命令行中,為變量賦值為yes,然后使用$擴(kuò)展進(jìn)行查看
如果直接使用參數(shù)擴(kuò)展查看一個(gè)沒(méi)有命名的變量,那么這個(gè)變量將會(huì)被自動(dòng)創(chuàng)建,并且被賦值為空值
這樣會(huì)導(dǎo)致一些問(wèn)題,比如下面test和test1兩個(gè)文件,還有test和test1兩個(gè)變量,他么分別賦值為test.txt和test1.txt,使用cp命令將test變量的值復(fù)制給test1,如果輸入正確,將達(dá)到我們的目的。但是如果故意輸入錯(cuò)誤,那么根據(jù)前面的描述,cp的第二個(gè)參數(shù)就會(huì)成為了空值
所以變量就意味著會(huì)發(fā)生變化,類(lèi)似于用const修飾的變量,我們需要常量,使其值不能發(fā)生變化,發(fā)生變化就會(huì)報(bào)錯(cuò)
在shell中我們用大寫(xiě)字母表示常量,用小寫(xiě)字母表示變量
我們把之前的例子,修改如下,使用擴(kuò)展來(lái)輸出我們的主機(jī)名
B:變量和常量賦值的問(wèn)題
shell并不關(guān)心的你的變量是什么類(lèi)型的,因?yàn)樗紩?huì)被當(dāng)做字符串,但是要注意以下問(wèn)題
在擴(kuò)展期間,變量名稱可以用花括號(hào)括起來(lái),當(dāng)變量名因?yàn)橹茉猸h(huán)境而變得不明確時(shí),就會(huì)非常有幫助
比如要使用變量的方式,將一個(gè)文件的名字由file改為file1
如果直接操作,會(huì)發(fā)現(xiàn)由于$name1會(huì)被當(dāng)做新的變量名,而產(chǎn)生空值,所以使用花括號(hào)會(huì)解決這種歧義的問(wèn)題
好的回歸正題,我們加入一些其他信息
1 #! /bin/bash2 3 4 MYTTILE="System information report for $HOSTNAME" 5 TIME=$(date) 5 echo "6 <DOCTYPE html>7 <html>8 <head>9 <meta charset="utf-8">10 <title>$TITLE</title>11 </head>12 <body>13 <h1>$TITLE</h1>14 <h2>time is :$TIME</h2>14 </body>15 </html>16 "總結(jié)
以上是生活随笔為你收集整理的4-1:shell编程之编写第一个shell脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php 将查询出的数组数据存入redis
- 下一篇: __block 和 __weak的区别