標籤: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 學習一