ios進(jìn)階路線 shell腳本語言基礎(chǔ)教程(二)

Shell命令

前面我們講到了shell的常用命令:echo,這是專門用來在終端打印日志的命令,接下來我們深入講解一下這個命令。

在實際運用中常會遇到換行問題,例如:

echo "hello"

echo "world"

此時我想讓他不換行,可以這么做:

echo -e "hello \c"

echo "world"

-e:表示開啟轉(zhuǎn)義功能

\c:表示接下來不需要換行,需要和‘-e’配合使用

另外一種情況,我想一次性輸出并且換行,可以這么操作:

echo -e "hello world \nnice to meet you"

同樣要配合‘-e’轉(zhuǎn)義開關(guān)

echo還可以打印一條命令的執(zhí)行結(jié)果,格式為:echo `命令`,例如打印當(dāng)前時間:

echo `date`

注意這里的單引號不是普通的單引號,是鍵盤上esc下面那個鍵

還有一個命令:exit,作用是退出程序并可返回狀態(tài)碼,它的使用格式為:exit 參數(shù)(狀態(tài)碼),參數(shù)為可選且有較為規(guī)范的標(biāo)準(zhǔn),如下圖:


退出程序狀態(tài)碼

Shell數(shù)組

定義語法:數(shù)組名=(值1 值2 值3…)

數(shù)組打印

案例一:直接打印數(shù)組,默認(rèn)打印數(shù)組第一個元素

name=("張三" "李四" "王五")

echo $name

案例二:打印單個數(shù)組元素,語法結(jié)構(gòu):${數(shù)組名[下標(biāo)]}

name=()

name[0]="張三"

name[1]="李四"

name[2]="王五"

echo ${name[0]}? ${name[1]}?${name[2]}

案例三:打印所有數(shù)組元素,語法結(jié)構(gòu):${數(shù)組名[*]} 或者?${數(shù)組名[@]}

name=("張三" "李四" "王五")

echo ${name[@]}

echo ${name[*]}

這兩種方式有區(qū)別,

${數(shù)組名[*]} 是讀取數(shù)組所有元素當(dāng)成一個字符串輸出,類似于:“張三,李四,王五”

?${數(shù)組名[@]} 是挨個讀取數(shù)組元素并且當(dāng)成單個字符串依次輸出,類似于:“張三” “李四” “王五”

獲取數(shù)組長度

方式一:語法:${#數(shù)組名[@]}

方式二:語法:${#數(shù)組名[*]}

代碼:

name=("張三" "李四" "王五")

echo ${#name[*]}

echo ${#name[@]}

結(jié)果都為:3

Shell腳本里有個有趣的事情就是數(shù)組下標(biāo)可以無限大 程序不報錯 沒有越界crash 但是如果傳負(fù)值就會報錯

Shell腳本語言-流程控制

"if"語句,語法結(jié)構(gòu)

?if [ 條件 ]

then

????代碼

fi

有2個條件時:

?if [ 條件 ]

then

????代碼

else

fi

有超過2個條件時:

if [ 條件 ]

then

????代碼

elif

then

......

else

fi

for 循環(huán)語句

語法結(jié)構(gòu)

for ((條件))

do

代碼

done

代碼示例,循環(huán)打印0到4:

for((i=0;i<5;i++))

do

echo $i

done

無限循環(huán)可以這樣寫:

for((;;))

do

代碼

done

"for in"循環(huán)語句

語法結(jié)構(gòu)

for 變量名 in 數(shù)組

do

代碼

done

代碼案例,循環(huán)打印數(shù)組所有元素

names=("張三" "李四" "王五")

for name in ${names[@]}

do

? ? echo ${name}

done

while 循環(huán)

語法結(jié)構(gòu)

while((條件))

do

代碼

done

代碼案例,循環(huán)打印0到5

?a=0

while(($a<10))

do

echo ${a}

a=`expr $a + 1`

done

無限循環(huán)可以這樣寫:

while :

do

代碼

done

case 語句

語法結(jié)構(gòu)

case 值 in

??????????????? 模式1)

???????????????????? 代碼

???????????????????? ;;

??????????????? 模式2)

???????????????????? 代碼

???????????????????? ;;

????????????????......

??????????????? esac

代碼案例一

number=1

case $number in

1)?

echo "等于1"

;;

2)?

echo "等于2"

;;

3)?

echo "等于3"

;;

esac

until 循環(huán),字面意思是達(dá)到什么什么條件時就退出循環(huán)

語法結(jié)構(gòu)

until ((條件))

do

代碼

done

代碼示例:

number=1

until (( $number >5))

do

echo"number為${number}"

number=`expr $number + 1`

done

break 跳出循環(huán)

語法結(jié)構(gòu) break 跳出循環(huán)層數(shù),不傳參數(shù)時默認(rèn)有個參數(shù)為1,即為跳出一層循環(huán),例如:

for((i=0;i<5;i++))

do

? ? echo "外層循環(huán)"

? ? for((j=0;j<5;j++))

? ? do

? ? ? ? echo"內(nèi)層循環(huán)"

? ? ? ? break 2

? ? done

done

這里會直接跳出2層循環(huán),即當(dāng)前程序結(jié)束了

continue 跳出當(dāng)前循環(huán)開始下一個循環(huán)

代碼示例,當(dāng)j=2時不輸出,進(jìn)入下一個循環(huán):

for((j=0;j<3;j++))

do

? ? if[ $j -eq1 ]

? ? then

? ? ? ? continue

? ? fi

? ? echo "當(dāng)前循環(huán)次數(shù) j =${j}"

done

Shell運算符

算數(shù)運算符

a=1

b=2

#加法

add=`expr $a + $b`

#減法

sub=`expr $a - $b`

#乘法

mul=`expr $a \* $b`

#除法

div=`expr $a / $b`

#取余

num=`expr $a % $b`

#賦值

num2=$num

echo "c的值:$c"

expr 運算表達(dá)式,為特定命令,在進(jìn)行算數(shù)運算時使用,同時單引號為特殊單引號,乘法時需要轉(zhuǎn)義“*”

關(guān)系運算符

"-eq":檢測兩個數(shù)是否相等,當(dāng)?shù)确祷豻rue

代碼示例:

a=100

b=200

if[ $a -eq $b ]

then

? ? echo "a等于b"

else

? ? echo "a不等于b"

fi

其他判斷如下圖:

shell關(guān)系運算符

布爾運算符

"!":非運算,表達(dá)式為true,返回true,否則返回false

a=100

b=200

if[ $a != $b ]

then

?? ? echo "a不等于b"

fi

c=100

d=100

if[ $c == $d ]

then

?? ? echo"c等于d"

else

?? ? echo "c不等于d"

fi

其他判斷如下圖

shell布爾運算符

Shell邏輯運算符

"&&":邏輯且

a=100

b=200

if[ $a -lt 200 ] && [$b -gt 200 ]

then

?? ? echo"成立"

else

?? ? echo"不成立"

fi


Shell邏輯運算符

Shell字符串運算符

"=":檢測兩個字符串是否相等,如果相等返回true

a="test"

b="sorry"

if [ $a = $b ]

then

echo "字符串a(chǎn)等于字符串b"

else

echo "字符串a(chǎn)不等于字符串b"

fi

if [ $a != $b ]

then

echo "字符串a(chǎn)不等于字符串b"

else

echo "字符串a(chǎn)等于字符串b"

fi

if [ $a ]

?then

echo "a不為空"

else

echo

"a為空或者不存在"

fi

其他運算符


Shell字符串運算符

其中有個坑,“-n”檢測字符串是否有內(nèi)容或者存在,我們一般這么寫:

a="test"

if[ -n $a ]

then

echo "字符串存在或有內(nèi)容"

else

echo "字符串為空或不存在"

fi

但是實際情況你會發(fā)現(xiàn)無論把a刪了還是把a的值清空始終都是判斷為有內(nèi)容或者存在,此處需要這么改才能正常判斷:

a="test"

if[ -n"$a"]

then

echo "字符串存在或有內(nèi)容"

else

echo "字符串為空或不存在"

fi

Shell文件運算符

"-d 文件路徑":檢測目標(biāo)是不是一個目錄,如果是,那么返回true

if [ -d $file ]

then

echo "是一個目錄"

else

?echo "不是一個目錄"

fi

其他運算符:

Shell文件運算符
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容