Shell腳本語言 echo命令
?
-
顯示普通字符串
腳本代碼: echo "iPhone X 標(biāo)配 8388元" 終端執(zhí)行輸出: iPhone X 標(biāo)配 8388元
-
顯示轉(zhuǎn)義字符
腳本代碼: echo "\"iPhone X 頂配 9688元\"" 終端執(zhí)行輸出: "iPhone X 頂配 9688元"
-
顯示變量
腳本代碼: iPhone="iPhone X" echo ${iPhone} 9688 終端執(zhí)行輸出: iPhone X 9688
-
顯示換行
錯(cuò)誤腳本代碼: echo "iPhone X \n hello world!" 終端執(zhí)行輸出: iPhone X \n hello world! 正確腳本代碼: echo -e "iPhone X \n hello world!" 終端執(zhí)行輸出: iPhone X hello world! 說明: -e: 表示開啟轉(zhuǎn)義功能.
-
不換行
腳本代碼一:(換行) echo "iPhone X hello" echo "world!" 終端執(zhí)行輸出: iPhone X hello world! 腳本代碼二:(不換行) echo -e "iPhone X hello \c " echo "world!" 終端執(zhí)行輸出: iPhone X hello world! 注意: -e: 表示開啟轉(zhuǎn)義功能,但是 \c 表示不換行.
-
顯示一個(gè)執(zhí)行命令
要求: 輸出當(dāng)前時(shí)間,還有很多命令后面學(xué)習(xí). 腳本代碼: echo `date` 終端執(zhí)行輸出: 2017年11月21日 星期二 16時(shí)20分43秒 CST
-
退出命令
語法: exit 狀態(tài)->退出程序 腳本代碼一: iPhone="買了一臺iPhone X,摔爆了" echo ${iPhone} exit echo "哈哈,誰讓你不小心..." 終端執(zhí)行輸出:(后面沒有輸出了,直接退出了) 買了一臺iPhone X,摔爆了 腳本代碼二: iPhone="買了一臺iPhone X,摔爆了" echo ${iPhone} exit 0 echo "哈哈,誰讓你不小心..." 終端執(zhí)行輸出:(結(jié)果同上)
Shell腳本語言 數(shù)組
?
- 語法
數(shù)組名=(值1 值2 值3...)
-
初始化數(shù)組
腳本代碼一: name=("小明" "18" "全班最菜") echo $name 終端執(zhí)行輸出:(默認(rèn)打印第一個(gè)元素) 小明 腳本代碼二: name=() name[0]="小明" name[1]="Andy" name[2]="Jim" name[3]="最菜排名" echo ${name[1]} ${name[2]} 終端執(zhí)行輸出: Andy Jim
-
讀取數(shù)組元素
語法結(jié)構(gòu):${數(shù)組名[下標(biāo)]} 腳本代碼: name=("小明" "18" "全班最菜") echo ${name[1]} 終端執(zhí)行輸出: 18 輸出所有:"@"表示輸出數(shù)組中所有的數(shù)據(jù) 腳本代碼: name=("小明" "18" "全班最菜") echo ${name[@]} 終端執(zhí)行輸出: 小明 18 全班最菜
-
獲取數(shù)組長度
獲取數(shù)組元素個(gè)數(shù)語法一: ${#數(shù)組名[@]} 腳本代碼: name=("小明" "18" "全班最菜") echo ${#name[@]} 終端執(zhí)行輸出: 3 獲取數(shù)組元素個(gè)數(shù)語法二: ${#數(shù)組名[*]} 腳本代碼: name=("小明" "18" "全班最菜") echo ${#name[*]} 終端執(zhí)行輸出: 3
-
獲取單個(gè)元素字符長度
語法:${#數(shù)組名[下標(biāo)]} 腳本代碼: name=("小明" "18" "全班最菜") echo ${#name[2]} 終端執(zhí)行輸出: 4
Shell腳本語言 參數(shù)傳遞
?
-
語法定義
./文件名.sh 參數(shù)一 參數(shù)二 參數(shù)3 ...
-
案例需求
腳本代碼: echo ${0} ${1} ${2} 終端執(zhí)行命令: /shell.sh 豆你玩 蒜你狠 終端執(zhí)行輸出: ./shell.sh 豆你玩 蒜你狠 解釋說明: ${0} -> 表示文件名稱 ${1} -> 表示參數(shù)1 ${2} -> 表示參數(shù)2
-
特殊字符
-
$#: 表示獲取腳本輸入?yún)?shù)的個(gè)數(shù)
腳本代碼: echo ${#} 終端執(zhí)行代命令: ./shell.sh 豆你玩 蒜你狠 終端執(zhí)行輸出: 2
-
$*: 表示顯示整個(gè)腳本輸入的參數(shù)列表
腳本代碼: echo ${*} 終端執(zhí)行命令: ./shell.sh 豆你玩 蒜你狠 終端執(zhí)行輸出: 豆你玩 蒜你狠
-
Shell腳本語言 基本運(yùn)算符
?
-
算術(shù)運(yùn)算符->加減乘除等
-
+
運(yùn)送注意: 'expr' 規(guī)定命令,并且規(guī)定命令后邊和運(yùn)算符兩邊都要有空格,否則會被當(dāng)成字符串處理或者報(bào)錯(cuò). 腳本代碼: a=8388 b=9688 c=`expr $a + $b` echo c的值是: $c 終端執(zhí)行輸出: c的值是: 18076
-
-
運(yùn)算注意: 'expr' 規(guī)定命令,并且規(guī)定命令后邊和運(yùn)算符兩邊都要有空格,否則會被當(dāng)成字符串處理或者報(bào)錯(cuò). 腳本代碼: a=8388 b=9688 c=`expr $a - $b` echo "c的值是: $c" 終端執(zhí)行輸出: c的值是: -1300
-
*
號運(yùn)算注意: 'expr' 規(guī)定命令,并且規(guī)定命令后邊和運(yùn)算符兩邊都要有空格,否則會被當(dāng)成字符串處理或者報(bào)錯(cuò). * 號需要轉(zhuǎn)義一下 腳本代碼: a=8388 b=9688 c=`expr $a \* $b` echo "c的值是: $c" 終端執(zhí)行輸出: c的值是: 81262944
-
/
運(yùn)算注意: 'expr' 規(guī)定命令,并且規(guī)定命令后邊和運(yùn)算符兩邊都要有空格,否則會被當(dāng)成字符串處理或者報(bào)錯(cuò). ' / ' 只記整數(shù)部分,忽略小數(shù)部分 腳本代碼: a=8388 b=9688 c=`expr $a / $b` echo "c的值是: $c" 終端執(zhí)行輸出: c的值是: 0
-
%
運(yùn)算注意: 'expr' 規(guī)定命令,并且規(guī)定命令后邊和運(yùn)算符兩邊都要有空格,否則會被當(dāng)成字符串處理或者報(bào)錯(cuò). 腳本代碼: a=8388 b=9688 c=`expr $a % $b` echo "c的值是: $c" 終端執(zhí)行輸出: c的值是: 8388
-
=
運(yùn)算腳本代碼: a=8388 b=$a echo "b的值是: $b" 終端執(zhí)行輸出: b的值是: 8388
-
==
運(yùn)算注意: `[ ]` 內(nèi)部要和變量之間以及`==`運(yùn)算符和變量之間都要有空格,否則會報(bào)錯(cuò). 腳本代碼: a=8388 b=9688 if [ $a == $b ] then echo "a等于b" else echo "a不等于b" fi 終端執(zhí)行輸出: a不等于b
-
-
關(guān)系運(yùn)算符
-
-eq
: 檢測兩個(gè)數(shù)是否相等,當(dāng)相等時(shí)返回 true腳本代碼: c=999 d=999 if [ $c -eq $d ] then echo "c等于d" else echo "c不等于d" fi 終端執(zhí)行輸出: c等于d
-
-ne
檢測兩個(gè)數(shù)是否相等,不相等返回 true腳本代碼: c=999 d=999 if [ $c -ne $d ] then echo "c不等于d" else echo "c等于d" fi 終端執(zhí)行輸出: c不等于d
-
-gt
檢測左邊數(shù)是否大于右邊,如果是,返回true腳本代碼: c=100 d=200 if [ $c -gt $d ] then echo "c大于d" else echo "c不大于d" fi 終端執(zhí)行輸出: c大于d
-
-It
檢測左邊數(shù)是否小于右邊數(shù),如果是,返回true腳本代碼: c=100 d=200 if [ $c -lt $d ] then echo "c小于d" else echo "c不小于d" fi 終端執(zhí)行輸出: c小于d
-
-ge
檢測左邊數(shù)是否大于等于(大于+等于)右邊數(shù),如果是,返回true.腳本代碼: c=1000 d=200 if [ $c -ge $d ] then echo "c大于等于d" else echo "c小于d" fi 終端執(zhí)行輸出: c大于等于d
-
le
檢測左邊數(shù)是否小于等于右邊數(shù),如果是,返回true.腳本代碼: c=100 d=200 if [ $c -le $d ] then echo "c小于等于d" else echo "c大于d" fi 終端執(zhí)行輸出: c小于等于d
-
-
布爾值運(yùn)算符
-
-o
或運(yùn)算,有一個(gè)表達(dá)式為true,則返回true.腳本代碼: a=100 b=200 if [ $a -lt 200 -o $b -gt 200 ] then echo "成立" else echo "不等于" fi 終端執(zhí)行輸出: 成立
-
-a
與運(yùn)算,兩個(gè)表達(dá)式都是true,則返回true腳本代碼: a=199 b=201 if [ $a -lt 200 -a $b -gt 200 ] then echo "成立" else echo "不等于" fi 終端執(zhí)行輸出: 成立
-
!
非運(yùn)算, 表達(dá)式為false,加上!
運(yùn)算則返回true,否則返回false.腳本代碼: a=100 b=200 if [ $a != $b ] then echo "a不等于b" else echo "a等于b" fi 終端執(zhí)行輸出: a不等于b
-
-
邏輯運(yùn)算符
-
&&
邏輯且 -> 相當(dāng)于 and 的意思腳本代碼: a=199 b=201 if [ $a -lt 200 ] && [ $b -gt 200 ] then echo "成立" else echo "不成立" fi 終端執(zhí)行輸出: 成立
-
||
邏輯或 -> 相當(dāng)于 or 的意思腳本代碼: a=199 b=201 if [ $a -lt 199 ] || [ $b -gt 200 ] then echo "成立" else echo "不成立" fi 終端執(zhí)行輸出: 成立
-
-
字符串運(yùn)算
-
=
檢測兩個(gè)字符串是否相等,如果相等,返回true.腳本代碼: a="hehe" b="hehe" if [ $a = $b ] then echo "字符串a(chǎn) 等于 字符串b" else echo "字符串a(chǎn) 不等于 字符串b" fi 終端執(zhí)行輸出: 字符串a(chǎn) 等于 字符串b
-
!=
檢測兩個(gè)字符串是否相等, 如果不相等,返回 true.腳本代碼: a="hehe" b="hehe" if [ $a != $b ] then echo "字符串a(chǎn) 不等于 字符串b" else echo "字符串a(chǎn) 等于 字符串b" fi 終端執(zhí)行輸出: 字符串a(chǎn) 等于 字符串b
-
-z
檢測字符串長度是否為0, 如果是 返回true腳本代碼: a="hehe" if [ -z $a ] then echo "a為空,不存在" else echo "a存在值" fi 終端執(zhí)行輸出: a存在值
-
-n
檢測字符串長度是否為0, 如果不是 返回true腳本代碼: a="hehe" if [ -n "$a" ] then echo "a存在值" else echo "a不存在值" fi 終端執(zhí)行輸出: a存在值 注意: if 后中括號判斷條件 $a 兩邊必須加了雙引號 "$a",否則代碼有問題
-
字符串
檢測字符串是否為空, 不為空 返回true腳本代碼: a="hehe" if [ $a ] then echo "a不為空" else echo "a為空" fi 終端執(zhí)行結(jié)果: a不為空
-
-
文件測試運(yùn)算符
-
-d file
檢測文件是不是一個(gè)目錄,如果是,那么返回true.腳本代碼: file="/Users/junde/Desktop/shell.sh" if [ -d $file ] then echo "是一個(gè)目錄" else echo "不是一個(gè)目錄" fi 終端執(zhí)行輸出: 不是一個(gè)目錄
-
-r file
檢測文件是否可讀,如果是 返回true腳本代碼: file="/Users/junde/Desktop/shell.sh" if [ -r $file ] then echo "文件可讀" else echo "文件不可讀" fi 終端執(zhí)行輸出: 文件可讀
-
-w file
檢測文件是否可寫腳本代碼: file="/Users/junde/Desktop/shell.sh" if [ -w $file ] then echo "文件可寫" else echo "文件不可寫" fi 終端執(zhí)行輸出: 文件可寫
-
x file
檢測文件是否是可執(zhí)行文件,如果是 返回true腳本代碼: file="/Users/junde/Desktop/shell.sh" if [ -x $file ] then echo "文件可執(zhí)行" else echo "文件不可執(zhí)行" fi 終端執(zhí)行輸出: 文件可執(zhí)行
-
-f file
檢測文件是否是一個(gè)普通文件(既不是目錄,也不是設(shè)備文件),如果是园骆,那么返回true腳本代碼: file="/Users/junde/Desktop/shell.sh" if [ -f $file ] then echo "文件為普通文件" else echo "文件為特殊文件" fi 終端執(zhí)行輸出: 文件為特殊文件
-
-s file
檢測文件內(nèi)部是否有內(nèi)容,如果有內(nèi)容 返回true創(chuàng)建一個(gè)空文本測試文件 `test.text` 腳本代碼: file="/Users/junde/Desktop/test.text" if [ -s $file ] then echo "文件有內(nèi)容" else echo "文件沒有內(nèi)容" fi 終端執(zhí)行輸出: 文件沒有內(nèi)容
-
-e file
檢測文件是否存在(包含了:目錄和文件), 如果是 返回true腳本代碼: file="/Users/junde/Desktop/shell.sh" if [ -e $file ] then echo "存在" else echo "不存在" fi 終端執(zhí)行輸出: 存在
-
Shell腳本語言 流程控制
?
-
if
語句語法結(jié)構(gòu): if [條件] then 代碼 else 代碼 fi 腳本代碼: 參照本文上面的例子即可
-
if else
語句的多種選擇條件語法結(jié)構(gòu): if [條件] then 代碼 elif [條件] then 代碼 else 代碼 fi 腳本代碼: a=99 b=100 if [ $a = $b ] then echo "a的值等于b" elif [ $a ] then echo "$a" else echo "其他" fi 終端執(zhí)行輸出: 99
-
for
循環(huán)語句語法結(jié)構(gòu): for 變量名 in item1 item2 item3 ... do 代碼 done 案例一: 簡單的讀取值 腳本代碼: for num in 1 9 8 8 0 9 do echo ${num} done 終端執(zhí)行輸出: 1 9 8 8 0 9 案例二: 讀取列表復(fù)雜值 -> 注意特殊字符需要轉(zhuǎn)義 腳本代碼:(錯(cuò)誤代碼) for name in "I don't know" do echo ${name} done 終端執(zhí)行輸出: I don't know 這種直接輸出字符串,不會輸出單個(gè)單詞 腳本代碼:(正確代碼) for name in I don\' t know do echo ${name} done 終端執(zhí)行輸出: I don't know 案例三: 從變量讀取里列表 腳本代碼: var="I don't know" for name in ${var} do echo ${name} done 終端執(zhí)行輸出: I don't know 案例四: 讀取目錄 -> 通配符 腳本代碼: file="/Users/junde/Desktop/*" for name in ${file} do echo ${name} done 終端執(zhí)行輸出: (太多了暫時(shí)省略一部分) /Users/junde/Desktop/Shell /Users/junde/Desktop/SwiftDemo /Users/junde/Desktop/YHPhotoBrowser 案例五: 嵌套循環(huán)(類似C語言寫法) 腳本代碼一:(普通循環(huán)) for ((a = 1; a < 5; a++)) do echo ${a} done 終端執(zhí)行輸出: 1 2 3 4 腳本代碼二:(嵌套循環(huán)) for ((a = 1; a < 5; a++)) do echo a\-\>${a} for ((b = 1; b < 5; b++)) do echo "b-->$壁袄" done done 終端執(zhí)行輸出: a->1 b-->1 b-->2 a->2 b-->1 b-->2 a->3 b-->1 b-->2 腳本代碼三: (無限循環(huán)) c=1 for ((;;)) do echo $c c=`expr $c + 1` done 終端執(zhí)行輸出:(省略...) 1 2 . . .
-
while
循環(huán)語法結(jié)構(gòu): while (條件) do 代碼 done 腳本代碼一: (基本循環(huán)) c=1 while(($c<5)) do echo $c c=`expr $c + 1` done 終端執(zhí)行輸出: 1 2 3 4 腳本代碼二: (無限循環(huán)) c=1 while : do echo $c c=`expr $c + 1` done 終端執(zhí)行輸出:(省略...) 1 2 . . .
-
case
語句語法結(jié)構(gòu): case 值 in 模式1) 代碼 ;; 模式2) 代碼 ;; 模式3) 代碼 ;; sac 腳本代碼: number=1 case $number in 1) echo "等于1" ;; 2) echo "等于2" ;; 3) echo "等于3" ;; esac 終端執(zhí)行輸出: 等于1
-
until
循環(huán)?語法結(jié)構(gòu):(當(dāng)條件為否的時(shí)候進(jìn)入邏輯代碼,無限循環(huán)) until 條件 do 邏輯代碼 done 腳本代碼: a=1 until (($a > 1)) do echo "i的值為 $a 小于等于1" done 終端執(zhí)行輸出: a的值為 1 小于等于1 a的值為 1 小于等于1 a的值為 1 小于等于1 ... 以上執(zhí)行輸出的時(shí)候:當(dāng)條件為否的時(shí)候進(jìn)入循環(huán),是一個(gè)死循環(huán),一直輸出上面結(jié)果
如果上述有錯(cuò)誤的地方,敬請告知,謝謝!