shell 學習一

來源:互聯網
上載者:User

標籤:dex   print   any   啟動   報錯   size   gre   amp   程式   

一、shell指令碼

開啟文字編輯器(可以使用vi/vim命令來建立檔案),建立一個檔案test.sh,副檔名為sh(sh代表shell),副檔名並不影響指令碼執行

#!/bin/bash
echo "Hello World !"

"#!" 是一個約定的標記,它告訴系統這個指令碼需要什麼解譯器來執行,即使用哪一種Shell。

echo命令用於向視窗輸出文本。

運行Shell指令碼有兩種方法:1、作為可執行程式

將上面的代碼儲存為test.sh,並cd到相應目錄:

chmod +x ./test.sh  #使指令碼具有執行許可權./test.sh  #執行指令碼


2、作為解譯器參數

這種運行方式是,直接運行解譯器,其參數就是shell指令碼的檔案名稱,如:/bin/sh test.sh

二、shell變數

1、定義變數時,變數名不加貨幣符號($,PHP語言中變數需要),如:your_name="cc.com"

 

注意,變數名和等號之間不能有空格,這可能和你熟悉的所有程式設計語言都不一樣。同時,變數名的命名須遵循如下規則:

 

  • 首個字元必須為字母(a-z,A-Z)。
  • 中間不能有空格,可以使用底線(_)。
  • 不能使用標點符號。
  • 不能使用bash裡的關鍵字(可用help命令查看保留關鍵字)。

 

除了顯式地直接賦值,還可以用語句給變數賦值,如:for file in `ls /etc`(以上語句將 /etc 下目錄的檔案名稱迴圈出來。) 2、使用變數使用一個定義過的變數,只要在變數名前面加貨幣符號即可,如:your_name="cc.com"

echo $your_name
echo ${your_name}變數名外面的花括弧是可選的,加不加都行,加花括弧是為了協助解譯器識別變數的邊界for skill in Ada Coffe Action Jave;do
echo "I am good at ${skill}Scipt"
done 運行結果:I am good at AdaScipt
I am good at CoffeScipt
I am good at ActionScipt
I am good at JaveScipt
推薦給所有變數加上花括弧,這是個好的編程習慣。

已定義的變數,可以被重新定義,如:
your_name="tom"
echo ${your_name}

your_name="alibaba"
echo ${your_name}

3、唯讀變數

使用 readonly 命令可以將變數定義為唯讀變數,唯讀變數的值不能被改變。

下面的例子嘗試更改唯讀變數,結果報錯:#!/bin/bash
myUrl="http://www.w2cschool.cc"
readonly myUrl

myUrl=“http://www.baidu.com”

運行結果:/usercode/file.sh: line 5: myUrl: readonly variable

4、刪除變數:

使用 unset 命令可以刪除變數,變數被刪除後不能再次使用。unset 命令不能刪除唯讀變數。

#!/bin/sh myUrl="http://www.runoob.com"

unset myUrl

echo $myUrl

5、變數類型

運行shell時,會同時存在三種變數:

  • 1) 局部變數 局部變數在指令碼或命令中定義,僅在當前shell執行個體中有效,其他shell啟動的程式不能訪問局部變數。
  • 2) 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常運行。必要的時候shell指令碼也可以定義環境變數。
  • 3) shell變數 shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是局部變數,這些變數保證了shell的正常運行
三、Shell 字串字串是shell編程中最常用最有用的資料類型(除了數字和字串,也沒啥其它類型好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。

單引號字串的限制:

 

  • 單引號裡的任何字元都會原樣輸出,單引號字串中的變數是無效的;
  • 單引號字串中不能出現單引號(對單引號使用轉義符後也不行)。

雙引號的優點:

  • 雙引號裡可以有變數
  • 雙引號裡可以出現逸出字元
  • your_name="qiqi"
    str="Hello,I know you are \"${your_name}\"!\n"
    echo ${str}
拼接字串:your_name="qiqi"
greeting="hello,"$your_name"!"
greeting_1="hi,${your_name}!"
echo $greeting $greeting_1運行結果:hello,qiqi! hi,qiqi! 擷取字串長度、提取子字串、尋找子字元的位置#!/bin/bash

string="runoob is a great company"
echo ${#string} #擷取字串長度

echo ${string:1:4}  # 提取子字串

echo `expr index "${string}" is` # 尋找字元i或s的位置

四、數組

在Shell中,用括弧來表示數組,數組元素用"空格"符號分割開。定義數組的一般形式為:

如:
array_name=(value0 value1 value2 value4)
或者:
array_name=(
value0
value1
value2
value3
value4
)
還可以單獨定義數組的各個分量:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

可以不使用連續的下標,而且下標的範圍沒有限制。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

#!/bin/bash
array_name=(value0 value1 value2 value4)

array_name=(
value0
value1
value2
value3
valuevalue4
)


array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

echo ${array_name[2]} # 讀取數組
echo ${array_name[@]} # 讀取數值的所有元素
echo length=${#array_name[@]} #取得數組元素的個數
echo length=${#array_name[*]}
echo length4=${#array_name[4]} # 取的數組單個元素的長度

Shell 注釋

以"#"開頭的行就是注釋,會被解譯器忽略。

sh裡沒有多行注釋,只能每一行加一個#號。只能像這樣:

#--------------------------------------------# 這是一個注釋# author:菜鳥教程# site:www.runoob.com# slogan:學的不僅是技術,更是夢想!#--------------------------------------------##### 使用者配置區 開始 ######## 這裡可以添加指令碼描述資訊# ###### 使用者配置區 結束  #####

如果在開發過程中,遇到大段的代碼需要臨時注釋起來,過一會兒又取消注釋,怎麼辦呢?

每一行加個#符號太費力了,可以把這一段要注釋的代碼用一對花括弧括起來,定義成一個函數,沒有地方調用這個函數,這塊代碼就不會執行,達到了和注釋一樣的效果。

 

 

 

 

shell 學習一

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.