1. 程式人生 > >shell指令碼的那點小事兒--shell的echo認識(二)

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

注意:以上的縮排是為了方便檢視層級關係,如果在執行程式碼中報錯(not found command),請去除縮排,注意if後的空格