shell一文入門通

      網(wǎng)友投稿 929 2025-04-06

      簡單來說“Shell編程就是對一堆Linux命令的邏輯化處理”。


      W3Cschool 上的一篇文章是這樣介紹 Shell的

      hello world

      學習任何一門編程語言第一件事就是輸出HelloWord了!下面我會從新建文件到shell代碼編寫來說下Shell 編程如何輸出Hello World。

      (1)新建一個文件 helloworld.sh :touch helloworld.sh,擴展名為 sh(sh代表Shell)(擴展名并不影響腳本執(zhí)行,見名知意就好,如果你用 php 寫 shell 腳本,擴展名就用 php 好了)

      (2) 使腳本具有執(zhí)行權(quán)限:chmod +x helloworld.sh

      (3) 使用 vim 命令修改helloworld.sh文件:vim helloworld.sh(vim 文件------>進入文件----->命令模式------>按i進入編輯模式----->編輯文件 ------->按Esc進入底行模式----->輸入:wq/q! (輸入wq代表寫入內(nèi)容并退出,即保存;輸入q!代表強制退出不保存。))

      helloworld.sh 內(nèi)容如下:

      #!/bin/bash

      #第一個shell小程序,echo 是linux中的輸出命令。

      echo "helloworld!"

      shell中 # 符號表示注釋。shell 的第一行比較特殊,一般都會以#!開始來指定使用的 shell 類型。在linux中,除了bash shell以外,還有很多版本的shell, 例如zsh、dash等等...不過bash shell還是我們使用最多的。

      (4) 運行腳本:./helloworld.sh?。(注意,一定要寫成?./helloworld.sh?,而不是?helloworld.sh?,運行其它二進制的程序也一樣,直接寫?helloworld.sh?,linux 系統(tǒng)會去 PATH 里尋找有沒有叫 helloworld.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的當前目錄通常不在 PATH 里,所以寫成?helloworld.sh?是會找不到命令的,要用./helloworld.sh?告訴系統(tǒng)說,就在當前目錄找。)

      變量

      Shell編程中一般分為三種變量:

      我們自己定義的變量(自定義變量):?僅在當前 Shell 實例中有效,其他 Shell 啟動的程序不能訪問局部變量。

      Linux已定義的環(huán)境變量(環(huán)境變量, 例如:$PATH, $HOME 等..., 這類變量我們可以直接使用),使用?env?命令可以查看所有的環(huán)境變量,而set命令既可以查看環(huán)境變量也可以查看自定義變量。

      Shell變量?:Shell變量是由 Shell 程序設(shè)置的特殊變量。Shell 變量中有一部分是環(huán)境變量,有一部分是局部變量,這些變量保證了 Shell 的正常運行

      常用的環(huán)境變量:

      PATH 決定了shell將到哪些目錄中尋找命令或程序 HOME 當前用戶主目錄 HISTSIZE 歷史記錄數(shù) LOGNAME 當前用戶的登錄名 HOSTNAME 指主機的名稱 SHELL 當前用戶Shell類型 LANGUGE  語言相關(guān)的環(huán)境變量,多語言可以修改此環(huán)境變量 MAIL 當前用戶的郵件存放目錄 PS1 基本提示符,對于root用戶是#,對于普通用戶是$

      使用 Linux 已定義的環(huán)境變量:

      比如我們要看當前用戶目錄可以使用:echo $HOME命令;如果我們要看當前用戶Shell類型 可以使用echo $SHELL命令。可以看出,使用方法非常簡單。

      使用自己定義的變量:

      #!/bin/bash

      #自定義變量hello

      hello="hello world"

      echo $hello

      echo "helloworld!"

      Shell 編程中的變量名的命名的注意事項:

      命名只能使用英文字母,數(shù)字和下劃線,首個字符不能以數(shù)字開頭,但是可以使用下劃線(_)開頭。

      中間不能有空格,可以使用下劃線(_)。

      不能使用標點符號

      不能使用bash里的關(guān)鍵字(可用help命令查看保留關(guān)鍵字)。

      字符串

      字符串是shell編程中最常用最有用的數(shù)據(jù)類型(除了數(shù)字和字符串,也沒啥其它類型好用了),字符串可以用單引號,也可以用雙引號。這點和Java中有所不同。

      單引號字符串:

      #!/bin/bash

      name='SnailClimb'

      hello='Hello, I am '$name'!'

      echo $hello

      輸出內(nèi)容:

      Hello, I am SnailClimb!

      雙引號字符串:

      #!/bin/bash

      name='SnailClimb'

      hello="Hello, I am "$name"!"

      echo $hello

      輸出內(nèi)容:

      Hello, I am SnailClimb!

      拼接字符串:

      #!/bin/bash

      name="SnailClimb"

      # 使用雙引號拼接

      greeting="hello, "$name" !"

      greeting_1="hello, ${name} !"

      echo $greeting $greeting_1

      # 使用單引號拼接

      greeting_2='hello, '$name' !'

      greeting_3='hello, ${name} !'

      echo $greeting_2 $greeting_3

      輸出結(jié)果:

      獲取字符串長度:

      #!/bin/bash

      #獲取字符串長度

      name="SnailClimb"

      # 第一種方式

      echo ${#name} #輸出 10

      # 第二種方式

      expr length "$name";

      輸出結(jié)果:

      10

      10

      使用 expr 命令時,表達式中的運算符左右必須包含空格,如果不包含空格,將會輸出表達式本身:

      expr 5+6 // 直接輸出 5+6

      expr 5 + 6 // 輸出 11

      對于某些運算符,還需要我們使用符號\進行轉(zhuǎn)義,否則就會提示語法錯誤。

      expr 5 * 6 // 輸出錯誤

      expr 5 \* 6 // 輸出30

      截取子字符串:

      簡單的字符串截取:

      #從字符串第 1 個字符開始往后截取 10 個字符

      str="SnailClimb is a great man"

      echo ${str:0:10} #輸出:SnailClimb

      根據(jù)表達式截取:

      #!bin/bash

      #author:amau

      shell一文入門通

      var="http://www.runoob.com/linux/linux-shell-variable.html"

      s1=${var%%t*}#h

      s2=${var%t*}#http://www.runoob.com/linux/linux-shell-variable.h

      s3=${var%%.*}#http://www

      s4=${var#*/}#/www.runoob.com/linux/linux-shell-variable.html

      s5=${var##*/}#linux-shell-variable.html

      數(shù)組

      bash支持一維數(shù)組(不支持多維數(shù)組),并且沒有限定數(shù)組的大小。我下面給了大家一個關(guān)于數(shù)組操作的 Shell 代碼示例,通過該示例大家可以知道如何創(chuàng)建數(shù)組、獲取數(shù)組長度、獲取/刪除特定位置的數(shù)組元素、刪除整個數(shù)組以及遍歷數(shù)組。

      #!/bin/bash

      array=(1 2 3 4 5);

      # 獲取數(shù)組長度

      length=${#array[@]}

      # 或者

      length2=${#array[*]}

      #輸出數(shù)組長度

      echo $length #輸出:5

      echo $length2 #輸出:5

      # 輸出數(shù)組第三個元素

      echo ${array[2]} #輸出:3

      unset array[1]# 刪除下標為1的元素也就是刪除第二個元素

      for i in ${array[@]};do echo $i ;done # 遍歷數(shù)組,輸出: 1 3 4 5

      unset arr_number; # 刪除數(shù)組中的所有元素

      for i in ${array[@]};do echo $i ;done # 遍歷數(shù)組,數(shù)組元素為空,沒有任何輸出內(nèi)容

      Shell 編程支持下面幾種運算符

      算數(shù)運算符

      關(guān)系運算符

      布爾運算符

      字符串運算符

      文件測試運算符

      算數(shù)

      我以加法運算符做一個簡單的示例(注意:不是單引號,是反引號):

      #!/bin/bash

      a=3;b=3;

      val=`expr $a + $b`

      #輸出:Total value : 6

      echo "Total value : $val"

      關(guān)系

      關(guān)系運算符只支持數(shù)字,不支持字符串,除非字符串的值是數(shù)字。

      通過一個簡單的示例演示關(guān)系運算符的使用,下面shell程序的作用是當score=100的時候輸出A否則輸出B。

      #!/bin/bash

      score=90;

      maxscore=100;

      if [ $score -eq $maxscore ]

      then

      echo "A"

      else

      echo "B"

      fi

      輸出結(jié)果:

      B

      邏輯

      示例:

      #!/bin/bash

      a=$(( 1 && 0))

      # 輸出:0;邏輯與運算只有相與的兩邊都是1,與的結(jié)果才是1;否則與的結(jié)果是0

      echo $a;

      布爾

      這里就不做演示了,應(yīng)該挺簡單的。

      字符串

      簡單示例:

      #!/bin/bash

      a="abc";

      b="efg";

      if [ $a = $b ]

      then

      echo "a 等于 b"

      else

      echo "a 不等于 b"

      fi

      輸出:

      a 不等于 b

      文件

      使用方式很簡單,比如我們定義好了一個文件路徑file="/usr/learnshell/test.sh"?如果我們想判斷這個文件是否可讀,可以這樣if [ -r $file ]?如果想判斷這個文件是否可寫,可以這樣-w $file,是不是很簡單。

      流程控制

      if

      簡單的 if else-if else 的條件語句示例

      #!/bin/bash

      a=3;

      b=9;

      if [ $a -eq $b ]

      then

      echo "a 等于 b"

      elif [ $a -gt $b ]

      then

      echo "a 大于 b"

      else

      echo "a 小于 b"

      fi

      輸出結(jié)果:

      a 小于 b

      相信大家通過上面的示例就已經(jīng)掌握了 shell 編程中的 if 條件語句。不過,還要提到的一點是,不同于我們常見的 Java 以及 PHP 中的 if 條件語句,shell if 條件語句中不能包含空語句也就是什么都不做的語句。

      for

      通過下面三個簡單的示例認識 for 循環(huán)語句最基本的使用,實際上 for 循環(huán)語句的功能比下面你看到的示例展現(xiàn)的要大得多。

      輸出當前列表中的數(shù)據(jù):

      for loop in 1 2 3 4 5

      do

      echo "The value is: $loop"

      done

      產(chǎn)生 10 個隨機數(shù):

      #!/bin/bash

      for i in {0..9};

      do

      echo $RANDOM;

      done

      輸出1到5:

      通常情況下 shell 變量調(diào)用需要加 $,但是 for 的 (()) 中不需要,下面來看一個例子:

      #!/bin/bash

      for((i=1;i<=5;i++));do

      echo $i;

      done;

      while

      基本的 while 循環(huán)語句:

      #!/bin/bash

      int=1

      while(( $int<=5 ))

      do

      echo $int

      let "int++"

      done

      while循環(huán)可用于讀取鍵盤信息:

      echo '按下 退出'

      echo -n '輸入你最喜歡的電影: '

      while read FILM

      do

      echo "是的!$FILM 是一個好電影"

      done

      輸出內(nèi)容:

      按下 退出

      輸入你最喜歡的電影: 變形金剛

      是的!變形金剛 是一個好電影

      無限循環(huán):

      while true

      do

      command

      done

      不帶參數(shù)沒有返回值的函數(shù)

      #!/bin/bash

      hello(){

      echo "這是我的第一個 shell 函數(shù)!"

      }

      echo "-----函數(shù)開始執(zhí)行-----"

      hello

      echo "-----函數(shù)執(zhí)行完畢-----"

      -----函數(shù)開始執(zhí)行-----

      這是我的第一個 shell 函數(shù)!

      -----函數(shù)執(zhí)行完畢-----

      有返回值

      相加

      #!/bin/bash

      funWithReturn(){

      echo "輸入第一個數(shù)字: "

      read aNum

      echo "輸入第二個數(shù)字: "

      read anotherNum

      echo "兩個數(shù)字分別為 $aNum 和 $anotherNum !"

      return $(($aNum+$anotherNum))

      }

      funWithReturn

      echo "輸入的兩個數(shù)字之和為 $?"

      輸入第一個數(shù)字:

      1

      輸入第二個數(shù)字:

      2

      兩個數(shù)字分別為 1 和 2 !

      輸入的兩個數(shù)字之和為 3

      帶參數(shù)

      #!/bin/bash

      funWithParam(){

      echo "第一個參數(shù)為 $1 !"

      echo "第二個參數(shù)為 $2 !"

      echo "第十個參數(shù)為 $10 !"

      echo "第十個參數(shù)為 ${10} !"

      echo "第十一個參數(shù)為 ${11} !"

      echo "參數(shù)總數(shù)有 $# 個!"

      echo "作為一個字符串輸出所有參數(shù) $* !"

      }

      funWithParam 1 2 3 4 5 6 7 8 9 34 73

      第一個參數(shù)為 1 !

      第二個參數(shù)為 2 !

      第十個參數(shù)為 10 !

      第十個參數(shù)為 34 !

      第十一個參數(shù)為 73 !

      參數(shù)總數(shù)有 11 個!

      作為一個字符串輸出所有參數(shù) 1 2 3 4 5 6 7 8 9 34 73 !

      Shell 數(shù)據(jù)結(jié)構(gòu)

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:您好,請問我有一個表格,編輯過后又復(fù)制了一個表格,我想要把編輯過的這個表格,恢復(fù)它原來的數(shù)據(jù),然后把
      下一篇:excel插不了行怎么辦(excel插不了列怎么辦)
      相關(guān)文章
      亚洲男人第一av网站| 久久国产精品亚洲一区二区| 亚洲日本香蕉视频| 亚洲AV天天做在线观看| 亚洲成A人片777777| 久久亚洲国产欧洲精品一| 亚洲熟妇无码另类久久久| 狠狠综合久久综合88亚洲| 亚洲色婷婷综合久久| 精品亚洲一区二区| 久久精品国产精品亚洲艾草网| 亚洲av无码乱码国产精品fc2| 久久亚洲AV午夜福利精品一区| 亚洲AV乱码久久精品蜜桃| 亚洲精品私拍国产福利在线| 亚洲a一级免费视频| 亚洲视频欧洲视频| 亚洲国产成人va在线观看网址| 亚洲一级免费视频| 亚洲熟女综合一区二区三区| 亚洲精品无码久久| 亚洲AV永久无码精品一区二区国产| 亚洲国产精品一区二区第一页免| 亚洲国产电影av在线网址| 国产国拍亚洲精品福利| 亚洲综合av永久无码精品一区二区| 亚洲人成人一区二区三区| 久久久久亚洲av无码尤物| 亚洲福利一区二区三区| 亚洲乱码在线观看| 亚洲av日韩精品久久久久久a| 国产成人综合久久精品亚洲| 国产91精品一区二区麻豆亚洲 | 激情综合亚洲色婷婷五月| 亚洲中文无码mv| 亚洲 另类 无码 在线| jlzzjlzz亚洲乱熟在线播放| 久久精品国产96精品亚洲| 亚洲一区二区三区免费视频| 亚洲成aⅴ人片久青草影院按摩| 亚洲国产人成中文幕一级二级|