shell指令碼的那點小事兒--shell的echo認識(二)
內容一:
shell指令碼語言echo
1.顯示不普通字串
#!/bin/bash
echo "iPhone X say hello world"
2.顯示轉義字元
#!/bin/bash
echo "\"iPhone X say hello world\""
3.顯示變數
#!/bin/bash
name="jam"
echo "${name} is boy"
4.顯示換行 \n
錯誤寫法:
#!/bin/bash
echo "iPhone X say hello world \n but it is so expansive"
正確寫法
#!/bin/bash echo -e "iPhone X say hello world \n but it is so expansive"
5.不顯示換行 \n
#!/bin/bash
echo -e "iPhone X say hello world\c"
echo "but it is so expansive"
6.顯示一個執行命令
#!/bin/bash
echo `date` #(`是~按鍵,在數字1的左邊)
7.退出命令:
語法: exit 狀態碼 -> 退出程式
#!/bin/bash
iphone="404 not found"
echo ${iphone}
exit
echo "over"
狀態碼
狀態碼 | 含義 |
0 | 指令執行成功 |
1 | 一般性未知錯誤 |
2 | 不適合shell指令 |
126 | 不可執行 |
127 | 沒找到命令 |
130 | 通過control+c終止命令 |
255 | 正常範圍內退出狀態碼 |
8.重定向(核心內容)
內容二: shell指令碼的陣列
1.語法
陣列名=(value1 value2 value3)
2.1初始化陣列
方式一
#!/bin/bash array=("404 not found" "Andy" "Tom" "Lilei" "zhangsan") # 輸出 echo $陣列名 預設列印第一個元素 echo $array
方式二
#!/bin/bash
name=()
name[0]="404 not found"
name[1]="Andy"
name[2]="Tom"
name[3]="Lilei"
name[4]="zhangsan"
echo ${name[3]}
2.2陣列的讀取
${陣列名[陣列下標]} 表示輸出對應下標的資料
${陣列名[@]或[*]}表示輸出所有的資料
*將所有元素組合成一個字串
@將所有元素逐一輸出
2.3陣列的長度
獲取陣列的元素個數:${#陣列名[@]} ->獲取所有的元素,並獲取個數
獲取陣列中字串的單個元素的長度:-> ${#陣列名[元素下標]}
內容三:shell指令碼的傳遞引數
1.語法 ./檔名稱.sh param1 param2 param3 引數之間用空格隔開
./hello.sh "小明" "小豬" "小狗"
#!/bin/bash
value1=${1}
value2=${2}
value3=${3}
# 逐一輸出引數
echo "${value1} ${value2} ${value3}"
# 輸出引數個數
echo ${#}
echo ${*} 列印所有的引數,合併成一個字串
echo ${@} 列印所有的引數,逐一列印
內容四:基本的運算子
1.算數運算子:
運算子 | 語法程式碼 | 例子 | 解析 |
+ | a+b | #!/bin/bash a=1 b=1 c=`expr $a + $b` echo ${c} 輸出:2 |
expr是固定語法兩個元素相加(兩個加數之間用空格) |
- | a-b | #!/bin/bash a=1 b=1 c=`expr $a - $b` echo ${c} 輸出:0 |
expr是固定寫法兩個元素相減 |
* | a*b | #!/bin/bash a=2 b=100 c=`expr $a \* $b` echo ${c} 輸出:200 |
expr是固定寫法兩個元素相乘,需用\轉譯* |
/ | a/b | #!/bin/bash a=2 b=100 c=`expr $a / $b` echo ${c} 輸出:0 不能整除 顯示0 |
expr是固定寫法兩個元素相除 |
% | a%b | #!/bin/bash a=2 b=100 c=`expr $a % $b` echo ${c} 輸出:0 |
expr是固定寫法兩個元素求餘數 |
= | a=b | #!/bin/bash a=2 b=100 c=$b echo ${c} 輸出:100 |
賦值運算 |
== | a==b | a=84883 b=93859 if [ $a == $b ] then echo "a等於b" else echo "a不等於b" fi 輸出:a不等於b |
恆等運算子 必須if空格[] |
2.關係運算符
運算子 | 語法程式碼 | 例子 | 解析 |
-eq | a -eq b | #!/bin/bash a=100 b=2 if [ $a -eq $b ] then echo "a等於b" else echo "a不等於b" fi 輸出結果:a不等於b |
判斷兩個元素是否相等,相等返回true |
-ne | a -ne b | #!/bin/bash a=100 b=2 if [ $a -ne $b ] then echo "a不等於b" else echo "a等於b" fi 輸出結果:a不等於b |
判斷兩個元素是否不相等,不相等返回true |
-gt | a -gt b | #!/bin/bash a=100 b=2 if [ $a -gt $b ] then echo "a大於b" else echo "a小於b" fi 輸出結果:a大於b |
判斷左邊數是否大於右邊,大於返回true |
-lt | a -lt b | #!/bin/bash a=100 b=2 if [ $a -lt $b ] then echo "a大於b" else echo "a小於b" fi 輸出結果:a小於b |
判斷左邊數是否小於右邊,小於返回true |
-le | a -le b | #!/bin/bash a=100 b=2 if [ $a -le $b ] then echo "a小於b" else echo "a大於b" fi 輸出結果:a大於b |
判斷右邊數是否大於左邊,大於返回true |
-ge | a -ge b | #!/bin/bash a=2 b=200 if [ $a -ge $b ] then echo "a小於b" else echo "a大於b" fi 輸出結果:a大於b |
判斷右邊數是否小於左邊,小於返回true |
3.布林運算子
運算子 | 語法程式碼 | 例子 | 解析 |
!("!") | !=, !a, !b | #!/bin/bash a=2 b=200 if [ $a != $b ] then echo "a不等於b" else echo "a等於b" fi 輸出結果:a不等於b |
非 |
-o("or->|") | condition1 -o condition2 |
#!/bin/bash a=2 b=200 if [ $a != $b -o $a -eq 100 ] then echo "a != b" else echo "a == b" fi 輸出結果:a != b |
或運算,有一個表示式 為true,返回true |
-a("and->&") | condition1 -a condition2 |
#!/bin/bash a=2 b=200 if [ $a != $b -a $a -eq 100 ] then echo "success" else echo "falure" fi 輸出結果:falure |
與運算,所有表示式為 true,返回true |
4.邏輯運算子
運算子 | 語法程式碼 | 例子 | 解析 |
&& | condition1 && condition2 |
#!/bin/bash a=2 b=200 if [ $a != $b ] && [ $a -eq 100 ] then echo "success" else echo "falure" fi 輸出結果:falure |
邏輯與,條件都成立,才成立 |
|| | condition1 || condition2 |
#!/bin/bash a=2 b=200 if [ $a != $b ] || [ $a -eq 100 ] then echo "success" else echo "falure" fi 輸出結果:success |
邏輯或,條件滿足其一, 就成立 |
5.字串運算子
運算子 | 語法程式碼 | 例子 | 解析 |
= | a = b | #!/bin/bash a="success" b="falure" if [ $a = $b ] then echo "is equal" else echo "is not equal" fi 輸出結果:is not equal |
判斷兩個字串是否相等,相等返回true |
!= | a != b | #!/bin/bash a="success" b="falure" if [ $a != $b ] then echo "is not equal" else echo "is equal" fi 輸出結果:is not equal |
判斷兩個字串是否相等,不相等返回true |
-z | -z a | #!/bin/bash a="success" if [ -z $a ] then echo "string is null" else echo "string not null" fi 輸出結果: string not null |
檢測字串的長度是 否零,長度為0返回true |
-n | -n a | #!/bin/bash a="success" if [ -n "$a" ] then echo "string not null" else echo "string is null" fi 輸出結果: string not null |
檢測字串的長度是 否零,長度不為零返回true |
無 |
$a | #!/bin/bash a="success" if [ $a ] then echo "string not null" else echo "string is null" fi 輸出結果: string not null |
檢測字串是否為空,不為空返回true |
6.檔案處理運算子
運算子 | 語法程式碼 | 例子 | 解析 |
-d | -d a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -d $file ] then echo "it is path" else echo "it is not path" fi 輸出結果:it is path |
檢測一個字串是不是一個檔案目錄,是就返 回true |
-r | -r a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -r $file ] then echo "it is read" else echo "it is not read" fi 輸出結果:it is read |
檢測檔案是否可讀,如果可讀放回true |
-w | -w a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -w $file ] then echo "it is witre" else echo "it is not witre" fi 輸出結果:it is witre |
檢測檔案是否可寫,如果可寫返回true |
-x | -x a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -x $file ] then echo "it is enable" else echo "it is unenable" fi 輸出結果:it is enable |
檢測檔案是否可執行,如果可以執行返回true |
-f | -f a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -f $file ] then echo "it is normal" else echo "it is not normal" fi 輸出結果:it is normal |
如果是普通檔案,返回true |
-s | -s a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -s $file ] then echo "it is not null" else echo "it is null" fi 輸出結果:it is not null |
判斷檔案是否為空,如果為空返回fales,如果不為空返回true |
-e | -e a | #!/bin/bash file="/Users/avalanching/Desktop/hello.sh" if [ -e $file ] then echo "it is existence" else echo "it is not existence" fi 輸出結果:it is not null |
檢測檔案是否存在,如果存在返回true,如果不存在返回false,資料夾和檔案皆適用 |
內容五.條件控制語句
1.if
語法:
if [condition]
then
code
fi
2.if-else
語法:
if [condition]
then
code
else
code
fi
3.if-else if-else
語法:
if [condition]
then
code
elif [condition]
then
code
else
code
fi
4.for迴圈
for 變數名 in item1 item2 item3
do
code
done
e.g NO.1:
#!/bin/bash
for name in "Jar" "Andy" "Tom" "Jam"
do
echo ${name}
done
e.g NO.2:
#!/bin/bash
for name in "I don\`t know"
do
echo ${name}
done
e.g NO.3:
#!/bin/bash
list="I don't know"
for value in ${list}
do
echo $value
done
e.g NO.4:
#!/bin/bash
file="/Users/avalanching/Desktop/java/*"
for path in ${file}
do
echo ${path}
done
e.g NO.5
#!/bin/bash
for ((a=0; a<5; a++))
do
echo "a=${a}"
for ((b=0; b<a; b++))
do
echo "|--b=${b}"
done
done
5.while迴圈
#!/bin/bash
a=1
while (($a<10))
do
a=`expr $a + 1`
echo ${a}
done
無限迴圈
#!/bin/bash
while :
do
echo "hello world"
done
或
#!/bin/bash
while true
do
echo "hello world"
done
或者
#!/bin/bash
for ((;;))
do
echo "hello world"
done
6.case語句
#!/bin/bash
case vale in
value1)
code
;;
value2)
code
;;
value3)
code
;;
esac
e.g:
#!/bin/bash
number=${1}
case $number in
1)
echo "第一個";;
2)
echo "第二個";;
esac
7.until迴圈
語法結構:
#!/bin/bash
until
do
code
done
e.g:
#!/bin/bash
i=1
until (($i>1))
do
echo "i=${i}"
i=`expr $i + 1`
done
8.跳出迴圈
8.1 break 跳出單個迴圈
#!/bin/bash
for ((i=0;i<4;i++))
do
echo "第${i}次迴圈"
if [ $i == 5]
then
echo "退出迴圈"
break
fi
done
8.2 break 跳出內部迴圈
#!/bin/bash
for ((i=0;i<10;i++))
do
echo "外層第${i}次迴圈"
for ((j=0;j<i;j++))
do
echo "|--內層迴圈${j}次迴圈"
if [ $j == 5 ]
then
echo "|--退出內層迴圈"
break
fi
done
done
8.3 break 跳出外部迴圈
#!/bin/bash
for ((i=0;i<10;i++))
do
echo "外層第${i}次迴圈"
for ((j=0;j<i;j++))
do
echo "|--內層迴圈${j}次迴圈"
if [ $j == 5 ]
then
echo "|--退出內層迴圈"
break 2
fi
done
done
break number: number表示退出的迴圈層數
9.continue
#!/bin/bash
for ((i=0;i<10;i++))
do
echo "外層迴圈第${i}次"
for ((j=0;j<i;j++))
do
if [ $j == 2 ]
then
echo "|--|--執行continue"
continue
fi
echo "|--執行第${j}次"
done
done