shell

shell

1盟广、 什么是shell?

shell是一個命令解釋器躺孝,將用戶輸入的命令解釋給操作系統(tǒng)內(nèi)核。

Shell既是一種命令語言佑力,又是一種程序設(shè)計語言式散。作為命令語言,它類似于Windows下的cmd.exe打颤,可以交互式地解釋和執(zhí)行用戶輸入的命令;作為程序設(shè)計語言编饺,它定義了各種變量和參數(shù)乖篷,并提供了許多在高級語言中才具有的控制結(jié)構(gòu),但是Shell是不需要進(jìn)行編譯的透且,它是從腳本程序中一行一行的讀取并執(zhí)行命令撕蔼。

Shell有兩種執(zhí)行命令的方式:交互式(Interactive),用戶輸入一條命令秽誊,Shell就解釋執(zhí)行一條鲸沮;批處理(Batch),用戶事先寫一個Shell腳本(Script)锅论,其中有很多條命令讼溺,讓Shell一次把這些命令執(zhí)行完,而不必一條一條地敲命令最易。

2 怒坯、常見的shell類型

Linux 的 Shell 種類眾多炫狱,常見的有:

(1) BourneShell(sh):是由AT&T Bell實驗室的 Steven Bourne為AT&T的Unix開發(fā)的,它是Unix的默認(rèn)Shell剔猿,也是其它Shell的開發(fā)基礎(chǔ)视译。Bourne Shell在編程方面相當(dāng)優(yōu)秀,但在處理與用戶的交互方面不如其它幾種Shell艳馒。

(2) BourneAgain Shell (即bash):是自由軟件基金會(GNU)開發(fā)的一個Shell憎亚,它是Linux系統(tǒng)中一個默認(rèn)的Shell。Bash不但與Bourne Shell兼容弄慰,還繼承了C Shell第美、Korn Shell等優(yōu)點。

(3) ash:ash Shell是由Kenneth Almquist編寫的陆爽,是Linux 中占用系統(tǒng)資源最少的一個小Shell什往,它只包含24個內(nèi)部命令,因而使用起來很不方便慌闭。

(4) CShell(csh):是加州伯克利大學(xué)的Bill Joy為BSD Unix開發(fā)的别威,共有52個內(nèi)部命令,與sh不同,它的語法與C語言很相似。它提供了Bourne Shell所不能處理的用戶交互特征盔性,如命令補全逼纸、命令別名、歷史命令替換等。但是,C Shell與BourneShell并不兼容。該Shell其實是指向/bin/tcsh這樣的一個Shell琳拭,也就是說,csh其實就是tcsh描验。

(5) KornShell(ksh):是AT&T Bell實驗室的David Korn開發(fā)的白嘁,共有42 條內(nèi)部命令,它集合了C Shell和Bourne Shell的優(yōu)點膘流,并且與Bourne Shell向下完全兼容絮缅。Korn Shell的效率很高,其命令交互界面和編程交互界面都很好睡扬。

(6) zch:是Linux 最大的Shell之一盟蚣,由Paul Falstad完成,共有84 個內(nèi)部命令卖怜。如果只是一般的用途屎开,沒有必要安裝這樣的Shell。

可以使用系統(tǒng)變量SHELL查看當(dāng)前使用的shell:echo $SHELL
也可以到/etc/shells文件里查看系統(tǒng)可以使用的shell

3马靠、 shell的交互方式

  • 命令行
  • 腳本執(zhí)行
    • 編寫腳本奄抽,文件后綴名一般為.sh
    • 文件必須以#!/bin/bash開頭
    • 添加腳本的可執(zhí)行權(quán)限chmode +x 腳本名
    • 執(zhí)行腳本:
      • 在當(dāng)前目錄里執(zhí)行:./腳本名

      • 在其他目錄中執(zhí)行:使用絕對路徑
        #!/bin/bash
        #使用#注釋蔼两,第一行是特殊存在
        cd /
        ls -al

        :wq #存退出盤
        chmod +x 1.sh #修改權(quán)限,添加可執(zhí)行權(quán)限
        ./1.sh #執(zhí)行當(dāng)前目錄下的shell腳本

4、 定義變量

  • 變量類型

    • 局部變量:只在本shell中使用
    • 環(huán)境變量 : 使用整個系統(tǒng)逞度,一般大寫
  • 局部變量的使用
    #1 定義局部變量
    a=10 #注意等號兩邊不要留空格额划,否則會看成多個命令
    b=$a

    #2顯示局部變量
    echo b echo
    echo "a=$a" #雙引號中的變量解釋

    #3.銷毀變量
    unset a #干掉一個變量档泽,不要帶$符
    #注意反引號俊戳,反引號引起來的是命令,可以執(zhí)行馆匿,將執(zhí)行結(jié)果給變量
    d=`date`

    【注】:等號兩邊不要留空格

  • 位置變量
    $0 表示腳本的名稱
    $1-$9表示傳遞給腳本的的參數(shù)

    #test.sh腳本
    #!/bin/bash
    echo 'hello world'
    echo $0 $1 $2

    執(zhí)行輸出:
    hello world
    ./test.sh lala dudu

  • 特殊變量
    $#表示傳遞給腳本的參數(shù)個數(shù)
    $*表示傳遞給腳本的所有參數(shù)
    $?表示上一個命令執(zhí)行的返回值抑胎,返回值為0表示成功執(zhí)行,否則命令執(zhí)行錯誤

  • 常量
    readonly a=10 #定義常量
    echo $a
    a='ll' #-bash: name: 只讀變量,不能修改

5 引號

  • 雙引號中解釋變量渐北,解釋轉(zhuǎn)義字符
  • 單引號不解釋變量阿逃、不解釋轉(zhuǎn)義字符
  • 反引號會執(zhí)行當(dāng)中的內(nèi)容
  • 特殊字符要用反斜線轉(zhuǎn)義:& * ?| $ ^

6 字符串

  • 計算字符串長度${#字符串名}
  • 提取子串:${字符串名:start:len}從下標(biāo)為start開始赃蛛,提取len個字符

7 數(shù)組

  • 數(shù)組定義:a=(1 2 3) #千萬注意恃锉,數(shù)值之間用空格分隔
  • 獲取數(shù)組元素:${a[0]}
  • 賦值$a[0]=100
  • 獲取數(shù)組長度:{#a[@]}或者{#a[*]}

8 seq

  • 生成連續(xù)整數(shù)
  • 示例:seq 1 10,生成1-10的連續(xù)整數(shù)

9 運算

  • 數(shù)學(xué)運算

    shell默認(rèn)所有變量都是字符串,執(zhí)行數(shù)學(xué)計算需要用[]括起來

    a=100
    echo $[$a+10]
    echo $[$a/2]
    echo $[$a*2]
    echo $[$a-80]
    echo $[10%2]
    
    echo $((3+5))
    echo $((10/2))
    echo $((10/3))  # 整除
    echo $((10*3))
    echo $((10%3))
    
    let a=5+6
    echo $a
    let a+=10
    echo $a
    
    echo `expr 3 + 5`  #也可以用expr進(jìn)行計算
  • 關(guān)系運算
運算符 說明 舉例
-eq ==呕臂,相等返回 true破托。 [ a -eq b ]
-ne !=,不相等返回 true歧蒋。 [ a -ne b ]
-gt >炼团,如果是,則返回 true疏尿。 [ a -gt b ]
-lt <,如果是易桃,則返回 true褥琐。 [ a -lt b ]
-ge >=,如果是晤郑,則返回 true敌呈。 [ a -ge b ]
-le <=,如果是造寝,則返回 true磕洪。 [ a -le b ]
  • 邏輯運算
運算符 說明 舉例
&& 邏輯的 AND [[ a -lt 100 && b -gt 100 ]] 返回 false
|| 邏輯的 OR [[ a -lt 100 || b -gt 100 ]] 返回 true
  • 字符串判斷
運算符 說明 舉例
= 檢測兩個字符串是否相等,相等返回 true诫龙。 [ a = b ] 返回 false析显。
!= 檢測兩個字符串是否相等,不相等返回 true签赃。 [ a != b ] 返回 true谷异。
-z 檢測字符串長度是否為0分尸,為0返回 true。 [ -z $a ] 返回 false歹嘹。
str 檢測字符串是否為空箩绍,不為空返回 true。 [ $a ] 返回 true尺上。
  • 文件判斷
操作符 說明 舉例
-d file 檢測文件是否是目錄材蛛,如果是,則返回 true怎抛。 [ -d $file ] 返回 false卑吭。
-f file 檢測文件是否是普通文件(既不是目錄,也不是設(shè)備文件)抽诉,如果是陨簇,則返回 true。 [ -f $file ] 返回 true迹淌。
-r file 檢測文件是否可讀河绽,如果是,則返回 true唉窃。 [ -r $file ] 返回 true耙饰。
-w file 檢測文件是否可寫,如果是纹份,則返回 true苟跪。 [ -w $file ] 返回 true。
-x file 檢測文件是否可執(zhí)行蔓涧,如果是件已,則返回 true。 [ -x $file ] 返回 true元暴。
-s file 檢測文件是否不為空(文件大小是否大于0)篷扩,不為空返回 true。 [ -s $file ] 返回 true茉盏。
-e file 檢測文件(包括目錄)是否存在鉴未,如果是,則返回 true鸠姨。 [ -e $file ] 返回 true铜秆。

10 分支語句

  • if-else
      a=100
      if [ $a -gt 90 ]
      then
          echo "a>90"
      else
          echo "a<=90"
      fi
  • case
      case $變量名 in
       模式1)
       命令序列1
       ;;
       模式2)
       命令序列2
       ;; 
       *)
       默認(rèn)執(zhí)行的命令序列     
       ;; 
      esac
        1 #!/bin/bash
        2 case $1 in
        3     start | begin)
        4         echo "start"
        5         ;;
        6     stop | end)
        7         echo "stop"
        8         ;;
        9     *)
       10         echo "I don't know"
       11 esac

11 循環(huán)語句

-forin

for 變量 in 列表
    do
        command1
        command2
        ...
        commandN
    done
    
    示例:
    for i in 1 2 3 4 5;do
        echo $i
    done
    
    #從命令讀取值
    for line in `cat 1.txt`;do 
        echo $line
    done
    
    #讀取目錄列表
    for file in ~/*;do 
        echo $file; 
    done
    
    for i in `seq 1 100`;do
        let sum+=$i
    done
    
    #遍歷數(shù)組
    for x in ${a[*]};do 
        echo $x; 
    done
  • while
    #當(dāng)型循環(huán)
    while condition
    do
        command
    done
    
    sum=0
    i=0
    while [ $i -lt 10];do
       let sum+=$i
       let i+=1
    done
  • until
    #直到型循環(huán)
    #condition為假執(zhí)行循環(huán),為真停止
    until condition  
    do
        command
    done
    
    until [ ! $i -lt 10 ];do 
        echo $i; 
        let i+=1; 
    done

12 break和continue

break 退出當(dāng)前循環(huán)
continue 結(jié)束當(dāng)次循環(huán)

13 函數(shù)

  • 函數(shù)必須先定義后使用
    #函數(shù)定義
    test()
    {
        echo "簡單函數(shù)"
    }
    #函數(shù)調(diào)用
    test()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讶迁,一起剝皮案震驚了整個濱河市连茧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖梅屉,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件值纱,死亡現(xiàn)場離奇詭異,居然都是意外死亡坯汤,警方通過查閱死者的電腦和手機(jī)虐唠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惰聂,“玉大人疆偿,你說我怎么就攤上這事〈昊希” “怎么了杆故?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長溉愁。 經(jīng)常有香客問我处铛,道長,這世上最難降的妖魔是什么拐揭? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任撤蟆,我火速辦了婚禮,結(jié)果婚禮上堂污,老公的妹妹穿的比我還像新娘家肯。我一直安慰自己,他們只是感情好盟猖,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布讨衣。 她就那樣靜靜地躺著,像睡著了一般式镐。 火紅的嫁衣襯著肌膚如雪反镇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天娘汞,我揣著相機(jī)與錄音愿险,去河邊找鬼。 笑死价说,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的风秤。 我是一名探鬼主播鳖目,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缤弦!你這毒婦竟也來了领迈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狸捅,沒想到半個月后衷蜓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡尘喝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年磁浇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朽褪。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡置吓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缔赠,到底是詐尸還是另有隱情衍锚,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布嗤堰,位于F島的核電站戴质,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏踢匣。R本人自食惡果不足惜告匠,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望符糊。 院中可真熱鬧凫海,春花似錦、人聲如沸男娄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽模闲。三九已至建瘫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尸折,已是汗流浹背啰脚。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留实夹,地道東北人橄浓。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像亮航,于是被迫代替她去往敵國和親荸实。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 葛根湯證 太陽病缴淋,項背強(qiáng)幾幾准给,無汗惡風(fēng)者泄朴,葛根湯主之。太陽病露氮,項背強(qiáng)幾幾祖灰,而汗出惡風(fēng)者,桂枝加葛根湯主之畔规。 [[足...
    美君閱讀 178評論 0 1
  • 我心里總有個江湖 曾想武功天下第一 做個當(dāng)仁不讓的武林盟主 曾想戴金冠坐龍椅 背北面南貴為九五 也曾想倒騎一頭犟驢...
    潑皮破落兒閱讀 367評論 0 1
  • 鮮花盛開的地獄叢林是什么樣的呢局扶? 剛開瓶的酒,冒著縷縷白煙油讯,盯了半晌详民,迫不及待將它吹散。說來也真是好笑陌兑,本是為了忘...
    Jaskeiyuki閱讀 178評論 0 0
  • 魏婚夫1026閱讀 210評論 0 0