shell腳本編程書籍筆記-11章構(gòu)建基本腳本

前言:學(xué)習(xí)寫shell腳本ing……

本章概要:

多命令分號(hào)分開 ,創(chuàng)建shell腳本,美元符引用變量掐场,變量賦值,

反引號(hào)或$()捕獲命令輸出,大于號(hào)重定向輸出結(jié)果赠尾,雙大魚號(hào)追加數(shù)據(jù)辐马,

小于號(hào)輸入重定向拷橘,管道符號(hào)命令重定向,

expr整數(shù)簡便運(yùn)算喜爷,$[]內(nèi)執(zhí)行基本的數(shù)學(xué)運(yùn)行冗疮,bc計(jì)算器執(zhí)行浮點(diǎn)運(yùn)算,退出狀態(tài)碼

目錄

  1. 多命令使用與創(chuàng)建shell腳本

  2. 顯示消息與使用變量

  3. 重定向輸入輸出與管道

  4. 數(shù)學(xué)運(yùn)算與退出腳本


一檩帐、多命令使用與創(chuàng)建shell腳本

1.使用多個(gè)命令

date;who ###用;隔開即可

2.創(chuàng)建shell腳本

  1. 創(chuàng)建文件

  2. 編寫腳本

  3. 指定路徑

    需要告訴shell术幔,你的腳本在哪里,兩種方案

    3.1 將shell腳本文件所處的目錄添加到PATH環(huán)境變量中(shell會(huì)通過PATH環(huán)境變量來查找命令)湃密;
    3.2 在提示符中用絕對(duì)或相對(duì)文件路徑來引用shell腳本文件诅挑。

  4. 更改權(quán)限

    代碼如下

    vim tmp#創(chuàng)建文件并編輯
    ### 輸入,按i進(jìn)入編輯模式,可輸入內(nèi)容勾缭,按esc后揍障,:wq保存退出
    #!/bin/bash  
    date
    who
    ##賦予權(quán)限
    chmod u+x tmp
    ##執(zhí)行
    ./tmp
    

二、顯示消息與命令替換

1.顯示消息

利用echo命令顯示消息代碼如下

echo This is a test
#This is a test
echo Let's see if this'll work
#Lets see if thisll work
echo "This is a test to see if you're paying attention"
#This is a test to see if you're paying attention
 echo 'Rich says "scripting is easy".'
#Rich says "scripting is easy".

注意點(diǎn):

  1. echo命令是shell腳本中與用戶交互的重要工具
  2. echo命令通常情況下無需加引號(hào)
  3. 當(dāng)echo的消息中存在引號(hào)時(shí)俩由,需要添加另外一種引號(hào)毒嫡,上述代碼所示
  4. 如果想把文本字符串和命令輸出顯示在同一行中,用echo語句
    的-n參數(shù)幻梯。echo -n "The time and date are: "兜畸。需要在字符串的兩側(cè)使用引號(hào),保證要顯示的字符串尾部有一個(gè)空格碘梢。

2.使用變量

  • 環(huán)境變量
  1. shell維護(hù)著一組環(huán)境變量咬摇,用來記錄特定的系統(tǒng)信息

  2. 可用set命令顯示

  3. 在腳本中可用$來調(diào)用,前面的PATH也是環(huán)境變量

  4. ==反斜線的使用==:只要腳本在引號(hào)中出現(xiàn)美元符煞躬,它就會(huì)以為你在引用一個(gè)變量肛鹏,

    要使它成為美元符之意,需在前面加上反斜線\恩沛,如

    echo "The cost of the item is $15"
    #The cost of the item is 5 上面語句引用了變量1(未定義)在扰,在顯示數(shù)字5
    echo "The cost of the item is \$15"
    #The cost of the item is $15
    
  • 用戶變量

    1. 用等號(hào)將值賦給用戶變量

    2. 在變量、等號(hào)和值之間不能出現(xiàn)空格

    3. 引用一個(gè)變量值時(shí)需要使用美元符雷客,在賦值語句中使用value1變量的值時(shí)芒珠,仍然必須用美元符。

      #變量賦值示意
      var1=10
      var2=-57
      var3=testing
      var4="still more testing"
      
      #!/bin/bash
      # assigning a variable value to another variable
      value1=10
      value2=$value1 ##變量2引用變量1搅裙,仍需加美元符皱卓,不然輸出為字符value1
      echo The resulting value is $value2
      

3.命令替換

  1. 從命令輸出中提取信息裹芝,并將其賦給變量

  2. 有兩種方法可以將命令輸出賦給變量:

    反引號(hào)字符(`)

    $()格式

    testing='date'
    testing=$(date)
    
  3. 常見的例子

    #!/bin/bash
    # copy the /usr/bin directory listing to a log file
    today=$(date +%y%m%d)#+%y%m%d格式告訴date命令將日期顯示為兩位數(shù)的年月日的組合。
    ls /usr/bin -al > log.$today
    

三娜汁、重定向輸入和輸出與管道

1.重定向輸入與輸出

目的是為了保存輸出的結(jié)果

  • 輸出重定向

    1. 用大于號(hào)(>)來完成(如果輸出文件已經(jīng)存在了嫂易,重定向操作符會(huì)用新的文件數(shù)據(jù)覆蓋已有文件)
    2. 不想覆蓋文件原有內(nèi)容,可以用雙大于號(hào)(>>)來追加數(shù)據(jù)存炮。
  • 輸入重定向

    1. 輸入重定向符號(hào)是小于號(hào)(<)

    2. 內(nèi)聯(lián)輸入重定向炬搭。這種方法無需使用文件進(jìn)行重定向蜈漓,只需要在命令行中指定用于輸入重定向的數(shù)據(jù)就可以了穆桂。符號(hào)是遠(yuǎn)小于號(hào)(<<)。

      ==注意==:

      必須指定一個(gè)文本標(biāo)記來劃分輸入數(shù)據(jù)的開始和結(jié)尾融虽。

      在命令行上使用內(nèi)聯(lián)輸入重定向時(shí)享完,shell會(huì)用PS2環(huán)境變量中定義的次提示符
      來提示輸入數(shù)據(jù)

  • 示例

date > test6
date >> test6
wc < test6
wc << EOF
> test string 1
> test string 2
> test string 3
> EOF
#3 9 42 #共三行,9個(gè)單詞有额,42個(gè)字符

2.管道

將一個(gè)命令的輸出作為另一個(gè)命令的輸入般又,command1 | command2,用(|)符號(hào)即可

四巍佑、數(shù)學(xué)運(yùn)算與退出腳本

1.數(shù)學(xué)運(yùn)算

  • expr命令
  1. 特別笨拙
  2. 所以不用他
  • 使用方括號(hào)
  1. 用美元符和方括號(hào)($[ operation ])將數(shù)學(xué)表達(dá)式圍起來茴迁。
  2. 只支持整數(shù)運(yùn)算
  • 浮點(diǎn)解決方案
  1. 內(nèi)置計(jì)算器bc,通過bc命令即可訪問,退出輸入quit
  2. 希望得到小數(shù)需要改scale變量
  3. 在腳本中使用bc
    variable=$(echo "options; expression" | bc)
  4. 使用內(nèi)聯(lián)重定向萤衰,將選項(xiàng)和表達(dá)式放在腳本的不同行中可以讓處理過程變得更清晰堕义,提高易讀性。
    variable=$(bc << EOF
    options
    statements
    expressions
    EOF
    )
  • 示例
expr 1 + 5
expr 5 \* 2 ###需使用\來使*為乘法之意脆栋,而不是通配符
var1=$[1 + 5]
var2=$[$var1 * 2]##方括號(hào)就不要
bc
3.156 * (3 + 5)
25.248
quit
cat test9
#!/bin/bash
var1=$(echo "scale=4; 3.44 / 5" | bc)
echo The answer is $var1
cat test12
#!/bin/bash
var1=10.46
var2=43.67
var3=33.2
var4=71
var5=$(bc << EOF
scale = 4
a1 = ( $var1 * $var2)
b1 = ($var3 * $var4)
a1 + b1
EOF
)
echo The final answer for this mess is $var5

2.退出腳本

目的是為了知道腳本的運(yùn)行情況

  • 查看退出狀態(tài)碼
  1. 一個(gè)專門的變量$?保存上個(gè)已執(zhí)行命令的退出狀態(tài)碼倦卖。
  2. 如需查看運(yùn)行情況,須立即查看 echo $?
  3. 成功結(jié)束的命令的退出狀態(tài)碼是0椿争。有錯(cuò)誤怕膛,退出狀態(tài)是一個(gè)正數(shù)值
  • exit命令
  1. exit命令允許你在腳本結(jié)束時(shí)指定一個(gè)退出狀態(tài)碼。
  2. 當(dāng)查看腳本的退出碼時(shí)秦踪,你會(huì)得到作為參數(shù)傳給exit命令的值或變量值褐捻。
  • 示例
date
#Sat Jan 15 10:01:30 EDT 2014
echo $?
0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市椅邓,隨后出現(xiàn)的幾起案子柠逞,更是在濱河造成了極大的恐慌,老刑警劉巖希坚,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件边苹,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡裁僧,警方通過查閱死者的電腦和手機(jī)个束,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門慕购,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人茬底,你說我怎么就攤上這事沪悲。” “怎么了阱表?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵殿如,是天一觀的道長。 經(jīng)常有香客問我最爬,道長涉馁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任爱致,我火速辦了婚禮烤送,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘糠悯。我一直安慰自己帮坚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布互艾。 她就那樣靜靜地躺著试和,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纫普。 梳的紋絲不亂的頭發(fā)上阅悍,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音局嘁,去河邊找鬼溉箕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛悦昵,可吹牛的內(nèi)容都是我干的肴茄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼但指,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼寡痰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起棋凳,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤拦坠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后剩岳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贞滨,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晓铆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勺良。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骄噪,靈堂內(nèi)的尸體忽然破棺而出尚困,到底是詐尸還是另有隱情,我是刑警寧澤链蕊,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布事甜,位于F島的核電站,受9級(jí)特大地震影響滔韵,放射性物質(zhì)發(fā)生泄漏逻谦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一奏属、第九天 我趴在偏房一處隱蔽的房頂上張望跨跨。 院中可真熱鬧潮峦,春花似錦囱皿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拘悦,卻和暖如春齿兔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背础米。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工分苇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屁桑。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓医寿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蘑斧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靖秩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容